diff --git a/.github/test-spec.yml b/.github/test-spec.yml index defe5414dff7..223e71d7065b 100644 --- a/.github/test-spec.yml +++ b/.github/test-spec.yml @@ -14,15 +14,19 @@ "CI-tool-test-linux": - "scripts/requirements*.txt" - - "scripts/tools-versions-linux.txt" + - "scripts/tools-versions-linux.yml" "CI-tool-test-win": - "scripts/requirements*.txt" - - "scripts/tools-versions-win10.txt" + - "scripts/tools-versions-win10.yml" "CI-tool-test-darwin": - "scripts/requirements*.txt" - - "scripts/tools-versions-darwin.txt" + - "scripts/tools-versions-darwin.yml" + +"CI-doc-internal": + - "doc/requirements.txt" + - "scripts/tools-versions-linux.yml" "CI-iot-serial-lte-modem-test": - "applications/serial_lte_modem/**/*" @@ -34,7 +38,7 @@ - "lib/nrf_modem_lib/**/*" - "lib/sms/**/*" - "subsys/dfu/dfu_target/**/*" - - "subsys/net/lib/download_client/**/*" + - "subsys/net/lib/downloader/**/*" - "subsys/net/lib/fota_download/**/*" - "subsys/net/lib/ftp_client/**/*" - "subsys/net/lib/nrf_cloud/**/*" @@ -47,7 +51,7 @@ - "lib/modem_info/**/*" - "lib/modem_key_mgmt/**/*" - "lib/date_time/**/*" - - "subsys/net/lib/download_client/**/*" + - "subsys/net/lib/downloader/**/*" - "subsys/net/lib/fota_download/**/*" - "subsys/net/lib/lwm2m_client_utils/**/*" - "subsys/dfu/dfu_target/**/*" @@ -77,7 +81,7 @@ - "include/modem/nrf_modem_lib.h" - "include/modem/pdn.h" - "include/modem/sms.h" - - "include/net/download_client.h" + - "include/net/downloader.h" - "include/secure_services.h" - "lib/at_host/**/*" - "lib/at_monitor/**/*" @@ -98,7 +102,7 @@ - "samples/cellular/pdn/**/*" - "samples/cellular/sms/**/*" - "samples/cellular/udp/**/*" - - "subsys/net/lib/download_client/**/*" + - "subsys/net/lib/downloader/**/*" "CI-lwm2m-test": - "include/modem/lte_lc*.h" @@ -110,8 +114,8 @@ - "samples/cellular/lwm2m_carrier/**/*" - "include/modem/at_monitor.h" - "lib/at_monitor/**/*" - - "include/net/download_client.h" - - "subsys/net/lib/download_client/**/*" + - "include/net/downloader.h" + - "subsys/net/lib/downloader/**/*" - "lib/sms/**/*" - "include/modem/sms.h" - "lib/pdn/**/*" @@ -125,11 +129,12 @@ - "include/fw_info.*" - "include/mgmt/*" - "include/dfu/**/*" + - "include/drivers/flash/flash_ipuc.h" - "include/net/**/*" - - "cmake/*" - "lib/lte_link_control/**/*" - "modules/mcuboot/**/*" - "modules/trusted-firmware-m/*" + - "drivers/flash/flash_ipuc/*" - "samples/cellular/*fota/**/*" - "samples/cellular/fmfu_smp_svr/**/*" - "samples/cellular/http_update/**/*" @@ -144,7 +149,8 @@ - "subsys/mgmt/**/*" - "subsys/pcd/*" - "subsys/net/lib/*fota*/**/*" - - "subsys/net/lib/download_client/**/*" + - "subsys/net/lib/downloader/**/*" + - "tests/drivers/flash/flash_ipuc/**/*" - "tests/subsys/bootloader/**/*" - "tests/subsys/dfu/**/*" @@ -154,8 +160,6 @@ - "include/fw_info.*" - "include/mgmt/*" - "include/net/**/*" - - "cmake/**/*" - - "sysbuild/**/*" - "modules/mcuboot/**/*" - "modules/trusted-firmware-m/*" - "samples/nrf5340/netboot/**/*" @@ -174,9 +178,10 @@ "CI-all-test": - "subsys/partition_manager/**/*" + - "cmake/**/*" + - "sysbuild/**/*" "CI-tfm-test": - - "cmake/*" - "include/tfm/**/*" - "modules/nrfxlib/**/*" - "modules/tfm/**/*" @@ -203,7 +208,30 @@ - "drivers/mpsl/**/*" "CI-ble-samples-test": - - "samples/bluetooth/**/*" + - "samples/bluetooth/central_and_peripheral_hr/*" + - "samples/bluetooth/central_bas/*" + - "samples/bluetooth/central_hids/*" + - "samples/bluetooth/central_hr_coded/*" + - "samples/bluetooth/central_smp_client/*" + - "samples/bluetooth/central_uart/*" + - "samples/bluetooth/direct_test_mode/*" + - "samples/bluetooth/llpm/*" + - "samples/bluetooth/nrf_dm/*" + - "samples/bluetooth/peripheral_ancs_client/*" + - "samples/bluetooth/peripheral_bms/*" + - "samples/bluetooth/peripheral_cgms/*" + - "samples/bluetooth/peripheral_cts_client/*" + - "samples/bluetooth/peripheral_gatt_dm/*" + - "samples/bluetooth/peripheral_hids_keyboard/*" + - "samples/bluetooth/peripheral_hids_mouse/*" + - "samples/bluetooth/peripheral_lbs/*" + - "samples/bluetooth/peripheral_mds/*" + - "samples/bluetooth/peripheral_rscs/*" + - "samples/bluetooth/peripheral_status/*" + - "samples/bluetooth/peripheral_uart/*" + - "samples/bluetooth/radio_coex_1wire/*" + - "samples/bluetooth/throughput/*" + - "samples/mpsl/timeslot/*" - "samples/peripheral/radio_test/**/*" - "subsys/nrf_rpc/**/*" - "subsys/mpsl/**/*" @@ -238,7 +266,7 @@ - "subsys/bluetooth/services/nus.c" - "drivers/mpsl/**/*" - "dts/bindings/radio_fem/**/*" - - "samples/nrf5340/multiprotocol_rpmsg/**/*" + - "applications/ipc_radio/**/*" - "modules/nrfxlib/nrf_802154/**/*" - "modules/mcuboot/**/*" - "applications/zigbee_weather_station/**/*" @@ -254,6 +282,11 @@ - "applications/asset_tracker_v2/**/*" - "samples/net/aws_iot/**/*" - "samples/net/azure_iot_hub/**/*" + - "samples/net/coap_client/**/*" + - "samples/net/download/**/*" + - "samples/net/http_server/**/*" + - "samples/net/https_client/**/*" + - "samples/net/mqtt/**/*" - "samples/net/udp/**/*" "CI-apps-test": @@ -272,7 +305,6 @@ - "boards/nordic/*mouse/**/*" - "boards/nordic/*kbd/**/*" - "boards/nordic/*dongle/**/*" - - "cmake/*" - "drivers/sensor/paw3212/**/*" - "drivers/sensor/pmw3360/**/*" - "dts/bindings/sensor/pixart*" @@ -289,7 +321,6 @@ - "subsys/partition_manager/**/*" "CI-crypto-test": - - "cmake/*" - "drivers/entropy/*" - "drivers/hw_cc3xx/*" - "drivers/net/*" @@ -313,7 +344,7 @@ - "subsys/nrf_rpc/**/*" - "drivers/mpsl/**/*" - "dts/bindings/radio_fem/**/*" - - "samples/nrf5340/multiprotocol_rpmsg/**/*" + - "applications/ipc_radio/**/*" - "modules/nrfxlib/nrf_802154/**/*" - "samples/CMakeLists.txt" @@ -326,7 +357,7 @@ - "drivers/mpsl/**/*" - "boards/shields/**/*" - "dts/bindings/radio_fem/**/*" - - "samples/nrf5340/multiprotocol_rpmsg/**/*" + - "applications/ipc_radio/**/*" - "modules/nrfxlib/nrf_802154/**/*" - "samples/CMakeLists.txt" @@ -374,12 +405,11 @@ - "samples/matter/**/*" - "applications/matter_bridge/**/*" - "applications/matter_weather_station/**/*" - - "samples/nrf5340/multiprotocol_rpmsg/**/*" + - "applications/ipc_radio/**/*" "CI-find-my-test": - "CMakeLists.txt" - "Kconfig.nrf" - - "cmake/**/*" - "drivers/entropy/**/*" - "drivers/hw_cc3xx/**/*" - "drivers/mpsl/**/*" @@ -434,7 +464,7 @@ - "include/modem/nrf_modem_lib.h" - "include/modem/pdn.h" - "include/modem/sms.h" - - "include/net/download_client.h" + - "include/net/downloader.h" - "include/net/fota_download.h" - "include/net/nrf_cloud.h" - "include/net/nrf_cloud_agnss.h" @@ -458,7 +488,7 @@ - "lib/sms/**/*" - "lib/supl/**/*" - "samples/cellular/modem_shell/**/*" - - "subsys/net/lib/download_client/**/*" + - "subsys/net/lib/downloader/**/*" - "subsys/net/lib/fota_download/**/*" - "subsys/net/lib/nrf_cloud/**/*" - "subsys/net/lib/rest_client/**/*" @@ -510,7 +540,7 @@ - "include/drivers/flash/**/*" - "include/flash_map_pm.h" - "include/modem/**/*" - - "include/net/download_client.h" + - "include/net/downloader.h" - "include/net/fota_download.h" - "include/net/nrf_cloud*" - "include/net/rest_client.h" @@ -532,7 +562,7 @@ - "subsys/bootloader/**/*" - "subsys/caf/**/*" - "subsys/dfu/**/*" - - "subsys/net/lib/download_client/**/*" + - "subsys/net/lib/downloader/**/*" - "subsys/net/lib/fota_download/**/*" - "subsys/net/lib/nrf_cloud/**/*" - "subsys/net/lib/nrf_provisioning/**/*" @@ -559,8 +589,6 @@ - "include/fprotect.h" - "include/dfu/*suit*" - "include/sdfw/sdfw_services/*" - - "cmake/**/*" - - "sysbuild/**/*" - "lib/dk_buttons_and_leds/**/*" - "subsys/dfu/*" - "subsys/nrf_rpc/**/*" @@ -589,12 +617,15 @@ - "subsys/event_manager_proxy/**/*" - "samples/ipc/**/*" - "samples/event_manager_proxy/**/*" - - "snippets/emulated-*/**/*" + - "samples/peripheral/lpuart/**/*" + - "snippets/sdp/**/*" - "tests/subsys/event_manager_proxy/**/*" - "tests/benchmarks/multicore/idle/**/*" - - "tests/drivers/gpio/egpio_basic_api/**/*" + - "tests/drivers/gpio/**/*" + - "tests/drivers/lpuart/**/*" - "tests/drivers/pwm/**/*" - "tests/drivers/sensor/**/*" + - "tests/drivers/audio/**/*" "CI-ps-test": - "samples/nrf_rpc/protocols_serialization/**/*" @@ -605,15 +636,11 @@ - "samples/bluetooth/multiple_adv_sets/**/*" - "samples/nfc/record_text/**/*" - "samples/app_event_manager/**/*" - - "samples/sdfw/ssf_client/**/*" - "lib/dk_buttons_and_leds/**/*" - "subsys/app_event_manager/**/*" - "include/nfc/ndef/msg.h" - "include/nfc/ndef/record.h" - "include/nfc/ndef/text_rec.h" - "include/dk_buttons_and_leds.h" - - "include/sdfw/sdfw_services/echo_service.h" - - "include/sdfw/sdfw_services/reset_evt_service.h" - - "include/sdfw/sdfw_services/sdfw_update_service.h" - "include/app_event_manager/app_event_manager.h" - "include/sdfw/sdfw_services/ssf_errno.h" diff --git a/.github/workflows/compliance.yml b/.github/workflows/compliance.yml index 071e5abcb321..d8f40a2b399b 100644 --- a/.github/workflows/compliance.yml +++ b/.github/workflows/compliance.yml @@ -4,7 +4,7 @@ on: pull_request jobs: compliance_job: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: Run compliance checks on patch series (PR) steps: - name: Update PATH for west @@ -29,7 +29,7 @@ jobs: pip3 install -U pip pip3 install -U setuptools pip3 install -U wheel - grep -E "^python-magic|^junitparser|^lxml|^gitlint|^pylint|^pykwalify|^yamllint|^unidiff" scripts/requirements-fixed.txt | cut -d ' ' -f '1' | xargs pip3 install -U + grep -E "^python-magic=|^junitparser|^lxml|^gitlint|^pylint|^pykwalify|^yamllint|^unidiff" scripts/requirements-fixed.txt | cut -d ' ' -f '1' | xargs pip3 install -U grep -E "^west" scripts/requirements-fixed.txt | cut -d ' ' -f '1' | xargs pip3 install -U pip3 show -f west @@ -73,12 +73,13 @@ jobs: -e KconfigBasicNoModules -e ClangFormat -c origin/${BASE_REF}.. - name: upload-results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 continue-on-error: true if: contains(github.event.pull_request.user.login, 'dependabot[bot]') != true with: name: compliance.xml path: ncs/nrf/compliance.xml + overwrite: true - name: check-warns working-directory: ncs/nrf diff --git a/.github/workflows/contribs.yml b/.github/workflows/contribs.yml index 67dc5ed61e27..798c5d0c4f95 100644 --- a/.github/workflows/contribs.yml +++ b/.github/workflows/contribs.yml @@ -5,7 +5,7 @@ on: jobs: contribs: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: Contribs steps: - name: Contribs diff --git a/.github/workflows/create-upmerge-PRs.yml b/.github/workflows/create-upmerge-PRs.yml index d2f57f9ed678..d9acafd6156a 100644 --- a/.github/workflows/create-upmerge-PRs.yml +++ b/.github/workflows/create-upmerge-PRs.yml @@ -14,7 +14,7 @@ env: jobs: auto-upmerge-create-PRs: if: github.repository == 'nrfconnect/sdk-nrf' - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Checkout sources uses: nrfconnect/action-checkout-west-update@main @@ -88,7 +88,7 @@ jobs: gh pr create --base $PR_TARGET_BRANCH --title "manifest: Update revisions of upmerged projects (automatic upmerge)" --body "Automatic upmerge action" --label "CI-all-test" --label "auto-upmerge" failure-notifier: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 if: failure() needs: auto-upmerge-create-PRs env: diff --git a/.github/workflows/dnm.yml b/.github/workflows/dnm.yml index 783229b65252..2df5f0056d89 100644 --- a/.github/workflows/dnm.yml +++ b/.github/workflows/dnm.yml @@ -8,7 +8,7 @@ jobs: do-not-merge: if: ${{ contains(github.event.*.labels.*.name, 'DNM') }} name: Prevent Merging - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check for label run: | diff --git a/.github/workflows/docbuild.yml b/.github/workflows/docbuild.yml index 3ca9e3117933..fa243cd0eac5 100644 --- a/.github/workflows/docbuild.yml +++ b/.github/workflows/docbuild.yml @@ -27,7 +27,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -54,8 +54,7 @@ jobs: - name: Install Python dependencies working-directory: ncs run: | - sudo pip3 install -U setuptools wheel pip - pip3 install -r nrf/doc/requirements.txt + pip install -r nrf/doc/requirements.txt - name: West zephyr-export working-directory: ncs @@ -74,7 +73,7 @@ jobs: - name: Check version run: | - VERSION_REGEX="^v([0-9a-z\.\-]+)$" + VERSION_REGEX="^v([0-9a-zA-Z\.\-]+)$" if [[ ${GITHUB_REF#refs/tags/} =~ $VERSION_REGEX ]]; then VERSION=${BASH_REMATCH[1]} elif [[ ${GITHUB_REF#refs/heads/} == "main" ]]; then diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 5fee41d65f42..5856653b9498 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -7,7 +7,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Checkout repository diff --git a/.github/workflows/docpublish.yml b/.github/workflows/docpublish.yml index 98d6cc6de10d..618d26ba4806 100644 --- a/.github/workflows/docpublish.yml +++ b/.github/workflows/docpublish.yml @@ -7,8 +7,8 @@ on: - completed jobs: - build: - runs-on: ubuntu-latest + publish: + runs-on: ubuntu-24.04 if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: - name: Download artifacts @@ -17,23 +17,19 @@ jobs: workflow: docbuild.yml run_id: ${{ github.event.workflow_run.id }} - - name: Install dependencies + - name: Unzip html archive + working-directory: docs run: | - sudo apt install -y sshpass + OUTDIR=$(awk 'NR==1 { if ($3 ~ /^(latest|PR-[0-9]+|[0-9]+\.[0-9a-zA-Z\.\-]+)$/) print $3 }' monitor_*.txt) + echo "OUTDIR=$OUTDIR" >> "$GITHUB_ENV" + unzip legacy-ncs*.zip -d $OUTDIR - - name: Upload documentation + - name: Upload to Azure storage + working-directory: docs env: - SSHUSER: ${{ secrets.NCS_TRANSFER_DOC_USR }} - SSHPASS: ${{ secrets.NCS_TRANSFER_DOC_PWD }} + AZCOPY_CONCURRENCY_VALUE: 1024 run: | - # trust server - mkdir -p ~/.ssh && \ - ssh-keyscan -p 2222 transfer.nordicsemi.no >> ~/.ssh/known_hosts - # upload files - for file in docs/legacy*.zip docs/monitor*.txt; do - echo "put ${file}" | \ - sshpass -e sftp -P 2222 -o BatchMode=no -b - $SSHUSER@transfer.nordicsemi.no - done + azcopy cp $OUTDIR "${{ vars.NCS_DOC_STORAGE_URL }}?${{ secrets.NCS_DOC_SAS}}" --recursive=true - name: Upload Zoomin documentation run: | @@ -74,9 +70,9 @@ jobs: done - name: Add preview URL comment for PRs - uses: carlescufi/action-doc-url@main + uses: nrfconnect/action-doc-url@main with: github-token: ${{ secrets.NCS_GITHUB_TOKEN }} - urlroot: ${{ secrets.NCS_DOC_URL_ROOT }} + urlroot: ${{ vars.NCS_DOC_HOSTING_URL }} pr-prefix: "PR-" pr-file: docs/pr.txt diff --git a/.github/workflows/docremove.yml b/.github/workflows/docremove.yml index 0a3d0b2a6044..f074532fb975 100644 --- a/.github/workflows/docremove.yml +++ b/.github/workflows/docremove.yml @@ -7,24 +7,11 @@ on: - main jobs: - build: - runs-on: ubuntu-latest - + remove: + runs-on: ubuntu-24.04 steps: - - name: Install dependencies - run: | - sudo apt install -y sshpass - - - name: Request removal + - name: Try removal of PR-docs env: - SSHUSER: ${{ secrets.NCS_TRANSFER_DOC_USR }} - SSHPASS: ${{ secrets.NCS_TRANSFER_DOC_PWD }} + AZCOPY_CONCURRENCY_VALUE: 3000 run: | - # create request file - echo "remove PR-${{ github.event.number }}" > monitor_${GITHUB_RUN_ID}.txt - # trust server - mkdir -p ~/.ssh && \ - ssh-keyscan -p 2222 transfer.nordicsemi.no >> ~/.ssh/known_hosts - # upload request file - echo "put monitor_${GITHUB_RUN_ID}.txt" | \ - sshpass -e sftp -P 2222 -o BatchMode=no -b - $SSHUSER@transfer.nordicsemi.no + azcopy rm "${{ vars.NCS_DOC_STORAGE_URL }}PR-${{ github.event.number }}?${{ secrets.NCS_DOC_SAS }}" --recursive=true || true diff --git a/.github/workflows/enforce-toolchain-synchronization.yml b/.github/workflows/enforce-toolchain-synchronization.yml new file mode 100644 index 000000000000..3fccae22e8f6 --- /dev/null +++ b/.github/workflows/enforce-toolchain-synchronization.yml @@ -0,0 +1,122 @@ +# Enforce rebasing Pull Requests if Toolchain was modified on target branch +# +# If new commits, which modifies toolchain files was pushed to given branch, find all PRs targeting +# this branch, which also change toolchain files. Then, enforce rebasing them by changing +# CI/Jenkins/toolchain check to FAILURE. +# This prevents race condition issue when new toolchain bundle has to be built after PR is merged. +# +# Toolchain files: +# * scripts/requirements-fixed.txt +# * scripts/tools-versions-darwin.yml +# * scripts/tools-versions-win10.yml +# * scripts/tools-versions-linux.yml + +name: Enforce rebasing Pull Requests if Toolchain was modified on target branch + +on: + push: + branches: # Trigger on push to main and release branches + - main + - 'v*-branch' +jobs: + check-prs: + if: ${{ github.repository_owner == 'nrfconnect' && !github.event.created }} # Skip for new branches or forks + runs-on: ubuntu-24.04 + + steps: + - name: Define list of files to check + id: define_files + run: | + echo "TOOLCHAIN_FILES=scripts/requirements-fixed.txt,scripts/tools-versions-linux.yml,scripts/tools-versions-darwin.yml,scripts/tools-versions-win10.yml" >> $GITHUB_ENV + + - name: Checkout the repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + + - name: Get files modified by recent commits + id: get_files + run: | + echo "Modified files in this commit:" + git diff --name-only ${{ github.event.before }} ${{ github.sha }} > modified_files.txt + cat modified_files.txt + + - name: Check if any watched files are modified + id: check_files + run: | + modified_files=$(cat modified_files.txt) + IFS=',' read -r -a watched_files <<< "${{ env.TOOLCHAIN_FILES }}" + modified=false + for file in "${watched_files[@]}"; do + if echo "$modified_files" | grep -q "$file"; then + echo "$file was modified." + modified=true + fi + done + echo "modified=$modified" >> $GITHUB_ENV + + # App token is required to update Check Status + - name: Get jenkins-ncs App token + if: env.modified == 'true' + uses: actions/create-github-app-token@v1 + id: app-token + with: + app-id: ${{ vars.JENKINS_NCS_APP_ID }} + private-key: ${{ secrets.JENKINS_NCS_APP_PRIVATE_KEY }} + + - name: Find open pull requests targeting this branch and modyfing Toolchain files + if: env.modified == 'true' + id: find_prs + run: | + PRs=$(gh pr list --limit 500 --base ${{ github.ref_name }} --state open --json url,headRefName,files --jq '[.[] | select(.files[]? | .path as $file | [$file] | inside([env.TOOLCHAIN_FILES]))]') + echo "Found PRs: $PRs" + echo "prs=$PRs" >> $GITHUB_ENV + env: + GH_TOKEN: ${{ steps.app-token.outputs.token }} + + - name: Set CI/Jenkins/toolchain status check to failure + if: env.modified == 'true' && steps.find_prs.outputs.prs != '[]' + env: + GH_TOKEN: ${{ steps.app-token.outputs.token }} + run: | + for pr in $(echo "$prs" | jq -r '.[].url'); do + pr_url=$(echo $pr | sed 's|https://github.com/||') + pr_owner=$(echo $pr_url | cut -d'/' -f1) + pr_repo=$(echo $pr_url | cut -d'/' -f2) + pr_number=$(echo $pr_url | cut -d'/' -f4) + + echo "Setting CI/Jenkins/toolchain status to failure for PR: $pr" + + # Get the SHA of the last commit in the PR branch + commit_sha=$(gh pr view $pr_number --json headRefOid --jq '.headRefOid') + + # Get the Check Run ID by listing the check runs for the PR's head commit + check_run_id=$(gh api \ + -H "Accept: application/vnd.github.v3+json" \ + /repos/$pr_owner/$pr_repo/commits/$commit_sha/check-runs \ + --jq '.check_runs[] | select(.name == "CI/Jenkins/toolchain") | .id') + + # If no check run exists, create a new one; otherwise, update the existing one + if [ -z "$check_run_id" ]; then + echo "Creating new check run for PR: $pr" + gh api \ + -H "Accept: application/vnd.github.v3+json" \ + --method POST /repos/$pr_owner/$pr_repo/check-runs \ + -f name="CI/Jenkins/toolchain" \ + -f head_sha="$commit_sha" \ + -f status="completed" \ + -f conclusion="failure" \ + -f output[title]="Rebase needed - Toolchain changed on '${{ github.ref_name }}' branch" \ + -f output[summary]="Toolchain was modified on '${{ github.ref_name }}' and this PR has to be rebased" + else + echo "Updating existing check run with ID $check_run_id" + gh api \ + -H "Accept: application/vnd.github.v3+json" \ + --method PATCH /repos/$pr_owner/$pr_repo/check-runs/$check_run_id \ + -f conclusion="failure" \ + -f status="completed" \ + -f output[title]="Rebase needed - Toolchain changed on '${{ github.ref_name }}' branch" \ + -f output[summary]="Toolchain was modified on '${{ github.ref_name }}' and this PR has to be rebased" + fi + done diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index e218a46d5ad7..57267dd11b01 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -4,7 +4,7 @@ on: jobs: triage: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/labeler@v5.0.0 with: diff --git a/.github/workflows/license-reusable.yml b/.github/workflows/license-reusable.yml index feab06fd61f7..15bc3df8ed3d 100644 --- a/.github/workflows/license-reusable.yml +++ b/.github/workflows/license-reusable.yml @@ -33,7 +33,7 @@ on: jobs: license_job: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: Run license checks on patch series (PR) steps: - name: Checkout sources @@ -104,9 +104,10 @@ jobs: -c origin/${BASE_REF}.. - name: Upload results - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 continue-on-error: true if: always() && contains(github.event.pull_request.user.login, 'dependabot[bot]') != true with: name: licenses.xml path: ncs/${{ inputs.path }}/licenses.xml + overwrite: true diff --git a/.github/workflows/manifest.yml b/.github/workflows/manifest.yml index 5de4675ebe38..4ce8651e392c 100644 --- a/.github/workflows/manifest.yml +++ b/.github/workflows/manifest.yml @@ -1,15 +1,13 @@ name: Manifest - -on: - pull_request_target: +on: pull_request_target permissions: contents: read pull-requests: write jobs: - contribs: - runs-on: ubuntu-latest + manifest: + runs-on: ubuntu-24.04 name: Manifest steps: - name: Checkout the code @@ -20,19 +18,28 @@ jobs: fetch-depth: 0 persist-credentials: false + - name: west setup + env: + BASE_REF: ${{ github.base_ref }} + working-directory: ncs/nrf + run: | + pip3 install west + git config --global user.email "you@example.com" + git config --global user.name "Your Name" + west init -l . || true + # We only import the zephyr manifest + west update zephyr + - name: Manifest - uses: zephyrproject-rtos/action-manifest@16c4cfa380ae2b6fa3daddb1a35032e69422a20f + uses: zephyrproject-rtos/action-manifest@v1.7.0 with: github-token: ${{ secrets.NCS_GITHUB_TOKEN }} manifest-path: 'west.yml' checkout-path: 'ncs/nrf' + use-tree-checkout: 'true' + west-import-flag: 'self' + check-impostor-commits: 'true' label-prefix: 'manifest-' verbosity-level: '1' - - # Add one label per line. 'manifest' always adds the label 'manifest'. - # 'CI-all-test:zephyr;nrfxlib,' adds the 'CI-all-test' label when the - # zephyr module or the nrfxlib module is changed. Each line is comma- - # separated. - labels: > - manifest + labels: 'manifest' dnm-labels: 'DNM' diff --git a/.github/workflows/oss-history.yml b/.github/workflows/oss-history.yml index 1e7b18e5f41c..49f55d66907c 100644 --- a/.github/workflows/oss-history.yml +++ b/.github/workflows/oss-history.yml @@ -3,7 +3,7 @@ on: pull_request jobs: contribs: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: Check OSS history steps: - name: Checkout sources @@ -14,7 +14,7 @@ jobs: - name: Install extra python dependencies run: | - pip3 install west + pip3 install --upgrade pip setuptools west pip3 install -r ncs/nrf/scripts/requirements-extra.txt - name: Set upsteam diff --git a/.github/workflows/reapply-ci-trusted-author.yml b/.github/workflows/reapply-ci-trusted-author.yml index cfc6e7e429c6..7800a2dd7be7 100644 --- a/.github/workflows/reapply-ci-trusted-author.yml +++ b/.github/workflows/reapply-ci-trusted-author.yml @@ -10,7 +10,7 @@ jobs: reapply_label: name: Reapply label if: ${{ contains(github.event.*.labels.*.name, 'CI-trusted-author') }} - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Remove CI-trusted-author label run: gh pr edit ${{ github.event.pull_request.number }} --remove-label "CI-trusted-author" diff --git a/.github/workflows/remove-ci-requested.yml b/.github/workflows/remove-ci-requested.yml index dd7549ba9e42..50282b238bed 100644 --- a/.github/workflows/remove-ci-requested.yml +++ b/.github/workflows/remove-ci-requested.yml @@ -8,7 +8,7 @@ jobs: remove_label: name: Remove label if: ${{ contains(github.event.*.labels.*.name, 'CI-Requested') }} - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Remove label run: gh pr edit ${{ github.event.pull_request.number }} --remove-label "CI-Requested" diff --git a/.github/workflows/scripts-test.yml b/.github/workflows/scripts-test.yml new file mode 100644 index 000000000000..475e97a244a7 --- /dev/null +++ b/.github/workflows/scripts-test.yml @@ -0,0 +1,28 @@ +name: Python scripts tests + +on: + pull_request: + branches: + - main + paths: + - 'scripts/bootloader/**' + +jobs: + test-scripts: + name: Run tests for python scripts + strategy: + fail-fast: false + matrix: + os: [ubuntu-24.04] + python-version: ['3.10', '3.11', '3.12', '3.13'] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Setup Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install packages + run: python -m pip install -r scripts/requirements-test.txt + - name: Run tests + run: python -m pytest scripts/bootloader/tests diff --git a/.github/workflows/src-mirror.yml b/.github/workflows/src-mirror.yml index 35f88d8d7fc5..627271adf862 100644 --- a/.github/workflows/src-mirror.yml +++ b/.github/workflows/src-mirror.yml @@ -6,7 +6,7 @@ on: jobs: zip-and-upload: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Checkout sources uses: nrfconnect/action-checkout-west-update@main diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 51084625fdaa..b09aee264b0e 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -5,16 +5,14 @@ on: jobs: stale: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/stale@v9 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-pr-message: 'This pull request has been marked as stale because it has been open (more than) 60 days with no activity. Remove the stale label or add a comment saying that you would like to have the label removed otherwise this pull request will automatically be closed in 14 days. Note, that you can always re-open a closed pull request at any time.' - stale-issue-message: 'This issue has been marked as stale because it has been open (more than) 60 days with no activity. Remove the stale label or add a comment saying that you would like to have the label removed otherwise this issue will automatically be closed in 14 days. Note, that you can always re-open a closed issue at any time.' - days-before-stale: 60 - days-before-close: 14 + stale-pr-message: 'This pull request has been marked as stale because it has been open (more than) 30 days with no activity. Remove the stale label or add a comment saying that you would like to have the label removed otherwise this pull request will automatically be closed in 7 days. Note, that you can always re-open a closed pull request at any time.' + stale-issue-message: 'This issue has been marked as stale because it has been open (more than) 30 days with no activity. Remove the stale label or add a comment saying that you would like to have the label removed otherwise this issue will automatically be closed in 7 days. Note, that you can always re-open a closed issue at any time.' + days-before-stale: 30 + days-before-close: 7 stale-issue-label: 'Stale' stale-pr-label: 'Stale' - exempt-pr-labels: 'In progress,RFC' - exempt-issue-labels: 'In progress,Enhancement,Feature,Feature Request,RFC,Meta' diff --git a/.github/workflows/validate-pip-requirements-fixed-file.yml b/.github/workflows/validate-pip-requirements-fixed-file.yml index cffe93501313..37e6a7e1429c 100644 --- a/.github/workflows/validate-pip-requirements-fixed-file.yml +++ b/.github/workflows/validate-pip-requirements-fixed-file.yml @@ -8,6 +8,8 @@ on: - 'v*-branch' paths: - 'scripts/requirements*.txt' + - '.github/workflows/validate-pip-requirements-fixed-file.yml' + jobs: check-requirements: @@ -57,21 +59,20 @@ jobs: # For no aparent reason it returns 1 with the same output as local. mkvirtualenv pip-fixed-venv > /dev/null 2>&1 || true workon pip-fixed-venv > /dev/null 2>&1 - pip3 install pip-tools > /dev/null 2>&1 - # Use setuptools==71.1.0 due to https://github.com/pypa/setuptools/issues/4519 - pip3 install setuptools==71.1.0 --upgrade - pip-compile \ - --build-isolation \ - --strip-extras \ - --annotation-style line \ - --allow-unsafe \ - --output-file $OUT_FILE \ - bootloader/mcuboot/scripts/requirements.txt \ - zephyr/scripts/requirements.txt \ - nrf/scripts/requirements.txt \ - nrf/scripts/requirements-ci.txt \ - nrf/scripts/requirements-extra.txt + pip3 install \ + --index-url https://files.nordicsemi.com/artifactory/api/pypi/nordic-pypi/simple \ + pip-compile-cross-platform==1.4.2+nordic.3 --upgrade > /dev/null 2>&1 + pip-compile-cross-platform \ + bootloader/mcuboot/scripts/requirements.txt \ + zephyr/scripts/requirements.txt \ + nrf/scripts/requirements-west-ncs-sbom.txt \ + nrf/scripts/requirements-ci.txt \ + nrf/scripts/requirements-extra.txt \ + nrf/scripts/requirements.txt \ + --output-file nrf/scripts/requirements-fixed.txt \ + --min-python-version 3.12 \ + --index-url https://files.nordicsemi.com/artifactory/api/pypi/nordic-pypi/simple deactivate rmvirtualenv pip-fixed-venv diff --git a/.github/workflows/west-commands.yml b/.github/workflows/west-commands.yml index f9f9551f3111..47a8f97827c2 100644 --- a/.github/workflows/west-commands.yml +++ b/.github/workflows/west-commands.yml @@ -10,7 +10,7 @@ on: jobs: west_commands_job: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: Run Python checks for west commands on patch series (PR) steps: - name: Checkout the code @@ -26,7 +26,7 @@ jobs: pip3 install -U setuptools pip3 install -U wheel pip3 install -U mypy types-colorama types-editdistance types-PyYAML - grep -E "west==" scripts/requirements-fixed.txt | cut -f1 -d"#" | xargs pip3 install -U + grep -E "west==" scripts/requirements-fixed.txt | cut -f1 -d"#" | cut -d ' ' -f '1'| xargs pip3 install -U pip3 show -f west - name: Run mypy working-directory: ncs/nrf/scripts/west_commands @@ -38,7 +38,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-13, windows-latest] + os: [ubuntu-24.04, macos-13, windows-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout sources @@ -49,6 +49,7 @@ jobs: - name: Install requirements shell: bash run: | + python3 -m pip install -U pip pip3 install -r nrf/scripts/requirements-west-ncs-sbom.txt pip3 install -r nrf/scripts/requirements-extra.txt - name: Test ncs-sbom with asset tracker sample diff --git a/CMakeLists.txt b/CMakeLists.txt index f33de378c70d..1955fcc8df46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,7 @@ endforeach() include(cmake/extensions.cmake) include(cmake/version.cmake) include(cmake/version_app.cmake) -include(cmake/multi_image.cmake) +include(cmake/sdp.cmake) zephyr_include_directories(include) diff --git a/CODEOWNERS b/CODEOWNERS index a2e405622aa2..5b57bc5493a2 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -27,7 +27,7 @@ /.vscode/ @FilipZajdel # Applications -/applications/asset_tracker_v2/ @nrfconnect/ncs-cia @coderbyheart +/applications/asset_tracker_v2/ @nrfconnect/ncs-cia /applications/connectivity_bridge/ @nrfconnect/ncs-cia @nordic-auko /applications/ipc_radio/ @nrfconnect/ncs-si-muffin /applications/machine_learning/ @nrfconnect/ncs-si-muffin @@ -55,6 +55,12 @@ /boards/nordic/nrf52* @nrfconnect/ncs-co-boards @nrfconnect/ncs-si-bluebagel /boards/nordic/thingy91* @nrfconnect/ncs-co-boards @nrfconnect/ncs-cia /boards/shields/coverage_support/ @nrfconnect/ncs-low-level-test +/boards/shields/nrf2220ek/ @nrfconnect/ncs-radio-sw +/boards/shields/nrf2240ek/ @nrfconnect/ncs-radio-sw +/boards/shields/nrf21540ek/ @nrfconnect/ncs-radio-sw + +# This shield entry must be below other shield entries (excluding doc), do not move +**/shields/ @nrfconnect/ncs-co-build-system /boards/shields/pca63566/doc/*.rst @nrfconnect/ncs-doc-leads @@ -65,6 +71,8 @@ /cmake/ @nrfconnect/ncs-co-build-system /cmake/sysbuild/suit.cmake @nrfconnect/ncs-charon /cmake/sysbuild/suit_utilities.cmake @nrfconnect/ncs-charon +/cmake/sysbuild/suit_provisioning.cmake @nrfconnect/ncs-charon +/cmake/sysbuild/suit_provisioning_nrf54h20.cmake @nrfconnect/ncs-charon # All doc related files /doc/_zoomin/ @nrfconnect/ncs-co-doc @nrfconnect/ncs-doc-leads @@ -83,9 +91,8 @@ /doc/nrf/app_dev/device_guides/nrf91/ @nrfconnect/ncs-modem-doc /doc/nrf/app_dev/device_guides/nrf91/nrf91_snippet.rst @nrfconnect/ncs-cia-doc /doc/nrf/app_dev/device_guides/pmic/ @nrfconnect/ncs-pmic-doc -/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ @FrancescoSer -/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_*.rst @nrfconnect/ncs-charon-doc -/doc/nrf/app_dev/device_guides/nrf54h.rst @FrancescoSer +/doc/nrf/app_dev/device_guides/nrf54h/ @FrancescoSer +/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_*.rst @nrfconnect/ncs-charon-doc /doc/nrf/app_dev/device_guides/wifi_coex.rst @nrfconnect/ncs-doc-leads /doc/nrf/dev_model_and_contributions/ @nrfconnect/ncs-doc-leads @nrfconnect/ncs-vestavind-doc /doc/nrf/drivers/bh1749.rst @nrfconnect/ncs-cia-doc @@ -98,6 +105,8 @@ /doc/nrf/drivers/sensor_sim.rst @nrfconnect/ncs-si-muffin-doc /doc/nrf/drivers/sensor_stub.rst @nrfconnect/ncs-si-muffin-doc /doc/nrf/drivers/uart_ipc.rst @nrfconnect/ncs-doc-leads +/doc/nrf/drivers/wifi/*.rst @nrfconnect/ncs-wifi-doc +/doc/nrf/drivers/wifi.rst @nrfconnect/ncs-wifi-doc /doc/nrf/drivers/uart_nrf_sw_lpuart.rst @nrfconnect/ncs-doc-leads /doc/nrf/external_comp/avsystem.rst @nrfconnect/ncs-iot-oulu-tampere-doc /doc/nrf/external_comp/bt_fast_pair.rst @nrfconnect/ncs-si-bluebagel-doc @@ -115,12 +124,12 @@ /doc/nrf/installation/ @nrfconnect/ncs-doc-leads @nrfconnect/ncs-vestavind-doc @nrfconnect/ncs-wayland-doc /doc/nrf/libraries/bin/ @nrfconnect/ncs-doc-leads /doc/nrf/libraries/bin/lwm2m_carrier/ @nrfconnect/ncs-carrier-doc -/doc/nrf/libraries/bluetooth_services/ @nrfconnect/ncs-si-muffin-doc @nrfconnect/ncs-dragoon-doc -/doc/nrf/libraries/bluetooth_services/mesh/ @nrfconnect/ncs-paladin-doc -/doc/nrf/libraries/bluetooth_services/adv_prov.rst @nrfconnect/ncs-si-bluebagel-doc -/doc/nrf/libraries/bluetooth_services/mesh.rst @nrfconnect/ncs-paladin-doc -/doc/nrf/libraries/bluetooth_services/services/fast_pair.rst @nrfconnect/ncs-si-bluebagel-doc -/doc/nrf/libraries/bluetooth_services/services/wifi_prov.rst @nrfconnect/ncs-wifi-doc +/doc/nrf/libraries/bluetooth/ @nrfconnect/ncs-si-muffin-doc @nrfconnect/ncs-dragoon-doc +/doc/nrf/libraries/bluetooth/mesh/ @nrfconnect/ncs-paladin-doc +/doc/nrf/libraries/bluetooth/adv_prov.rst @nrfconnect/ncs-si-bluebagel-doc +/doc/nrf/libraries/bluetooth/mesh.rst @nrfconnect/ncs-paladin-doc +/doc/nrf/libraries/bluetooth/services/fast_pair.rst @nrfconnect/ncs-si-bluebagel-doc +/doc/nrf/libraries/bluetooth/services/wifi_prov.rst @nrfconnect/ncs-wifi-doc /doc/nrf/libraries/caf/ @nrfconnect/ncs-si-muffin-doc @nrfconnect/ncs-si-bluebagel-doc /doc/nrf/libraries/debug/cpu_load.rst @nrfconnect/ncs-doc-leads /doc/nrf/libraries/debug/etb_trace.rst @nrfconnect/ncs-cia-doc @@ -158,6 +167,7 @@ /doc/nrf/libraries/networking/azure_*.rst @nrfconnect/ncs-cia-doc /doc/nrf/libraries/networking/coap_utils.rst @nrfconnect/ncs-terahertz-doc /doc/nrf/libraries/networking/download_client.rst @nrfconnect/ncs-modem-doc +/doc/nrf/libraries/networking/downloader.rst @nrfconnect/ncs-modem-doc /doc/nrf/libraries/networking/fota_download.rst @nrfconnect/ncs-pluto-doc /doc/nrf/libraries/networking/ftp_client.rst @nrfconnect/ncs-iot-oulu-tampere-doc /doc/nrf/libraries/networking/icalendar_parser.rst @nrfconnect/ncs-doc-leads @@ -167,13 +177,18 @@ /doc/nrf/libraries/networking/nrf_cloud.rst @nrfconnect/ncs-nrf-cloud-doc /doc/nrf/libraries/networking/nrf_cloud_*.rst @nrfconnect/ncs-nrf-cloud-doc /doc/nrf/libraries/networking/nrf_provisioning.rst @nrfconnect/ncs-iot-oulu-tampere-doc +/doc/nrf/libraries/networking/ot_rpc.rst @nrfconnect/ncs-terahertz-doc @nrfconnect/ncs-protocols-serialization /doc/nrf/libraries/networking/rest_client.rst @nrfconnect/ncs-iot-positioning-doc /doc/nrf/libraries/networking/softap_wifi_provision.rst @nrfconnect/ncs-cia-doc /doc/nrf/libraries/networking/wifi_credentials.rst @nrfconnect/ncs-cia-doc /doc/nrf/libraries/networking/wifi_mgmt_ext.rst @nrfconnect/ncs-cia-doc /doc/nrf/libraries/networking/wifi_ready.rst @nrfconnect/ncs-wifi-doc /doc/nrf/libraries/nfc/ @nrfconnect/ncs-si-muffin-doc -/doc/nrf/libraries/nrf_rpc/ @nrfconnect/ncs-si-muffin-doc +/doc/nrf/libraries/nrf_rpc/index.rst @nrfconnect/ncs-si-muffin-doc +/doc/nrf/libraries/nrf_rpc/nrf_rpc_ipc.rst @nrfconnect/ncs-si-muffin-doc +/doc/nrf/libraries/nrf_rpc/nrf_rpc_uart.rst @nrfconnect/ncs-si-muffin-doc +/doc/nrf/libraries/nrf_rpc/nrf_rpc_dev_info.rst @nrfconnect/ncs-terahertz-doc + /doc/nrf/libraries/others/adp536x.rst @nrfconnect/ncs-cia-doc /doc/nrf/libraries/others/app_event_manager.rst @nrfconnect/ncs-si-muffin-doc @nrfconnect/ncs-si-bluebagel-doc /doc/nrf/libraries/others/app_event_manager_profiler_tracer.rst @nrfconnect/ncs-si-bluebagel-doc @@ -193,6 +208,7 @@ /doc/nrf/libraries/others/hw_id.rst @nrfconnect/ncs-cia-doc /doc/nrf/libraries/others/index.rst @nrfconnect/ncs-doc-leads /doc/nrf/libraries/others/network_core_monitor.rst @nrfconnect/ncs-si-muffin-doc +/doc/nrf/libraries/others/nrf_compression.rst @nrfconnect/ncs-vestavind-doc /doc/nrf/libraries/others/nrf_profiler.rst @nrfconnect/ncs-si-bluebagel-doc /doc/nrf/libraries/others/pcm_mix.rst @nrfconnect/ncs-audio-doc /doc/nrf/libraries/others/pcm_stream_channel_modifier.rst @nrfconnect/ncs-audio-doc @@ -251,7 +267,6 @@ /doc/nrf/samples/other.rst @nrfconnect/ncs-doc-leads /doc/nrf/samples/peripheral.rst @nrfconnect/ncs-radio-sw-doc /doc/nrf/samples/pmic.rst @nrfconnect/ncs-pmic-doc -/doc/nrf/samples/sdfw.rst @nrfconnect/ncs-aurora-doc /doc/nrf/samples/sensor.rst @nrfconnect/ncs-cia-doc /doc/nrf/samples/serialization.rst @nrfconnect/ncs-si-muffin-doc /doc/nrf/samples/suit.rst @nrfconnect/ncs-charon-doc @@ -265,18 +280,21 @@ /doc/nrf/templates/ @nrfconnect/ncs-doc-leads /doc/nrf/test_and_optimize/ @nrfconnect/ncs-doc-leads /doc/nrf/test_and_optimize/optimizing/power_nrf91.rst @nrfconnect/ncs-cia-doc +/doc/wifi/ @sachinthegreen @krish2718 /doc/**/*.svg @nrfconnect/ncs-doc-leads /doc/**/*.png @nrfconnect/ncs-doc-leads - +/doc/**/*.webp @nrfconnect/ncs-doc-leads # Drivers /drivers/bluetooth/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-dragoon /drivers/entropy/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-aegir /drivers/flash/ @nrfconnect/ncs-co-drivers +/drivers/flash/flash_ipuc/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-charon /drivers/gpio/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-ll-ursus /drivers/hw_cc3xx/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-aegir /drivers/mpsl/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-dragoon +/drivers/mspi/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-ll-ursus /drivers/net/ @nrfconnect/ncs-co-drivers @doki-nordic /drivers/serial/ @nrfconnect/ncs-co-drivers @nordic-krch /drivers/sensor/bh1749/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-cia @@ -297,10 +315,12 @@ # Include /include/audio/ @nrfconnect/ncs-audio /include/audio_module/ @nrfconnect/ncs-audio -/include/bluetooth/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-dragoon +/include/bluetooth/ @nrfconnect/ncs-dragoon /include/bluetooth/adv_prov.h @nrfconnect/ncs-si-bluebagel /include/bluetooth/mesh/ @nrfconnect/ncs-paladin /include/bluetooth/services/fast_pair/ @nrfconnect/ncs-si-bluebagel +/include/bluetooth/services/hids.h @nrfconnect/ncs-si-bluebagel +/include/bluetooth/services/ras.h @nrfconnect/ncs-dragoon /include/caf/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-si-bluebagel /include/debug/ @nrfconnect/ncs-co-drivers /include/debug/ppi_trace.h @nrfconnect/ncs-co-drivers @nordic-krch @@ -309,8 +329,10 @@ /include/dfu/suit_dfu_fetch_source.h @nrfconnect/ncs-charon /include/dfu/suit_dfu.h @nrfconnect/ncs-charon /include/drivers/flash/ @nrfconnect/ncs-co-drivers +/include/drivers/flash/flash_ipuc.h @nrfconnect/ncs-co-drivers @nrfconnect/ncs-charon /include/drivers/gpio/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-ll-ursus /include/drivers/bme68x_iaq.h @nrfconnect/ncs-co-drivers @nrfconnect/ncs-cia +/include/drivers/mspi/nrfe_mspi.h @nrfconnect/ncs-co-drivers @nrfconnect/ncs-ll-ursus /include/drivers/sensor_sim.h @nrfconnect/ncs-co-drivers @nrfconnect/ncs-cia /include/drivers/sensor_stub.h @nrfconnect/ncs-co-drivers @nrfconnect/ncs-cia /include/emds/ @balaklaka @nrfconnect/ncs-paladin @@ -319,7 +341,10 @@ /include/mgmt/ @nrfconnect/ncs-pluto /include/modem/ @nrfconnect/ncs-modem /include/mpsl/ @nrfconnect/ncs-dragoon -/include/net/azure_* @nrfconnect/ncs-cia @coderbyheart +/include/net/ @nrfconnect/ncs-co-networking +/include/net/azure_* @nrfconnect/ncs-cia +/include/net/download_client* @nrfconnect/ncs-modem +/include/net/downloader* @nrfconnect/ncs-modem /include/net/nrf_cloud_* @nrfconnect/ncs-nrf-cloud /include/net/wifi_credentials.h @nrfconnect/ncs-cia /include/nfc/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-si-muffin @@ -362,7 +387,7 @@ /lib/location/ @trantanen @jhirsi @tokangas /lib/lte_link_control/ @tokangas @trantanen @jhirsi @nrfconnect/ncs-modem /lib/modem_antenna/ @tokangas @nrfconnect/ncs-modem -/lib/modem_attest_token/ @jayteemo +/lib/modem_attest_token/ @nrfconnect/ncs-modem /lib/modem_battery/ @nrfconnect/ncs-modem /lib/modem_info/ @nrfconnect/ncs-co-networking @nrfconnect/ncs-modem /lib/modem_jwt/ @nrfconnect/ncs-iot-oulu @nrfconnect/ncs-modem @@ -385,11 +410,11 @@ /lib/wave_gen/ @nrfconnect/ncs-si-muffin # Modules -/modules/azure-sdk-for-c/ @nrfconnect/ncs-cia @plskeggs -/modules/cjson/ @nrfconnect/ncs-cia @plskeggs +/modules/azure-sdk-for-c/ @nrfconnect/ncs-cia +/modules/cjson/ @nrfconnect/ncs-cia @nrfconnect/ncs-nrf-cloud /modules/coremark/ @nrfconnect/ncs-si-bluebagel /modules/mcuboot/ @nrfconnect/ncs-pluto -/modules/memfault-firmware-sdk/ @nrfconnect/ncs-cia @plskeggs +/modules/memfault-firmware-sdk/ @nrfconnect/ncs-cia /modules/nrfxlib/ @nrfconnect/ncs-code-owners /modules/trusted-firmware-m/ @nrfconnect/ncs-aegir /modules/wfa-qt/ @nrfconnect/ncs-wifi @@ -399,12 +424,56 @@ /samples/app_event_manager/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-si-bluebagel /samples/app_event_manager_profiler_tracer/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-si-bluebagel /samples/benchmarks/coremark/ @nrfconnect/ncs-si-bluebagel -/samples/bluetooth/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-dragoon -/samples/bluetooth/broadcast_config_tool/ @nrfconnect/ncs-audio -/samples/bluetooth/mesh/ @nrfconnect/ncs-paladin -/samples/bluetooth/direction_finding_connectionless_rx/ @ppryga-nordic -/samples/bluetooth/direction_finding_connectionless_tx/ @ppryga-nordic +/samples/bluetooth/nrf_auraconfig/ @nrfconnect/ncs-audio +/samples/bluetooth/central_and_peripheral_hr/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/central_bas/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/central_hids/ @nrfconnect/ncs-si-bluebagel +/samples/bluetooth/central_hr_coded/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/central_nfc_pairing/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/central_smp_client/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/central_uart/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/channel_sounding_ras_initiator/ @nrfconnect/ncs-dragoon +/samples/bluetooth/channel_sounding_ras_reflector/ @nrfconnect/ncs-dragoon +/samples/bluetooth/conn_time_sync/ @nrfconnect/ncs-dragoon +/samples/bluetooth/direction_finding_central/ @nrfconnect/ncs-dragoon +/samples/bluetooth/direction_finding_connectionless_rx/ @nrfconnect/ncs-dragoon +/samples/bluetooth/direction_finding_connectionless_tx/ @nrfconnect/ncs-dragoon +/samples/bluetooth/direction_finding_peripheral/ @nrfconnect/ncs-dragoon +/samples/bluetooth/direct_test_mode/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/enocean/ @nrfconnect/ncs-paladin +/samples/bluetooth/event_trigger/ @nrfconnect/ncs-dragoon /samples/bluetooth/fast_pair/ @nrfconnect/ncs-si-bluebagel +/samples/bluetooth/hci_lpuart/ @nordic-krch +/samples/bluetooth/iso_combined_bis_and_cis/ @nrfconnect/ncs-dragoon +/samples/bluetooth/iso_time_sync/ @nrfconnect/ncs-dragoon +/samples/bluetooth/llpm/ @nrfconnect/ncs-dragoon +/samples/bluetooth/mesh/ @nrfconnect/ncs-paladin +/samples/bluetooth/multiple_adv_sets/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/nrf_dm/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_ams_client/ @leewkb4567 +/samples/bluetooth/peripheral_ancs_client/ @leewkb4567 +/samples/bluetooth/peripheral_bms/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_cgms/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_cts_client/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_gatt_dm/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_hids_keyboard/ @nrfconnect/ncs-si-bluebagel +/samples/bluetooth/peripheral_hids_mouse/ @nrfconnect/ncs-si-bluebagel +/samples/bluetooth/peripheral_hr_coded/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_lbs/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_mds/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_nfc_pairing/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_power_profiling/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_rscs/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_status/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_uart/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/peripheral_with_multiple_identities/ @nrfconnect/ncs-dragoon +/samples/bluetooth/radio_coex_1wire/ @nrfconnect/ncs-dragoon +/samples/bluetooth/radio_notification_cb/ @nrfconnect/ncs-dragoon +/samples/bluetooth/rpc_host/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/scanning_while_connecting/ @nrfconnect/ncs-dragoon +/samples/bluetooth/shell_bt_nus/ @nrfconnect/ncs-si-muffin +/samples/bluetooth/subrating/ @nrfconnect/ncs-dragoon +/samples/bluetooth/throughput/ @nrfconnect/ncs-si-muffin /samples/bootloader/ @nrfconnect/ncs-pluto /samples/caf/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-si-bluebagel /samples/caf_sensor_manager/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-si-bluebagel @@ -439,7 +508,6 @@ /samples/net/ @nrfconnect/ncs-cia @nrfconnect/ncs-modem /samples/nfc/ @nrfconnect/ncs-si-muffin /samples/nrf5340/netboot/ @nrfconnect/ncs-pluto -/samples/nrf5340/multiprotocol_rpmsg/ @hubertmis /samples/nrf_rpc/ @nrfconnect/ncs-si-muffin /samples/sensor/bh1749/ @nrfconnect/ncs-cia /samples/sensor/bme68x_iaq/ @nrfconnect/ncs-cia @@ -453,8 +521,6 @@ /samples/peripheral/lpuart/ @nordic-krch /samples/peripheral/radio_test/ @nrfconnect/ncs-si-muffin /samples/pmic/native/ @nordic-auko -/samples/sdfw/ @nrfconnect/ncs-aurora -/samples/sdfw/ssf_client/ @anhmolt /samples/sensor/bh1749/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-cia /samples/sensor/bme68x_iaq/ @nrfconnect/ncs-co-drivers @nrfconnect/ncs-cia /samples/suit/ @nrfconnect/ncs-charon @@ -473,15 +539,64 @@ /samples/wifi/softap/ @D-Triveni @krish2718 /samples/wifi/monitor/ @D-Triveni /samples/wifi/promiscuous/ @D-Triveni +/samples/wifi/wfa_qt_app/ @D-Triveni +/samples/wifi/offloaded_raw_tx/ @kapbh @sachinthegreen /samples/zigbee/ @nrfconnect/ncs-zigbee /samples/app_event_manager/*.rst @nrfconnect/ncs-si-muffin-doc @nrfconnect/ncs-si-bluebagel-doc /samples/app_event_manager_profiler_tracer/*.rst @nrfconnect/ncs-si-muffin-doc /samples/benchmarks/coremark/*.rst @nrfconnect/ncs-si-bluebagel-doc -/samples/bluetooth/**/*.rst @nrfconnect/ncs-dragoon-doc @nrfconnect/ncs-si-muffin-doc -/samples/bluetooth/broadcast_config_tool/*.rst @nrfconnect/ncs-audio-doc +/samples/bluetooth/**/*.rst @nrfconnect/ncs-si-bluebagel-doc @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/central_and_peripheral_hr/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/central_bas/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/nrf_auraconfig/*.rst @nrfconnect/ncs-audio-doc +/samples/bluetooth/*_hids*/*.rst @nrfconnect/ncs-si-bluebagel-doc +/samples/bluetooth/central_hr_coded/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/central_nfc_pairing/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/central_smp_client/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/central_uart/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/channel_sounding_ras_initiator/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/channel_sounding_ras_reflector/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/conn_time_sync/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/direction_finding_central/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/direction_finding_connectionless_rx/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/direction_finding_connectionless_tx/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/direction_finding_peripheral/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/direct_test_mode/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/enocean/*.rst @nrfconnect/ncs-paladin-doc +/samples/bluetooth/event_trigger/*.rst @nrfconnect/ncs-dragoon-doc /samples/bluetooth/fast_pair/**/*.rst @nrfconnect/ncs-si-bluebagel-doc /samples/bluetooth/mesh/**/*.rst @nrfconnect/ncs-paladin-doc +/samples/bluetooth/hci_lpuart/*.rst @nrfconnect/ncs-doc-leads +/samples/bluetooth/iso_combined_bis_and_cis/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/iso_time_sync/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/llpm/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/multiple_adv_sets/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/nrf_dm/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_ams_client/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_ancs_client/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_bms/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_cgms/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_cts_client/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_gatt_dm/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_hids_keyboard/*.rst @nrfconnect/ncs-si-bluebagel-doc +/samples/bluetooth/peripheral_hids_mouse/*.rst @nrfconnect/ncs-si-bluebagel-doc +/samples/bluetooth/peripheral_hr_coded/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_lbs/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_mds/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_nfc_pairing/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_power_profiling/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_rscs/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_status/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_uart/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/peripheral_with_multiple_identities/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/radio_coex_1wire/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/radio_notification_cb/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/rpc_host/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/scanning_while_connecting/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/shell_bt_nus/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/bluetooth/subrating/*.rst @nrfconnect/ncs-dragoon-doc +/samples/bluetooth/throughput/*.rst @nrfconnect/ncs-si-muffin-doc /samples/bootloader/*.rst @nrfconnect/ncs-pluto-doc /samples/caf/*.rst @nrfconnect/ncs-si-muffin-doc @nrfconnect/ncs-si-bluebagel-doc /samples/caf_sensor_manager/*.rst @nrfconnect/ncs-si-muffin-doc @nrfconnect/ncs-si-bluebagel-doc @@ -498,7 +613,8 @@ /samples/crypto/**/*.rst @nrfconnect/ncs-aegir-doc /samples/debug/memfault/*.rst @nrfconnect/ncs-cia-doc /samples/debug/ppi_trace/*.rst @nrfconnect/ncs-doc-leads -/samples/dect/**/*.rst @nrfconnect/ncs-modem-doc +/samples/dect/dect_phy/dect_shell/*.rst @nrfconnect/ncs-iot-positioning-doc +/samples/dect/dect_phy/hello_dect/*.rst @nrfconnect/ncs-modem-doc /samples/esb/**/*.rst @nrfconnect/ncs-si-muffin-doc /samples/edge_impulse/**/*.rst @nrfconnect/ncs-si-muffin-doc /samples/event_manager_proxy/*.rst @nrfconnect/ncs-si-muffin-doc @@ -514,9 +630,9 @@ /samples/nrf5340/empty_app_core/*.rst @nrfconnect/ncs-si-muffin-doc /samples/nrf5340/empty_net_core/*.rst @nrfconnect/ncs-si-bluebagel-doc /samples/nrf5340/extxip_smp_svr/*.rst @nrfconnect/ncs-pluto-doc -/samples/nrf5340/multiprotocol_rpmsg/*.rst @nrfconnect/ncs-doc-leads /samples/nrf5340/netboot/*.rst @nrfconnect/ncs-pluto-doc /samples/nrf5340/remote_shell/*.rst @nrfconnect/ncs-si-muffin-doc +/samples/nrf_compress/mcuboot_update/*.rst @nrfconnect/ncs-vestavind-doc /samples/nrf_profiler/*.rst @nrfconnect/ncs-si-bluebagel-doc /samples/nrf_rpc/entropy_nrf53/*.rst @nrfconnect/ncs-si-muffin-doc /samples/nrf_rpc/protocols_serialization/**/*.rst @nrfconnect/ncs-terahertz-doc @@ -526,7 +642,6 @@ /samples/peripheral/lpuart/*.rst @nrfconnect/ncs-doc-leads /samples/peripheral/radio_test/*.rst @nrfconnect/ncs-si-muffin-doc /samples/pmic/**/*.rst @nrfconnect/ncs-pmic-doc -/samples/sdfw/**/*.rst @nrfconnect/ncs-aurora-doc /samples/sensor/**/*.rst @nrfconnect/ncs-cia-doc /samples/suit/**/*.rst @nrfconnect/ncs-charon-doc /samples/tfm/**/*.rst @nrfconnect/ncs-aegir-doc @@ -540,36 +655,44 @@ # Scripts /scripts/docker/ @nrfconnect/ncs-ci -/scripts/ci/tags.yaml @nordic-piks @PerMac @katgiadla -/scripts/ci/twister_ignore.txt @nordic-piks @PerMac @katgiadla +/scripts/ci/tags.yaml @nordic-piks @PerMac @katgiadla @nrfconnect/ncs-test-leads +/scripts/ci/tags_sdk_zephyr.yaml @nordic-piks @PerMac @katgiadla @nrfconnect/ncs-test-leads +/scripts/ci/twister_ignore.txt @nordic-piks @PerMac @katgiadla @nrfconnect/ncs-test-leads /scripts/quarantine*.yaml @nrfconnect/ncs-test-leads /scripts/hid_configurator/ @nrfconnect/ncs-si-bluebagel -/scripts/ncs-toolchain-version-minimum.txt @nrfconnect/ncs-co-build-system @nrfconnect/ncs-ci /scripts/tools-versions-*.txt @nrfconnect/ncs-co-build-system @nrfconnect/ncs-ci /scripts/requirements-*.txt @nrfconnect/ncs-co-build-system @nrfconnect/ncs-ci -/scripts/west_commands/genboard/ @gmarull +/scripts/west_commands/create_board/ @gmarull /scripts/west_commands/sbom/ @nrfconnect/ncs-si-muffin /scripts/west_commands/thingy91x_dfu.py @nrfconnect/ncs-cia +/scripts/west_commands/ncs-provision.py @nrfconnect/ncs-pluto /scripts/bootloader/ @nrfconnect/ncs-pluto /scripts/ncs-docker-version.txt @nrfconnect/ncs-ci /scripts/print_docker_image.sh @nrfconnect/ncs-ci /scripts/print_toolchain_checksum.sh @nrfconnect/ncs-ci +/scripts/sdp/ @nrfconnect/ncs-ll-ursus +/scripts/twister/alt/zephyr/tests/drivers/mspi/api/testcase.yaml @nrfconnect/ncs-ll-ursus +/scripts/docker/*.rst @nrfconnect/ncs-doc-leads /scripts/hid_configurator/*.rst @nrfconnect/ncs-si-bluebagel-doc /scripts/memfault/*.rst @nrfconnect/ncs-cia-doc /scripts/nrf_provision/fast_pair/*.rst @nrfconnect/ncs-si-bluebagel-doc /scripts/partition_manager/*.rst @nrfconnect/ncs-aurora-doc /scripts/shell/ble_console/**/*.rst @nrfconnect/ncs-doc-leads /scripts/west_commands/sbom/*.rst @nrfconnect/ncs-si-muffin-doc +/scripts/twister/alt/zephyr/samples/basic/ @nrfconnect/ncs-ll-ursus +/scripts/twister/alt/zephyr/samples/sensor/ @nrfconnect/ncs-low-level-test +/scripts/twister/alt/zephyr/tests/drivers/ @nrfconnect/ncs-low-level-test # Share /share/ @nrfconnect/ncs-co-build-system # Snippets /snippets/ci-shell/ @nrfconnect/ncs-protocols-serialization -/snippets/emulated*/ @nrfconnect/ncs-ll-ursus +/snippets/sdp/ @nrfconnect/ncs-ll-ursus /snippets/hw-flow-control/ @nrfconnect/ncs-low-level-test @miha-nordic /snippets/matter-diagnostic-logs/ @nrfconnect/ncs-matter +/snippets/matter-debug/ @nrfconnect/ncs-matter /snippets/nordic-bt-rpc/ @ppryga-nordic /snippets/nrf70-driver-debug/ @krish2718 @sachinthegreen /snippets/nrf70-driver-verbose-debug/ @krish2718 @sachinthegreen @@ -583,6 +706,10 @@ /snippets/wpa-supplicant-debug/ @krish2718 @sachinthegreen /snippets/zperf/ @nrfconnect/ncs-protocols-serialization +# These snippet entries must be below other snippet entries (excluding doc), do not move +/snippets/ @nrfconnect/ncs-co-build-system +**/snippets/ @nrfconnect/ncs-co-build-system + /snippets/nordic-bt-rpc/*.rst @nrfconnect/ncs-doc-leads # Subsystems @@ -590,14 +717,16 @@ /subsys/app_event_manager_profiler_tracer/ @nrfconnect/ncs-si-bluebagel /subsys/audio/audio_module_template/ @nrfconnect/ncs-audio /subsys/audio_module/ @nrfconnect/ncs-audio -/subsys/bluetooth/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-dragoon +/subsys/bluetooth/ @nrfconnect/ncs-dragoon /subsys/bluetooth/adv_prov/ @nrfconnect/ncs-si-bluebagel /subsys/bluetooth/controller/ @nrfconnect/ncs-dragoon /subsys/bluetooth/host_extensions/ @nrfconnect/ncs-dragoon /subsys/bluetooth/mesh/ @nrfconnect/ncs-paladin /subsys/bluetooth/rpc/ @nrfconnect/ncs-si-bluebagel /subsys/bluetooth/services/fast_pair/ @nrfconnect/ncs-si-bluebagel +/subsys/bluetooth/services/ras/ @nrfconnect/ncs-dragoon /subsys/bluetooth/services/wifi_prov/ @wentong-li @bama-nordic +/subsys/bluetooth/services/hids.c @nrfconnect/ncs-si-bluebagel /subsys/bootloader/ @nrfconnect/ncs-pluto /subsys/caf/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-si-bluebagel /subsys/debug/ @nordic-krch @@ -619,11 +748,15 @@ /subsys/mpsl/fem/ @ankuns @martintv /subsys/net/ @nrfconnect/ncs-co-networking /subsys/net/lib/mqtt_helper/ @nrfconnect/ncs-cia -/subsys/net/lib/azure_* @nrfconnect/ncs-cia @coderbyheart -/subsys/net/lib/aws_* @nrfconnect/ncs-cia @coderbyheart +/subsys/net/lib/azure_* @nrfconnect/ncs-cia +/subsys/net/lib/aws_* @nrfconnect/ncs-cia +/subsys/net/lib/download_client* @nrfconnect/ncs-modem +/subsys/net/lib/downloader/ @nrfconnect/ncs-modem /subsys/net/lib/ftp_client/ @nrfconnect/ncs-iot-oulu +/subsys/net/lib/hostap_crypto/ @krish2718 @jukkar @vivekuppunda /subsys/net/lib/icalendar_parser/ @lats1980 /subsys/net/lib/lwm2m_client_utils/ @nrfconnect/ncs-co-networking @nrfconnect/ncs-iot-oulu +/subsys/net/lib/nrf70_fw_ext/ @krish2718 @sachinthegreen /subsys/net/lib/nrf_cloud/ @nrfconnect/ncs-nrf-cloud /subsys/net/lib/nrf_provisioning/ @nrfconnect/ncs-iot-oulu /subsys/net/lib/zzhc/ @junqingzou @@ -652,6 +785,8 @@ # Sysbuild /sysbuild/ @nrfconnect/ncs-co-build-system /sysbuild/Kconfig.suit @nrfconnect/ncs-charon +/sysbuild/Kconfig.suit_provisioning @nrfconnect/ncs-charon +/sysbuild/suit_provisioning/ @nrfconnect/ncs-charon /sysbuild/suit.cmake @nrfconnect/ncs-charon # Tests @@ -661,9 +796,12 @@ /tests/benchmarks/multicore/idle/ @adamkondraciuk @nrfconnect/ncs-low-level-test /tests/benchmarks/multicore/idle_gpio/ @adamkondraciuk @nrfconnect/ncs-low-level-test /tests/bluetooth/iso/ @nrfconnect/ncs-audio @Frodevan +/tests/bluetooth/bsim/nrf_auraconfig/ @nrfconnect/ncs-audio /tests/bluetooth/tester/ @carlescufi @nrfconnect/ncs-paladin /tests/crypto/ @stephen-nordic @magnev -/tests/drivers/gpio/egpio_basic_api/ @nrfconnect/ncs-ll-ursus +/tests/drivers/audio/pdm_loopback/ @nrfconnect/ncs-low-level-test +/tests/drivers/gpio/ @nrfconnect/ncs-low-level-test @nrfconnect/ncs-ll-ursus +/tests/drivers/flash/flash_ipuc/ @nrfconnect/ncs-charon /tests/drivers/flash/flash_rpc/ @nrfconnect/ncs-pluto /tests/drivers/flash_patch/ @nrfconnect/ncs-pluto /tests/drivers/fprotect/ @nrfconnect/ncs-pluto @@ -671,6 +809,7 @@ /tests/drivers/nrfx_integration_test/ @nrfconnect/ncs-co-drivers /tests/drivers/pwm/gpio_loopback/ @nrfconnect/ncs-low-level-test /tests/drivers/sensor/multicore_temp/ @nrfconnect/ncs-low-level-test +/tests/drivers/sdp_asm/ @nrfconnect/ncs-low-level-test @nrfconnect/ncs-ll-ursus /tests/lib/at_cmd_parser/ @nrfconnect/ncs-modem /tests/lib/at_cmd_custom/ @nrfconnect/ncs-modem /tests/lib/at_parser/ @nrfconnect/ncs-modem @@ -704,6 +843,7 @@ /tests/modules/mcuboot/direct_xip/ @nrfconnect/ncs-pluto /tests/modules/mcuboot/external_flash/ @nrfconnect/ncs-pluto /tests/nrf5340_audio/ @nrfconnect/ncs-audio @nordic-auko +/tests/psa_crypto/ @nrfconnect/ncs-aegir /tests/subsys/app_event_manager/ @nrfconnect/ncs-si-muffin @nrfconnect/ncs-si-bluebagel /tests/subsys/audio/audio_module_template/ @nrfconnect/ncs-audio /tests/subsys/audio_module/ @nrfconnect/ncs-audio @@ -719,9 +859,12 @@ /tests/subsys/emds/ @balaklaka @nrfconnect/ncs-paladin /tests/subsys/event_manager_proxy/ @nrfconnect/ncs-si-muffin /tests/subsys/fw_info/ @nrfconnect/ncs-pluto +/tests/subsys/kmu/ @nrfconnect/ncs-pluto /tests/subsys/mpsl/ @nrfconnect/ncs-dragoon /tests/subsys/net/lib/aws_*/ @nrfconnect/ncs-cia /tests/subsys/net/lib/azure_iot_hub/ @nrfconnect/ncs-cia +/tests/subsys/net/lib/downloader/ @nrfconnect/ncs-modem +/tests/subsys/net/lib/download_client/ @nrfconnect/ncs-modem /tests/subsys/net/lib/fota_download/ @nrfconnect/ncs-pluto /tests/subsys/net/lib/lwm2m_*/ @nrfconnect/ncs-iot-oulu /tests/subsys/net/lib/mqtt_helper/ @nrfconnect/ncs-cia @@ -732,6 +875,7 @@ /tests/subsys/nfc/rpc/ @nrfconnect/ncs-protocols-serialization /tests/subsys/nrf_compress/ @nordicjm /tests/subsys/nrf_profiler/ @nrfconnect/ncs-si-bluebagel +/tests/subsys/nrf_rpc/ @nrfconnect/ncs-protocols-serialization /tests/subsys/partition_manager/region/ @nordicjm @tejlmand /tests/subsys/partition_manager/static_pm_file/ @nordicjm @tejlmand /tests/subsys/pcd/ @nrfconnect/ncs-pluto @@ -743,7 +887,8 @@ /tests/benchmarks/multicore/idle/*.rst @nrfconnect/ncs-si-bluebagel-doc /tests/benchmarks/multicore/idle_gpio/*.rst @nrfconnect/ncs-si-bluebagel-doc -/tests/benchmarks/multicore/idle_with_pwm/*.rst @nrfconnect/ncs-si-bluebagel-doc +/tests/benchmarks/multicore/idle_pwm_led/*.rst @nrfconnect/ncs-si-bluebagel-doc +/tests/bluetooth/bsim/nrf_auraconfig/*.rst @nrfconnect/ncs-audio-doc # CI specific west /test-manifests/99-default-test-nrf.yml @nrfconnect/ncs-ci diff --git a/Kconfig.nrf b/Kconfig.nrf index 125dc7da54ae..8b6e648b2f3d 100644 --- a/Kconfig.nrf +++ b/Kconfig.nrf @@ -28,12 +28,6 @@ endif # BUILD_WITH_TFM menu "Nordic nRF Connect" -# Hides child parent configuration options -config HIDE_CHILD_PARENT_CONFIG - bool - default y if "$(HIDE_CHILD_PARENT_CONFIG)" = "True" - default n - # Override configuration from zephyr which sets this to 0x200 if MCUboot is # enabled (CONFIG_BOOTLOADER_MCUBOOT), since NCS use partition_manager to # get this offset intsead. @@ -110,7 +104,7 @@ config GETOPT default n # Temporary hack to be able to build samples and tests on the nRF51L15 FLPR core -if (SOC_NRF54L15_ENGA_CPUFLPR || SOC_NRF54L15_CPUFLPR) && PARTITION_MANAGER_ENABLED +if SOC_NRF54L15_CPUFLPR && PARTITION_MANAGER_ENABLED config FLASH_BASE_ADDRESS hex default 0x0 diff --git a/VERSION b/VERSION index 1de7f517c3f4..e7d47299cdb1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.7.99 +2.9.99 diff --git a/applications/asset_tracker_v2/Kconfig.sysbuild b/applications/asset_tracker_v2/Kconfig.sysbuild index 39426561f59b..458e26593c62 100644 --- a/applications/asset_tracker_v2/Kconfig.sysbuild +++ b/applications/asset_tracker_v2/Kconfig.sysbuild @@ -16,6 +16,10 @@ config SECURE_BOOT_APPCORE config WIFI_NRF70 default y if BOARD_THINGY91X_NRF9151_NS +choice WIFI_NRF70_OPER_MODES + default WIFI_NRF70_SCAN_ONLY if BOARD_THINGY91X_NRF9151_NS +endchoice + config PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY default y if BOARD_NRF9151DK_NRF9151_NS || BOARD_NRF9161DK_NRF9161_NS default y if BOARD_NRF9160DK_NRF9160_NS \ diff --git a/applications/asset_tracker_v2/boards/native_sim.conf b/applications/asset_tracker_v2/boards/native_sim.conf index 468ffc505eb7..ccec39738f81 100644 --- a/applications/asset_tracker_v2/boards/native_sim.conf +++ b/applications/asset_tracker_v2/boards/native_sim.conf @@ -103,8 +103,7 @@ CONFIG_NET_CONFIG_MY_IPV4_GW="192.0.2.2" # FOTA CONFIG_FOTA_DOWNLOAD=n CONFIG_DFU_TARGET=n -CONFIG_DOWNLOAD_CLIENT=n -CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=n +CONFIG_DOWNLOADER=n # MCUBOOT CONFIG_BOOTLOADER_MCUBOOT=n @@ -112,7 +111,6 @@ CONFIG_IMG_MANAGER=n CONFIG_MCUBOOT_IMG_MANAGER=n CONFIG_IMG_ERASE_PROGRESSIVELY=n CONFIG_SECURE_BOOT=n -CONFIG_BUILD_S1_VARIANT=n # Watchdog CONFIG_WATCHDOG_APPLICATION=n diff --git a/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf b/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf index 35826c9b2a3d..772ccc08a853 100644 --- a/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf +++ b/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf @@ -29,4 +29,3 @@ CONFIG_LED_PWM=y # Disable MCUboot DFU -- incompatible with static partitions CONFIG_SECURE_BOOT=n -CONFIG_BUILD_S1_VARIANT=n diff --git a/applications/asset_tracker_v2/boards/thingy91x_nrf9151_ns.conf b/applications/asset_tracker_v2/boards/thingy91x_nrf9151_ns.conf index 921d74856023..cf5c25133cd4 100644 --- a/applications/asset_tracker_v2/boards/thingy91x_nrf9151_ns.conf +++ b/applications/asset_tracker_v2/boards/thingy91x_nrf9151_ns.conf @@ -43,7 +43,6 @@ CONFIG_LOCATION_REQUEST_DEFAULT_METHOD_THIRD_CELLULAR=y # Align this with CONFIG_NRF_WIFI_SCAN_MAX_BSS_CNT CONFIG_LOCATION_METHOD_WIFI_SCANNING_RESULTS_MAX_CNT=10 -CONFIG_LOCATION_WORKQUEUE_STACK_SIZE=8192 # Not for LTE throughput testing CONFIG_NRF_MODEM_LIB_SHMEM_TX_SIZE=4096 @@ -68,16 +67,20 @@ CONFIG_NET_STATISTICS_USER_API=y CONFIG_NET_CONTEXT_SYNC_RECV=y # Memory configurations -CONFIG_NET_BUF_RX_COUNT=8 -CONFIG_NET_BUF_TX_COUNT=8 +CONFIG_NET_BUF_RX_COUNT=1 +CONFIG_NET_BUF_TX_COUNT=1 CONFIG_NET_PKT_RX_COUNT=1 CONFIG_NET_PKT_TX_COUNT=1 -CONFIG_NET_TX_STACK_SIZE=4096 -CONFIG_NET_RX_STACK_SIZE=4096 +CONFIG_NET_TX_STACK_SIZE=512 +CONFIG_NET_RX_STACK_SIZE=512 CONFIG_NET_TC_TX_COUNT=1 -CONFIG_NET_MAX_CONTEXTS=5 +CONFIG_NET_MAX_CONTEXTS=1 CONFIG_NET_MGMT_EVENT_STACK_SIZE=1024 # Enable external flash CONFIG_SPI_NOR_SFDP_DEVICETREE=y CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y + +# Use modem UUID as client ID +CONFIG_NRF_CLOUD_CLIENT_ID_SRC_INTERNAL_UUID=y +CONFIG_MODEM_JWT=y diff --git a/applications/asset_tracker_v2/doc/asset_tracker_v2_description.rst b/applications/asset_tracker_v2/doc/asset_tracker_v2_description.rst index 6be8811c08ef..598efa9003df 100644 --- a/applications/asset_tracker_v2/doc/asset_tracker_v2_description.rst +++ b/applications/asset_tracker_v2/doc/asset_tracker_v2_description.rst @@ -121,7 +121,7 @@ Overlay configurations files that enable specific features: * :file:`overlay-azure.conf` - Configuration file that enables communication with Azure IoT Hub. * :file:`overlay-lwm2m.conf` - Configuration file that enables communication with AVSystem's Coiote IoT Device Management. * :file:`overlay-pgps.conf` - Configuration file that enables P-GPS. -* :file:`overlay-nrf7002ek-wifi-scan-only.conf` - Configuration file that enables Wi-Fi scanning with nRF7002 EK. +* :file:`overlay-nrf7002ek-wifi-scan-only.conf` - Configuration file that enables Wi-Fi® scanning with nRF7002 EK. * :file:`overlay-low-power.conf` - Configuration file that achieves the lowest power consumption by disabling features that consume extra power, such as LED control and logging. * :file:`overlay-debug.conf` - Configuration file that adds additional verbose logging capabilities and enables the debug module. * :file:`overlay-memfault.conf` - Configuration file that enables `Memfault`_. @@ -180,9 +180,9 @@ Testing After programming the application and all the prerequisites to your development kit, test the application by performing the following steps: 1. |connect_kit| -#. Connect to the kit with a terminal emulator (for example, `nRF Connect Serial Terminal`_). - You can also use the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor`_ app to open the Serial Terminal. - Using the Cellular Monitor app in combination with the nRF Connect Serial Terminal shows how the modem responds to the different modem commands. +#. Connect to the kit with a terminal emulator (for example, the `Serial Terminal app`_). + You can also use the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor app`_ to open the Serial Terminal app. + Using the Cellular Monitor app in combination with the Serial Terminal app shows how the modem responds to the different modem commands. #. Reset the development kit. #. Observe in the terminal window that application boots as shown in the following output:: @@ -235,7 +235,7 @@ This application uses the following |NCS| libraries and drivers: * :ref:`lib_date_time` * :ref:`lte_lc_readme` * :ref:`modem_info_readme` -* :ref:`lib_download_client` +* :ref:`lib_downloader` * :ref:`lib_fota_download` * :ref:`caf_leds` diff --git a/applications/asset_tracker_v2/doc/cloud_wrapper.rst b/applications/asset_tracker_v2/doc/cloud_wrapper.rst index 7a61f1cdb88a..d1a399508ab4 100644 --- a/applications/asset_tracker_v2/doc/cloud_wrapper.rst +++ b/applications/asset_tracker_v2/doc/cloud_wrapper.rst @@ -210,7 +210,7 @@ Device-to-cloud (D2C) +------------------------------+----------------------------------------------------+ | Neighbor cell measurements | ``//d2c`` | +------------------------------+----------------------------------------------------+ -| Wi-Fi access points | ``//d2c`` | +| Wi-Fi® access points | ``//d2c`` | +------------------------------+----------------------------------------------------+ | Button presses | ``//d2c`` | +------------------------------+----------------------------------------------------+ diff --git a/applications/asset_tracker_v2/doc/data_module.rst b/applications/asset_tracker_v2/doc/data_module.rst index f8bf8425327c..5d20c36b1756 100644 --- a/applications/asset_tracker_v2/doc/data_module.rst +++ b/applications/asset_tracker_v2/doc/data_module.rst @@ -130,7 +130,7 @@ CONFIG_DATA_SAMPLE_NEIGHBOR_CELLS_DEFAULT .. _CONFIG_DATA_SAMPLE_WIFI_DEFAULT: CONFIG_DATA_SAMPLE_WIFI_DEFAULT - This configuration includes Wi-Fi APs during sampling. + This configuration includes Wi-Fi® APs during sampling. Enabled by default. Other options: diff --git a/applications/asset_tracker_v2/doc/location_module.rst b/applications/asset_tracker_v2/doc/location_module.rst index c3ddad55641e..a2e72117f426 100644 --- a/applications/asset_tracker_v2/doc/location_module.rst +++ b/applications/asset_tracker_v2/doc/location_module.rst @@ -10,7 +10,7 @@ Location module .. important:: |ATv2_maintenance_note| -The location module controls the GNSS, cellular and Wi-Fi positioning functionality. +The location module controls the GNSS, cellular, and Wi-Fi® positioning functionality. It can be used to retrieve the location of the device in the form of events containing a position, velocity and time (PVT) structure. Features diff --git a/applications/asset_tracker_v2/doc/sensor_module.rst b/applications/asset_tracker_v2/doc/sensor_module.rst index ed607d2c07c1..6f6850d590f9 100644 --- a/applications/asset_tracker_v2/doc/sensor_module.rst +++ b/applications/asset_tracker_v2/doc/sensor_module.rst @@ -10,7 +10,7 @@ Sensor module .. important:: |ATv2_maintenance_note| -The sensor module interacts with external sensors present on the `Thingy:91 `_ and Thingy:91 X. +The sensor module interacts with external sensors present on the `Thingy:91 `_ and `Thingy:91 X `_. It collects environmental data and detects motion over a set threshold value. Features diff --git a/applications/asset_tracker_v2/overlay-carrier.conf b/applications/asset_tracker_v2/overlay-carrier.conf index f28a35093f29..e629f83a1896 100644 --- a/applications/asset_tracker_v2/overlay-carrier.conf +++ b/applications/asset_tracker_v2/overlay-carrier.conf @@ -18,8 +18,8 @@ CONFIG_PDN=y # AT Monitor is used by PDN library CONFIG_AT_MONITOR=y -# Download client for DFU -CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE=230 +# Downloader for DFU +CONFIG_DOWNLOADER_MAX_FILENAME_SIZE=230 # Modem info CONFIG_MODEM_INFO_BUFFER_SIZE=512 @@ -36,3 +36,6 @@ CONFIG_DFU_TARGET=y # Asserts CONFIG_ASSERT_VERBOSE=n + +# IPv4 (IPv6 is enabled by default) +CONFIG_NET_IPV4=y diff --git a/applications/asset_tracker_v2/overlay-lwm2m.conf b/applications/asset_tracker_v2/overlay-lwm2m.conf index e14d143165dc..a66f4292aaf1 100644 --- a/applications/asset_tracker_v2/overlay-lwm2m.conf +++ b/applications/asset_tracker_v2/overlay-lwm2m.conf @@ -45,6 +45,7 @@ CONFIG_LWM2M_RD_CLIENT_STOP_POLLING_AT_IDLE=y CONFIG_LWM2M_QUEUE_MODE_UPTIME=30 # Configure PSM mode +CONFIG_LTE_LC_PSM_MODULE=y CONFIG_LTE_PSM_REQ=y # Request periodic TAU of 3600 seconds (60 minutes) CONFIG_LTE_PSM_REQ_RPTAU="00000110" @@ -56,6 +57,7 @@ CONFIG_LTE_PSM_REQ_RPTAU="00000110" CONFIG_LTE_PSM_REQ_RAT="00001111" # Request eDRX mode +CONFIG_LTE_LC_EDRX_MODULE=y CONFIG_LTE_EDRX_REQ=y # Requested eDRX cycle length for LTE-M and NB-IoT @@ -76,6 +78,7 @@ CONFIG_LTE_PTW_VALUE_NBIOT="0000" # Get notification before Tracking Area Update (TAU). Notification triggers registration # update and TAU will be sent with the update which decreases power consumption. +CONFIG_LTE_LC_TAU_PRE_WARNING_MODULE=y CONFIG_LTE_LC_TAU_PRE_WARNING_NOTIFICATIONS=y # Optimize powersaving by using tickless mode in LwM2M engine diff --git a/applications/asset_tracker_v2/overlay-memfault.conf b/applications/asset_tracker_v2/overlay-memfault.conf index 5d29bc52c6ef..961e725de2f4 100644 --- a/applications/asset_tracker_v2/overlay-memfault.conf +++ b/applications/asset_tracker_v2/overlay-memfault.conf @@ -29,3 +29,6 @@ CONFIG_DEBUG_MODULE=y # Increase the event storage size so that all metrics generated by the asset tracker application # are reliably sent to the memfault cloud. CONFIG_MEMFAULT_EVENT_STORAGE_SIZE=2048 + +# Memfault depends on POSIX, disable unneeded POSIX features +CONFIG_POSIX_FILE_SYSTEM=n diff --git a/applications/asset_tracker_v2/overlay-nrf7002ek-wifi-scan-only.conf b/applications/asset_tracker_v2/overlay-nrf7002ek-wifi-scan-only.conf index f7ffc98a2cb0..cf9c580b6ffc 100644 --- a/applications/asset_tracker_v2/overlay-nrf7002ek-wifi-scan-only.conf +++ b/applications/asset_tracker_v2/overlay-nrf7002ek-wifi-scan-only.conf @@ -6,9 +6,6 @@ # Overlay to use nRF7002 EK on top of nrf91 DK for Wi-Fi scanning -# Disable modem traces as UART1 is disabled -CONFIG_NRF_MODEM_LIB_TRACE=n - # Does not work with buttons and LEDs CONFIG_UI_MODULE=n CONFIG_LED_CONTROL=n @@ -32,10 +29,6 @@ CONFIG_LOCATION_REQUEST_DEFAULT_METHOD_THIRD_CELLULAR=y # Align this with CONFIG_NRF_WIFI_SCAN_MAX_BSS_CNT CONFIG_LOCATION_METHOD_WIFI_SCANNING_RESULTS_MAX_CNT=20 -CONFIG_LOCATION_WORKQUEUE_STACK_SIZE=8192 -# Needed to handle more scan results -CONFIG_HEAP_MEM_POOL_SIZE=60000 -CONFIG_HEAP_MEM_POOL_IGNORE_MIN=y # Not for LTE throughput testing CONFIG_NRF_MODEM_LIB_SHMEM_TX_SIZE=4096 @@ -63,12 +56,12 @@ CONFIG_NET_CONTEXT_SYNC_RECV=y CONFIG_NET_IPV6=n # Memory configurations -CONFIG_NET_BUF_RX_COUNT=8 -CONFIG_NET_BUF_TX_COUNT=8 +CONFIG_NET_BUF_RX_COUNT=1 +CONFIG_NET_BUF_TX_COUNT=1 CONFIG_NET_PKT_RX_COUNT=1 CONFIG_NET_PKT_TX_COUNT=1 -CONFIG_NET_TX_STACK_SIZE=4096 -CONFIG_NET_RX_STACK_SIZE=4096 +CONFIG_NET_TX_STACK_SIZE=512 +CONFIG_NET_RX_STACK_SIZE=512 CONFIG_NET_TC_TX_COUNT=1 -CONFIG_NET_MAX_CONTEXTS=5 +CONFIG_NET_MAX_CONTEXTS=1 CONFIG_NET_MGMT_EVENT_STACK_SIZE=1024 diff --git a/applications/asset_tracker_v2/prj.conf b/applications/asset_tracker_v2/prj.conf index e9aa78506f17..e662d69c3d48 100644 --- a/applications/asset_tracker_v2/prj.conf +++ b/applications/asset_tracker_v2/prj.conf @@ -46,6 +46,11 @@ CONFIG_LTE_PSM_REQ=y CONFIG_LTE_PSM_REQ_RPTAU="11000001" ### 20 seconds active time. CONFIG_LTE_PSM_REQ_RAT="00001010" +### Enable required modules +CONFIG_LTE_LC_EDRX_MODULE=y +CONFIG_LTE_LC_NEIGHBOR_CELL_MEAS_MODULE=y +CONFIG_LTE_LC_PSM_MODULE=y +CONFIG_LTE_LC_MODEM_SLEEP_MODULE=y # Settings - Used to store real-time device configuration to flash. CONFIG_SETTINGS=y @@ -55,11 +60,9 @@ CONFIG_FCB=y # FOTA CONFIG_FOTA_DOWNLOAD=y CONFIG_DFU_TARGET=y -CONFIG_DOWNLOAD_CLIENT=y -CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y -CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096 -CONFIG_DOWNLOAD_CLIENT_BUF_SIZE=2300 -CONFIG_DOWNLOAD_CLIENT_MAX_HOSTNAME_SIZE=128 +CONFIG_DOWNLOADER=y +CONFIG_DOWNLOADER_STACK_SIZE=4096 +CONFIG_DOWNLOADER_MAX_HOSTNAME_SIZE=128 # Flash - Used in FOTA, settings and storage for P-GPS. CONFIG_FLASH=y @@ -74,7 +77,6 @@ CONFIG_IMG_MANAGER=y CONFIG_MCUBOOT_IMG_MANAGER=y CONFIG_IMG_ERASE_PROGRESSIVELY=y CONFIG_SECURE_BOOT=y -CONFIG_BUILD_S1_VARIANT=y # Watchdog CONFIG_WATCHDOG_APPLICATION=y diff --git a/applications/asset_tracker_v2/sample.yaml b/applications/asset_tracker_v2/sample.yaml index 8063cb16654f..630436c06903 100644 --- a/applications/asset_tracker_v2/sample.yaml +++ b/applications/asset_tracker_v2/sample.yaml @@ -17,7 +17,10 @@ tests: - thingy91/nrf9160/ns - thingy91x/nrf9151/ns - native_sim - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.nrf_cloud-pgps: sysbuild: true build_only: true @@ -31,7 +34,10 @@ tests: - nrf9160dk/nrf9160/ns - thingy91/nrf9160/ns extra_args: EXTRA_CONF_FILE=overlay-pgps.conf - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.nrf_cloud-no-agnss: sysbuild: true build_only: true @@ -46,7 +52,10 @@ tests: - nrf9160dk/nrf9160/ns - thingy91/nrf9160/ns extra_args: CONFIG_NRF_CLOUD_AGNSS=n - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.aws: sysbuild: true build_only: true @@ -65,7 +74,10 @@ tests: extra_configs: - CONFIG_AWS_IOT_BROKER_HOST_NAME="example-hostname.aws.com" extra_args: EXTRA_CONF_FILE="overlay-aws.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.aws-pgps: sysbuild: true build_only: true @@ -82,7 +94,10 @@ tests: extra_configs: - CONFIG_AWS_IOT_BROKER_HOST_NAME="example-hostname.aws.com" extra_args: EXTRA_CONF_FILE="overlay-aws.conf;overlay-pgps.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.aws-all: sysbuild: true build_only: true @@ -100,7 +115,10 @@ tests: - CONFIG_MEMFAULT_NCS_PROJECT_KEY="PROJECTKEY" extra_args: > EXTRA_CONF_FILE="overlay-aws.conf;overlay-pgps.conf;overlay-debug.conf;overlay-memfault.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.azure: sysbuild: true build_only: true @@ -120,7 +138,10 @@ tests: - CONFIG_AZURE_IOT_HUB_DPS_HOSTNAME="global.azure-devices-provisioning.net" - CONFIG_AZURE_IOT_HUB_DPS_ID_SCOPE="IDSCOPE" extra_args: EXTRA_CONF_FILE="overlay-azure.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.debug: sysbuild: true build_only: true @@ -137,7 +158,10 @@ tests: - thingy91/nrf9160/ns - native_sim extra_args: EXTRA_CONF_FILE=overlay-debug.conf - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.debug-memfault: sysbuild: true build_only: true @@ -154,7 +178,10 @@ tests: extra_configs: - CONFIG_MEMFAULT_NCS_PROJECT_KEY="PROJECTKEY" extra_args: EXTRA_CONF_FILE="overlay-debug.conf;overlay-memfault.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.memfault: sysbuild: true build_only: true @@ -171,7 +198,10 @@ tests: extra_configs: - CONFIG_MEMFAULT_NCS_PROJECT_KEY="PROJECTKEY" extra_args: EXTRA_CONF_FILE=overlay-memfault.conf - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.low-power: sysbuild: true build_only: true @@ -186,7 +216,10 @@ tests: - nrf9160dk/nrf9160/ns - thingy91/nrf9160/ns extra_args: EXTRA_CONF_FILE=overlay-low-power.conf - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.carrier.nrf9160dk: sysbuild: true build_only: true @@ -196,16 +229,23 @@ tests: integration_platforms: - nrf9160dk/nrf9160/ns extra_args: EXTRA_CONF_FILE=overlay-carrier.conf - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.carrier.thingy91: sysbuild: true build_only: true build_on_all: true platform_allow: - thingy91/nrf9160/ns - extra_args: EXTRA_CONF_FILE=overlay-carrier.conf - SB_CONFIG_THINGY91_STATIC_PARTITIONS_LWM2M_CARRIER=y - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + extra_args: + - EXTRA_CONF_FILE=overlay-carrier.conf + - SB_CONFIG_THINGY91_STATIC_PARTITIONS_LWM2M_CARRIER=y + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.carrier.nrf9161dk: sysbuild: true build_only: true @@ -214,7 +254,10 @@ tests: integration_platforms: - nrf9161dk/nrf9161/ns extra_args: EXTRA_CONF_FILE=overlay-carrier.conf - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.carrier.nrf9151dk: sysbuild: true build_only: true @@ -223,7 +266,10 @@ tests: integration_platforms: - nrf9151dk/nrf9151/ns extra_args: EXTRA_CONF_FILE=overlay-carrier.conf - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.lwm2m.bootstrap-low_power: sysbuild: true build_only: true @@ -240,7 +286,10 @@ tests: extra_configs: - CONFIG_LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP=y extra_args: EXTRA_CONF_FILE="overlay-lwm2m.conf;overlay-low-power.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.lwm2m.debug: sysbuild: true build_only: true @@ -254,7 +303,10 @@ tests: - nrf9160dk/nrf9160/ns - thingy91/nrf9160/ns extra_args: EXTRA_CONF_FILE="overlay-lwm2m.conf;overlay-debug.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.lwm2m.debug-modem_trace: sysbuild: true build_only: true @@ -266,9 +318,12 @@ tests: integration_platforms: - nrf9160dk/nrf9160/ns extra_args: - EXTRA_CONF_FILE="overlay-lwm2m.conf;overlay-debug.conf" - asset_tracker_v2_SNIPPET="nrf91-modem-trace-uart;tfm-enable-share-uart" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + - EXTRA_CONF_FILE="overlay-lwm2m.conf;overlay-debug.conf" + - asset_tracker_v2_SNIPPET="nrf91-modem-trace-uart;tfm-enable-share-uart" + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.lwm2m.modem_trace: sysbuild: true build_only: true @@ -282,9 +337,12 @@ tests: - nrf9160dk/nrf9160/ns - thingy91/nrf9160/ns extra_args: - EXTRA_CONF_FILE="overlay-lwm2m.conf" - asset_tracker_v2_SNIPPET="nrf91-modem-trace-uart;tfm-enable-share-uart" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + - EXTRA_CONF_FILE="overlay-lwm2m.conf" + - asset_tracker_v2_SNIPPET="nrf91-modem-trace-uart;tfm-enable-share-uart" + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.lwm2m.memfault: sysbuild: true build_only: true @@ -303,7 +361,10 @@ tests: - CONFIG_MEMFAULT_NCS_PROJECT_KEY="PROJECTKEY" - CONFIG_LOG_MODE_MINIMAL=y extra_args: EXTRA_CONF_FILE="overlay-lwm2m.conf;overlay-memfault.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.memfault-low-power: sysbuild: true build_only: true @@ -322,34 +383,55 @@ tests: extra_configs: - CONFIG_MEMFAULT_NCS_PROJECT_KEY="PROJECTKEY" extra_args: EXTRA_CONF_FILE="overlay-low-power.conf;overlay-memfault.conf" - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.nrf7002ek_wifi.nrf9160dk: sysbuild: true build_only: true integration_platforms: - nrf9160dk/nrf9160/ns platform_allow: nrf9160dk/nrf9160/ns - extra_args: SHIELD=nrf7002ek_nrf7000 EXTRA_CONF_FILE=overlay-nrf7002ek-wifi-scan-only.conf - SB_CONFIG_WIFI_NRF70=y SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + extra_args: + - SHIELD=nrf7002ek_nrf7000 + - EXTRA_CONF_FILE=overlay-nrf7002ek-wifi-scan-only.conf + - SB_CONFIG_WIFI_NRF70=y + - SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.nrf7002ek_wifi.nrf9161dk: sysbuild: true build_only: true integration_platforms: - nrf9161dk/nrf9161/ns platform_allow: nrf9161dk/nrf9161/ns - extra_args: SHIELD=nrf7002ek_nrf7000 EXTRA_CONF_FILE=overlay-nrf7002ek-wifi-scan-only.conf - SB_CONFIG_WIFI_NRF70=y SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + extra_args: + - SHIELD=nrf7002ek_nrf7000 + - EXTRA_CONF_FILE=overlay-nrf7002ek-wifi-scan-only.conf + - SB_CONFIG_WIFI_NRF70=y + - SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.nrf7002ek_wifi.nrf9151dk: sysbuild: true build_only: true integration_platforms: - nrf9151dk/nrf9151/ns platform_allow: nrf9151dk/nrf9151/ns - extra_args: SHIELD=nrf7002ek_nrf7000 EXTRA_CONF_FILE=overlay-nrf7002ek-wifi-scan-only.conf - SB_CONFIG_WIFI_NRF70=y SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + extra_args: + - SHIELD=nrf7002ek_nrf7000 + - EXTRA_CONF_FILE=overlay-nrf7002ek-wifi-scan-only.conf + - SB_CONFIG_WIFI_NRF70=y + - SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 applications.asset_tracker_v2.nrf7002ek_wifi-debug: sysbuild: true build_only: true @@ -361,11 +443,15 @@ tests: - nrf9160dk/nrf9160/ns - nrf9161dk/nrf9161/ns - nrf9151dk/nrf9151/ns - extra_args: SHIELD=nrf7002ek_nrf7000 - EXTRA_CONF_FILE="overlay-nrf7002ek-wifi-scan-only.conf;overlay-debug.conf" - SB_CONFIG_WIFI_NRF70=y SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y - tags: ci_build sysbuild ci_applications_asset_tracker_v2 - + extra_args: + - SHIELD=nrf7002ek_nrf7000 + - EXTRA_CONF_FILE="overlay-nrf7002ek-wifi-scan-only.conf;overlay-debug.conf" + - SB_CONFIG_WIFI_NRF70=y + - SB_CONFIG_WIFI_NRF70_SCAN_ONLY=y + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 # Configuration which will be used by the positioning CI integration job to verify PRs applications.asset_tracker_v2.integration_config_positioning: sysbuild: true @@ -379,4 +465,7 @@ tests: - nrf9151dk/nrf9151/ns platform_allow: - nrf9151dk/nrf9151/ns - tags: ci_build sysbuild ci_applications_asset_tracker_v2 + tags: + - ci_build + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/asset_tracker_v2/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf b/applications/asset_tracker_v2/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf index 5558a0e48d46..7c2042de649c 100644 --- a/applications/asset_tracker_v2/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf +++ b/applications/asset_tracker_v2/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf @@ -17,3 +17,5 @@ CONFIG_BOOT_SERIAL_IMG_GRP_IMAGE_STATE=y CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y + +CONFIG_FW_INFO_FIRMWARE_VERSION=2 diff --git a/applications/asset_tracker_v2/sysbuild/mcuboot/boards/thingy91x_nrf9151.overlay b/applications/asset_tracker_v2/sysbuild/mcuboot/boards/thingy91x_nrf9151.overlay new file mode 100644 index 000000000000..7f2818c0d280 --- /dev/null +++ b/applications/asset_tracker_v2/sysbuild/mcuboot/boards/thingy91x_nrf9151.overlay @@ -0,0 +1,4 @@ +&uart0 { + status = "okay"; + current-speed = < 1000000 >; +}; diff --git a/applications/asset_tracker_v2/tests/debug_module/src/debug_module_test.c b/applications/asset_tracker_v2/tests/debug_module/src/debug_module_test.c index 9f9d66403dec..96af71a7de28 100644 --- a/applications/asset_tracker_v2/tests/debug_module/src/debug_module_test.c +++ b/applications/asset_tracker_v2/tests/debug_module/src/debug_module_test.c @@ -93,12 +93,12 @@ void setup_debug_module_in_init_state(void) __cmock_watchdog_register_handler_AddCallback(&latch_watchdog_callback); __cmock_module_start_Stub(&module_start_stub); -#if defined(CONFIG_BOARD_NATIVE_POSIX) +#if defined(CONFIG_BOARD_NATIVE_SIM) __cmock_app_event_manager_alloc_ExpectAnyArgsAndReturn(&debug_module_event_memory); __cmock__event_submit_ExpectAnyArgs(); __cmock_app_event_manager_alloc_ExpectAnyArgsAndReturn(&debug_module_event_memory); __cmock__event_submit_ExpectAnyArgs(); -#endif /* defined(CONFIG_BOARD_NATIVE_POSIX) */ +#endif /* defined(CONFIG_BOARD_NATIVE_SIM) */ TEST_ASSERT_EQUAL(0, DEBUG_MODULE_EVT_HANDLER( (struct app_event_header *)app_module_event)); diff --git a/applications/asset_tracker_v2/tests/debug_module/testcase.yaml b/applications/asset_tracker_v2/tests/debug_module/testcase.yaml index 99767a4558a8..684bcd426e9a 100644 --- a/applications/asset_tracker_v2/tests/debug_module/testcase.yaml +++ b/applications/asset_tracker_v2/tests/debug_module/testcase.yaml @@ -1,9 +1,15 @@ tests: asset_tracker_v2.debug_module_test.tester: sysbuild: true - platform_allow: native_sim qemu_cortex_m3 nrf9160dk/nrf9160/ns + platform_allow: + - native_sim + - qemu_cortex_m3 + - nrf9160dk/nrf9160/ns integration_platforms: - native_sim - qemu_cortex_m3 - nrf9160dk/nrf9160/ns - tags: debug_module sysbuild ci_applications_asset_tracker_v2 + tags: + - debug_module + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/asset_tracker_v2/tests/json_common/testcase.yaml b/applications/asset_tracker_v2/tests/json_common/testcase.yaml index 87b417977fcb..f4825fd487db 100644 --- a/applications/asset_tracker_v2/tests/json_common/testcase.yaml +++ b/applications/asset_tracker_v2/tests/json_common/testcase.yaml @@ -1,21 +1,33 @@ tests: applications.asset_tracker_v2.cloud.cloud_codec.json_common.aws: sysbuild: true - platform_allow: nrf9160dk/nrf9160 native_sim qemu_cortex_m3 + platform_allow: + - nrf9160dk/nrf9160 + - native_sim + - qemu_cortex_m3 integration_platforms: - nrf9160dk/nrf9160 - native_sim - qemu_cortex_m3 - tags: json_common_test-aws sysbuild ci_applications_asset_tracker_v2 + tags: + - json_common_test-aws + - sysbuild + - ci_applications_asset_tracker_v2 extra_configs: - CONFIG_CLOUD_CODEC_AWS_IOT=y applications.asset_tracker_v2.cloud.cloud_codec.json_common.azure: sysbuild: true - platform_allow: nrf9160dk/nrf9160 native_sim qemu_cortex_m3 + platform_allow: + - nrf9160dk/nrf9160 + - native_sim + - qemu_cortex_m3 integration_platforms: - nrf9160dk/nrf9160 - native_sim - qemu_cortex_m3 - tags: json_common_test-azure sysbuild ci_applications_asset_tracker_v2 + tags: + - json_common_test-azure + - sysbuild + - ci_applications_asset_tracker_v2 extra_configs: - CONFIG_CLOUD_CODEC_AZURE_IOT_HUB=y diff --git a/applications/asset_tracker_v2/tests/location_module/testcase.yaml b/applications/asset_tracker_v2/tests/location_module/testcase.yaml index 8674e04ed4fe..c350409985d7 100644 --- a/applications/asset_tracker_v2/tests/location_module/testcase.yaml +++ b/applications/asset_tracker_v2/tests/location_module/testcase.yaml @@ -1,9 +1,15 @@ tests: asset_tracker_v2.location_module_test.tester: sysbuild: true - platform_allow: native_sim qemu_cortex_m3 nrf9160dk/nrf9160/ns + platform_allow: + - native_sim + - qemu_cortex_m3 + - nrf9160dk/nrf9160/ns integration_platforms: - native_sim - qemu_cortex_m3 - nrf9160dk/nrf9160/ns - tags: location_module sysbuild ci_applications_asset_tracker_v2 + tags: + - location_module + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/asset_tracker_v2/tests/lwm2m_codec_helpers/testcase.yaml b/applications/asset_tracker_v2/tests/lwm2m_codec_helpers/testcase.yaml index 1883748973f3..33f90972c2f5 100644 --- a/applications/asset_tracker_v2/tests/lwm2m_codec_helpers/testcase.yaml +++ b/applications/asset_tracker_v2/tests/lwm2m_codec_helpers/testcase.yaml @@ -1,9 +1,15 @@ tests: asset_tracker_v2.lwm2m_codec: sysbuild: true - platform_allow: native_sim qemu_cortex_m3 nrf9160dk/nrf9160/ns + platform_allow: + - native_sim + - qemu_cortex_m3 + - nrf9160dk/nrf9160/ns integration_platforms: - native_sim - qemu_cortex_m3 - nrf9160dk/nrf9160/ns - tags: lwm2m_codec sysbuild ci_applications_asset_tracker_v2 + tags: + - lwm2m_codec + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/asset_tracker_v2/tests/lwm2m_integration/testcase.yaml b/applications/asset_tracker_v2/tests/lwm2m_integration/testcase.yaml index c8d7196d5dfd..265339f197f8 100644 --- a/applications/asset_tracker_v2/tests/lwm2m_integration/testcase.yaml +++ b/applications/asset_tracker_v2/tests/lwm2m_integration/testcase.yaml @@ -1,9 +1,15 @@ tests: asset_tracker_v2.lwm2m_integration: sysbuild: true - platform_allow: native_sim qemu_cortex_m3 nrf9160dk/nrf9160/ns + platform_allow: + - native_sim + - qemu_cortex_m3 + - nrf9160dk/nrf9160/ns integration_platforms: - native_sim - qemu_cortex_m3 - nrf9160dk/nrf9160/ns - tags: lwm2m_integration sysbuild ci_applications_asset_tracker_v2 + tags: + - lwm2m_integration + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/asset_tracker_v2/tests/nrf_cloud_codec/testcase.yaml b/applications/asset_tracker_v2/tests/nrf_cloud_codec/testcase.yaml index b090dd853b60..93159a95569d 100644 --- a/applications/asset_tracker_v2/tests/nrf_cloud_codec/testcase.yaml +++ b/applications/asset_tracker_v2/tests/nrf_cloud_codec/testcase.yaml @@ -1,9 +1,15 @@ tests: asset_tracker_v2.nrf_cloud_codec_test: sysbuild: true - platform_allow: native_sim qemu_cortex_m3 nrf9160dk/nrf9160/ns + platform_allow: + - native_sim + - qemu_cortex_m3 + - nrf9160dk/nrf9160/ns integration_platforms: - native_sim - qemu_cortex_m3 - nrf9160dk/nrf9160/ns - tags: nrf_cloud_codec sysbuild ci_applications_asset_tracker_v2 + tags: + - nrf_cloud_codec + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/asset_tracker_v2/tests/nrf_cloud_codec_mocked_cjson/testcase.yaml b/applications/asset_tracker_v2/tests/nrf_cloud_codec_mocked_cjson/testcase.yaml index a82e97d78a88..98bf15756c6e 100644 --- a/applications/asset_tracker_v2/tests/nrf_cloud_codec_mocked_cjson/testcase.yaml +++ b/applications/asset_tracker_v2/tests/nrf_cloud_codec_mocked_cjson/testcase.yaml @@ -1,8 +1,13 @@ tests: asset_tracker_v2.nrf_cloud_codec_mocked_cjson_test: sysbuild: true - platform_allow: native_sim qemu_cortex_m3 + platform_allow: + - native_sim + - qemu_cortex_m3 integration_platforms: - native_sim - qemu_cortex_m3 - tags: nrf_cloud_codec_mocked_cJSON sysbuild ci_applications_asset_tracker_v2 + tags: + - nrf_cloud_codec_mocked_cJSON + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/asset_tracker_v2/tests/ui_module/testcase.yaml b/applications/asset_tracker_v2/tests/ui_module/testcase.yaml index c6c353cba1a5..694ccc4bd8b6 100644 --- a/applications/asset_tracker_v2/tests/ui_module/testcase.yaml +++ b/applications/asset_tracker_v2/tests/ui_module/testcase.yaml @@ -1,8 +1,13 @@ tests: asset_tracker_v2.ui_module_test.tester: sysbuild: true - platform_allow: native_sim nrf9160dk/nrf9160/ns + platform_allow: + - native_sim + - nrf9160dk/nrf9160/ns integration_platforms: - native_sim - nrf9160dk/nrf9160/ns - tags: ui_module sysbuild ci_applications_asset_tracker_v2 + tags: + - ui_module + - sysbuild + - ci_applications_asset_tracker_v2 diff --git a/applications/connectivity_bridge/boards/thingy91_nrf52840.conf b/applications/connectivity_bridge/boards/thingy91_nrf52840.conf index 14db61ae52ea..4efb654d4314 100644 --- a/applications/connectivity_bridge/boards/thingy91_nrf52840.conf +++ b/applications/connectivity_bridge/boards/thingy91_nrf52840.conf @@ -28,3 +28,14 @@ CONFIG_USB_DEVICE_PRODUCT="Thingy:91 UART" CONFIG_USB_DEVICE_VID=0x1915 CONFIG_USB_DEVICE_PID=0x9100 + +CONFIG_USB_MAX_NUM_TRANSFERS=8 +CONFIG_BRIDGE_CMSIS_DAP_BULK_ENABLE=y + +CONFIG_DAP=y +CONFIG_DP_DRIVER=y + +CONFIG_CMSIS_DAP_DEVICE_VENDOR="Nordic Semiconductor ASA" +CONFIG_CMSIS_DAP_DEVICE_NAME="nrf91" + +CONFIG_USB_CDC_ACM_RINGBUF_SIZE=15360 diff --git a/applications/connectivity_bridge/boards/thingy91_nrf52840_readme.txt b/applications/connectivity_bridge/boards/thingy91_nrf52840_readme.txt index d2c11ca05be0..3fc3347fada8 100644 --- a/applications/connectivity_bridge/boards/thingy91_nrf52840_readme.txt +++ b/applications/connectivity_bridge/boards/thingy91_nrf52840_readme.txt @@ -8,6 +8,7 @@ https://nordicsemi.com/thingy91 This USB interface has the following functions: * Disk drive containing this file and others * COM ports for nRF91 debug, trace, and firmware update +* CMSIS-DAP 2.1 compliant debug probe interface for accessing the nRF91 SiP COM Ports ==================== diff --git a/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.conf b/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.conf index c59f3dc49430..d0a53d3492c1 100644 --- a/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.conf +++ b/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.conf @@ -34,3 +34,14 @@ CONFIG_REBOOT=y CONFIG_GPIO=y CONFIG_DK_LIBRARY=y + +# Bootloader firmware information +CONFIG_FW_INFO=y +CONFIG_SECURE_BOOT_STORAGE=y +CONFIG_DAP=y +CONFIG_DP_DRIVER=y + +CONFIG_CMSIS_DAP_DEVICE_VENDOR="Nordic Semiconductor ASA" +CONFIG_CMSIS_DAP_DEVICE_NAME="nrf91" + +CONFIG_BRIDGE_CMSIS_DAP_NORDIC_COMMANDS=y diff --git a/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.overlay b/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.overlay index 79263b90b033..5efee746b0d4 100644 --- a/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.overlay +++ b/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp.overlay @@ -12,7 +12,7 @@ clk-gpios = <&gpio0 25 GPIO_ACTIVE_HIGH>; dio-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>; - port-write-cycles = <2>; + port-write-cycles = <12>; }; zephyr,user { diff --git a/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp_readme.txt b/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp_readme.txt index a3fa4e224f03..e4458f6c9185 100644 --- a/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp_readme.txt +++ b/applications/connectivity_bridge/boards/thingy91x_nrf5340_cpuapp_readme.txt @@ -5,6 +5,7 @@ This USB interface has the following functions: * Disk drive containing this file and others * COM ports for nRF91 debug, trace, and firmware update +* CMSIS-DAP 2.1 compliant debug probe interface for accessing the nRF91 SiP COM Ports ==================== diff --git a/applications/connectivity_bridge/prj.conf b/applications/connectivity_bridge/prj.conf index 239733fa0ba5..bef0d620ddef 100644 --- a/applications/connectivity_bridge/prj.conf +++ b/applications/connectivity_bridge/prj.conf @@ -57,7 +57,6 @@ CONFIG_BRIDGE_LOG_POWER_DOWN_EVENT=n # UART CONFIG_SERIAL=y -CONFIG_UART_NRFX_UARTE_LEGACY_SHIM=n CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_UART_0_INTERRUPT_DRIVEN=n CONFIG_UART_1_INTERRUPT_DRIVEN=n diff --git a/applications/connectivity_bridge/sample.yaml b/applications/connectivity_bridge/sample.yaml index 3074559e7fc0..d885a169e5e9 100644 --- a/applications/connectivity_bridge/sample.yaml +++ b/applications/connectivity_bridge/sample.yaml @@ -11,4 +11,6 @@ tests: integration_platforms: - thingy91/nrf52840 - thingy91x/nrf5340/cpuapp - tags: ci_build sysbuild + tags: + - ci_build + - sysbuild diff --git a/applications/connectivity_bridge/src/events/peer_conn_event.c b/applications/connectivity_bridge/src/events/peer_conn_event.c index 8795aab3c934..a2b9b78b1200 100644 --- a/applications/connectivity_bridge/src/events/peer_conn_event.c +++ b/applications/connectivity_bridge/src/events/peer_conn_event.c @@ -25,11 +25,12 @@ static void log_peer_conn_event(const struct app_event_header *aeh) __ASSERT_NO_MSG(event->peer_id < PEER_ID_COUNT); APP_EVENT_MANAGER_LOG(aeh, - "%s:%s_%d baud:%d", + "%s:%s_%d changed: %d baud:%d", event->conn_state == PEER_STATE_CONNECTED ? "CONNECTED" : "DISCONNECTED", peer_name[event->peer_id], event->dev_idx, + event->conn_state_changed, event->baudrate); } diff --git a/applications/connectivity_bridge/src/events/peer_conn_event.h b/applications/connectivity_bridge/src/events/peer_conn_event.h index 61c427582b5b..b786d2afc510 100644 --- a/applications/connectivity_bridge/src/events/peer_conn_event.h +++ b/applications/connectivity_bridge/src/events/peer_conn_event.h @@ -50,6 +50,7 @@ struct peer_conn_event { uint8_t dev_idx; enum peer_conn_state conn_state; uint32_t baudrate; + bool conn_state_changed; }; APP_EVENT_TYPE_DECLARE(peer_conn_event); diff --git a/applications/connectivity_bridge/src/modules/CMakeLists.txt b/applications/connectivity_bridge/src/modules/CMakeLists.txt index 6a9e15dff7a0..8cd5d777a074 100644 --- a/applications/connectivity_bridge/src/modules/CMakeLists.txt +++ b/applications/connectivity_bridge/src/modules/CMakeLists.txt @@ -20,6 +20,7 @@ target_sources_ifdef(CONFIG_BRIDGE_MSC_ENABLE app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/fs_handler.c) target_sources_ifdef(CONFIG_BRIDGE_CMSIS_DAP_BULK_ENABLE - app PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/usb_bulk_commands.c - ${CMAKE_CURRENT_SOURCE_DIR}/usb_bulk_interface.c) + app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/usb_bulk_interface.c) + +target_sources_ifdef(CONFIG_BRIDGE_CMSIS_DAP_NORDIC_COMMANDS + app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/usb_bulk_commands.c) diff --git a/applications/connectivity_bridge/src/modules/Kconfig b/applications/connectivity_bridge/src/modules/Kconfig index c4075c277115..bb0c7eccb529 100644 --- a/applications/connectivity_bridge/src/modules/Kconfig +++ b/applications/connectivity_bridge/src/modules/Kconfig @@ -29,6 +29,13 @@ config BRIDGE_CMSIS_DAP_BULK_ENABLE depends on USB_DEVICE_STACK select USB_DEVICE_BOS +config BRIDGE_CMSIS_DAP_NORDIC_COMMANDS + bool "Enable Nordic specific commands" + depends on BRIDGE_CMSIS_DAP_BULK_ENABLE + help + This option enables Nordic specific commands for CMSIS-DAP Bulk. + Currently, these are only relevant for the Thingy:91 X board. + if BRIDGE_CMSIS_DAP_BULK_ENABLE module = BRIDGE_BULK @@ -98,6 +105,7 @@ config BRIDGE_BUF_SIZE config BRIDGE_UART_BUF_COUNT int "UART buffer block count" + default 16 if BOARD_THINGY91X_NRF5340_CPUAPP default 3 range 3 255 help diff --git a/applications/connectivity_bridge/src/modules/ble_handler.c b/applications/connectivity_bridge/src/modules/ble_handler.c index e6e48f2331c6..6359561519d4 100644 --- a/applications/connectivity_bridge/src/modules/ble_handler.c +++ b/applications/connectivity_bridge/src/modules/ble_handler.c @@ -104,6 +104,7 @@ static void connected(struct bt_conn *conn, uint8_t err) event->dev_idx = 0; event->baudrate = 0; /* Don't care */ event->conn_state = PEER_STATE_CONNECTED; + event->conn_state_changed = true; APP_EVENT_SUBMIT(event); } @@ -125,6 +126,7 @@ static void disconnected(struct bt_conn *conn, uint8_t reason) event->dev_idx = 0; event->baudrate = 0; /* Don't care */ event->conn_state = PEER_STATE_DISCONNECTED; + event->conn_state_changed = true; APP_EVENT_SUBMIT(event); } diff --git a/applications/connectivity_bridge/src/modules/uart_handler.c b/applications/connectivity_bridge/src/modules/uart_handler.c index e371eec30965..391eb6c14628 100644 --- a/applications/connectivity_bridge/src/modules/uart_handler.c +++ b/applications/connectivity_bridge/src/modules/uart_handler.c @@ -412,6 +412,11 @@ static bool app_event_handler(const struct app_event_header *aeh) return false; } + if (!event->conn_state_changed) { + set_uart_baudrate(event->dev_idx, event->baudrate); + return false; + } + prev_count = subscriber_count[event->dev_idx]; if (event->conn_state == PEER_STATE_CONNECTED) { diff --git a/applications/connectivity_bridge/src/modules/usb_bulk_commands.c b/applications/connectivity_bridge/src/modules/usb_bulk_commands.c index 55367dc403ba..74091c2cd0e4 100644 --- a/applications/connectivity_bridge/src/modules/usb_bulk_commands.c +++ b/applications/connectivity_bridge/src/modules/usb_bulk_commands.c @@ -8,6 +8,11 @@ #include #include #include +#include +#include +#include + +#include #include LOG_MODULE_REGISTER(bulk_commands, CONFIG_BRIDGE_BULK_LOG_LEVEL); @@ -16,10 +21,12 @@ LOG_MODULE_REGISTER(bulk_commands, CONFIG_BRIDGE_BULK_LOG_LEVEL); #define ID_DAP_VENDOR15 (0x80 + 15) #define ID_DAP_VENDOR16 (0x80 + 16) #define ID_DAP_VENDOR17 (0x80 + 17) +#define ID_DAP_VENDOR18 (0x80 + 18) #define ID_DAP_VENDOR_NRF53_BOOTLOADER ID_DAP_VENDOR14 #define ID_DAP_VENDOR_NRF91_BOOTLOADER ID_DAP_VENDOR15 #define ID_DAP_VENDOR_NRF53_RESET ID_DAP_VENDOR16 #define ID_DAP_VENDOR_NRF91_RESET ID_DAP_VENDOR17 +#define ID_DAP_VENDOR_NRF53_VERSION ID_DAP_VENDOR18 #define DAP_COMMAND_SUCCESS 0x00 #define DAP_COMMAND_FAILED 0xFF @@ -27,6 +34,8 @@ LOG_MODULE_REGISTER(bulk_commands, CONFIG_BRIDGE_BULK_LOG_LEVEL); #define NRF91_RESET_DURATION K_MSEC(100) #define NRF91_BUTTON1_DURATION K_MSEC(1000) +#define USB_BULK_PACKET_SIZE 64 + static const struct gpio_dt_spec reset_pin = GPIO_DT_SPEC_GET_OR(DT_PATH(zephyr_user), reset_gpios, {}); static const struct gpio_dt_spec button1_pin = @@ -93,12 +102,17 @@ static void nrf53_reset_work_handler(struct k_work *work) /* This is a placeholder implementation until proper CMSIS-DAP support is available. * Only custom vendor commands are supported. */ -size_t dap_execute_cmd(uint8_t *in, uint8_t *out) +size_t dap_execute_vendor_cmd(uint8_t *in, uint8_t *out) { LOG_DBG("got command 0x%02X", in[0]); - int ret; + + if (in[0] < ID_DAP_VENDOR0) { + return dap_execute_cmd(in, out); + } #if IS_ENABLED(CONFIG_RETENTION_BOOT_MODE) + int ret; + if (in[0] == ID_DAP_VENDOR_NRF53_BOOTLOADER) { ret = bootmode_set(BOOT_MODE_TYPE_BOOTLOADER); if (ret) { @@ -125,6 +139,24 @@ size_t dap_execute_cmd(uint8_t *in, uint8_t *out) } goto success; } + if (in[0] == ID_DAP_VENDOR_NRF53_VERSION) { + const struct fw_info *s0_info = fw_info_find(s0_address_read()); + const struct fw_info *s1_info = fw_info_find(s1_address_read()); + const size_t VERSION_STRING_LEN = USB_BULK_PACKET_SIZE - 2; + + __ASSERT_NO_MSG(s0_info != NULL); + __ASSERT_NO_MSG(s1_info != NULL); + int len = snprintf(out + 2, VERSION_STRING_LEN, + "S0: %u, S1: %u, app: " NCS_COMMIT_STRING, + s0_info->version, s1_info->version); + if (len < 0 || len >= VERSION_STRING_LEN) { + LOG_ERR("Failed to format version string"); + goto error; + } + out[0] = in[0]; + out[1] = len; + return len + 2; + } error: /* default reply: command failed */ diff --git a/applications/connectivity_bridge/src/modules/usb_bulk_interface.c b/applications/connectivity_bridge/src/modules/usb_bulk_interface.c index 650561e224c0..64a395f91368 100644 --- a/applications/connectivity_bridge/src/modules/usb_bulk_interface.c +++ b/applications/connectivity_bridge/src/modules/usb_bulk_interface.c @@ -12,6 +12,7 @@ #include #include #include +#include #define MODULE bulk_interface #include "module_state_event.h" @@ -23,6 +24,8 @@ LOG_MODULE_REGISTER(MODULE, CONFIG_BRIDGE_BULK_LOG_LEVEL); /* needs to be included after defining logging config */ #include "usb_bulk_msosv2.h" +#include + #define USB_BULK_PACKET_SIZE 64 #define USB_BULK_PACKET_COUNT 4 @@ -41,7 +44,7 @@ static K_FIFO_DEFINE(dap_rx_queue); NET_BUF_POOL_FIXED_DEFINE(dapusb_rx_pool, USB_BULK_PACKET_COUNT, USB_BULK_PACKET_SIZE, 0, NULL); /* Execute CMSIS-DAP command and write reply into output buffer */ -size_t dap_execute_cmd(uint8_t *in, uint8_t *out); +size_t dap_execute_vendor_cmd(uint8_t *in, uint8_t *out); /* string descriptor for the interface */ #define DAP_IFACE_STR_DESC "CMSIS-DAP v2" @@ -171,8 +174,11 @@ static int dap_usb_process(void) static uint8_t tx_buf[USB_BULK_PACKET_SIZE]; struct net_buf *buf = k_fifo_get(&dap_rx_queue, K_FOREVER); uint8_t ep = dapusb_config.endpoint[DAP_USB_EP_IN_IDX].ep_addr; - +#if defined(CONFIG_BRIDGE_CMSIS_DAP_NORDIC_COMMANDS) + len = dap_execute_vendor_cmd(buf->data, tx_buf); +#else len = dap_execute_cmd(buf->data, tx_buf); +#endif /* defined(CONFIG_BRIDGE_CMSIS_DAP_NORDIC_COMMANDS) */ LOG_DBG("response length %u, starting with [0x%02X, 0x%02X]", len, tx_buf[0], tx_buf[1]); net_buf_unref(buf); @@ -196,6 +202,8 @@ static int dap_usb_thread_fn(const struct device *dev) return 0; } +const struct device *const swd_dev = DEVICE_DT_GET_ONE(zephyr_swdp_gpio); + K_THREAD_DEFINE(dap_usb_thread, CONFIG_BULK_USB_THREAD_STACK_SIZE, dap_usb_thread_fn, NULL, NULL, NULL, 5, 0, 0); @@ -208,11 +216,21 @@ static bool app_event_handler(const struct app_event_header *aeh) /* tell the rest of the system that we are busy. */ module_set_state(MODULE_STATE_READY); - /* Add MS OS 2.0 BOS descriptor to BOS structure */ + /* add MS OS 2.0 BOS descriptor to BOS structure. */ usb_bos_register_cap((void *)&bos_cap_msosv2); - /* Point interface index to string descriptor */ + /* point interface index to string descriptor. */ iface_string_desc_init(&dapusb_config); + if (!device_is_ready(swd_dev)) { + LOG_ERR("SWD device is not ready"); + } + + int ret = dap_setup(swd_dev); + + if (ret) { + LOG_ERR("Failed to initialize DAP controller, %d", ret); + } + /* tell the usb_cdc_handler we are done. */ module_set_state(MODULE_STATE_STANDBY); } diff --git a/applications/connectivity_bridge/src/modules/usb_cdc_handler.c b/applications/connectivity_bridge/src/modules/usb_cdc_handler.c index ee03aa1724e7..d9aeee173aaa 100644 --- a/applications/connectivity_bridge/src/modules/usb_cdc_handler.c +++ b/applications/connectivity_bridge/src/modules/usb_cdc_handler.c @@ -38,6 +38,7 @@ static K_WORK_DEFINE(cdc_dtr_work, cdc_dtr_work_handler); K_MEM_SLAB_DEFINE(cdc_rx_slab, USB_CDC_RX_BLOCK_SIZE, USB_CDC_RX_BLOCK_COUNT, USB_CDC_SLAB_ALIGNMENT); static uint32_t cdc_ready[CDC_DEVICE_COUNT]; +static uint32_t cdc_baudrate[CDC_DEVICE_COUNT]; static uint8_t overflow_buf[64]; @@ -54,6 +55,7 @@ static void poll_dtr(void) for (int i = 0; i < CDC_DEVICE_COUNT; ++i) { int err; uint32_t cdc_val; + uint32_t baudrate; err = uart_line_ctrl_get(devices[i], UART_LINE_CTRL_DTR, @@ -63,27 +65,27 @@ static void poll_dtr(void) continue; } - if (cdc_val != cdc_ready[i]) { - uint32_t baudrate; - - err = uart_line_ctrl_get(devices[i], - UART_LINE_CTRL_BAUD_RATE, - &baudrate); - if (err) { - LOG_WRN("uart_line_ctrl_get(BAUD_RATE): %d", err); - continue; - } + err = uart_line_ctrl_get(devices[i], + UART_LINE_CTRL_BAUD_RATE, + &baudrate); + if (err) { + LOG_WRN("uart_line_ctrl_get(BAUD_RATE): %d", err); + continue; + } + if (cdc_val != cdc_ready[i] || baudrate != cdc_baudrate[i]) { struct peer_conn_event *event = new_peer_conn_event(); event->peer_id = PEER_ID_USB; event->dev_idx = i; event->baudrate = baudrate; + event->conn_state_changed = cdc_val != cdc_ready[i]; event->conn_state = cdc_val == 0 ? PEER_STATE_DISCONNECTED : PEER_STATE_CONNECTED; APP_EVENT_SUBMIT(event); cdc_ready[i] = cdc_val; + cdc_baudrate[i] = baudrate; } } } @@ -104,10 +106,7 @@ static void cdc_uart_interrupt_handler(const struct device *dev, void *user_data int err; int data_length; - if (cdc_ready[dev_idx] == 0) { - /* Peer started sending data before timed COM port state poll */ - poll_dtr(); - } + poll_dtr(); err = k_mem_slab_alloc(&cdc_rx_slab, &rx_buf, K_NO_WAIT); if (err) { diff --git a/applications/connectivity_bridge/sysbuild/mcuboot/boards/thingy91x_nrf5340_cpuapp.conf b/applications/connectivity_bridge/sysbuild/mcuboot/boards/thingy91x_nrf5340_cpuapp.conf index 37c7e95b15ca..b2d427d17a8b 100644 --- a/applications/connectivity_bridge/sysbuild/mcuboot/boards/thingy91x_nrf5340_cpuapp.conf +++ b/applications/connectivity_bridge/sysbuild/mcuboot/boards/thingy91x_nrf5340_cpuapp.conf @@ -58,3 +58,7 @@ CONFIG_BOOT_SERIAL_IMG_GRP_IMAGE_STATE=y # Skip checks on the secondary image to make it possible to update MCUBoot on S1/S0 CONFIG_MCUBOOT_VERIFY_IMG_ADDRESS=n + +CONFIG_BOOT_SERIAL_NO_APPLICATION=y + +CONFIG_FW_INFO_FIRMWARE_VERSION=2 diff --git a/applications/ipc_radio/Kconfig b/applications/ipc_radio/Kconfig index 82550a967d9c..8abe682d2e45 100644 --- a/applications/ipc_radio/Kconfig +++ b/applications/ipc_radio/Kconfig @@ -40,6 +40,10 @@ config IPC_RADIO_BT_RPC endchoice # IPC_RADIO_BT_SER +config SETTINGS + imply ZMS if SOC_FLASH_NRF_MRAM + imply NVS if !SOC_FLASH_NRF_MRAM + config BT_MAX_CONN default 4 if IPC_RADIO_802154 default 16 if !IPC_RADIO_802154 diff --git a/applications/ipc_radio/README.rst b/applications/ipc_radio/README.rst index 6c78b02cf072..3e13943a27e7 100644 --- a/applications/ipc_radio/README.rst +++ b/applications/ipc_radio/README.rst @@ -122,6 +122,9 @@ For instructions on how to enable a specific configuration overlay file, see :re .. note:: You cannot use :ref:`ble_rpc` together with the HCI :ref:`bluetooth_controller`. +.. note:: + |54H_engb_2_8| + Dependencies ************ diff --git a/applications/ipc_radio/overlay-bt_rpc.conf b/applications/ipc_radio/overlay-bt_rpc.conf index 6be2cd48f1fd..983e191933ab 100644 --- a/applications/ipc_radio/overlay-bt_rpc.conf +++ b/applications/ipc_radio/overlay-bt_rpc.conf @@ -21,7 +21,6 @@ CONFIG_BT_SETTINGS=y CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y -CONFIG_NVS=y CONFIG_SETTINGS=y CONFIG_IPC_RADIO_BT=y diff --git a/applications/ipc_radio/sample.yaml b/applications/ipc_radio/sample.yaml index 3dad3e45b26b..97f94e3076d4 100644 --- a/applications/ipc_radio/sample.yaml +++ b/applications/ipc_radio/sample.yaml @@ -5,8 +5,14 @@ tests: applications.ipc_radio.hci: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: bluetooth ci_build sysbuild ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - bluetooth + - ci_build + - sysbuild + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet @@ -14,8 +20,13 @@ tests: applications.ipc_radio.hci.sysbuild: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: bluetooth ci_build ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - bluetooth + - ci_build + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet @@ -24,15 +35,26 @@ tests: sysbuild: true build_only: true platform_allow: nrf54h20dk/nrf54h20/cpurad - tags: bluetooth ci_build ci_applications_ipc_radio + tags: + - bluetooth + - ci_build + - ci_applications_ipc_radio integration_platforms: - nrf54h20dk/nrf54h20/cpurad - extra_args: EXTRA_CONF_FILE=overlay-bt_hci_ipc.conf SB_CONFIG_PARTITION_MANAGER=n + extra_args: + - EXTRA_CONF_FILE=overlay-bt_hci_ipc.conf + - SB_CONFIG_PARTITION_MANAGER=n applications.ipc_radio.rpc: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: bluetooth ci_build sysbuild ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - bluetooth + - ci_build + - sysbuild + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet @@ -40,8 +62,13 @@ tests: applications.ipc_radio.rpc.sysbuild: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: bluetooth ci_build ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - bluetooth + - ci_build + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet @@ -50,15 +77,25 @@ tests: sysbuild: true build_only: true platform_allow: nrf54h20dk/nrf54h20/cpurad - tags: bluetooth ci_build ci_applications_ipc_radio + tags: + - bluetooth + - ci_build + - ci_applications_ipc_radio integration_platforms: - nrf54h20dk/nrf54h20/cpurad - extra_args: EXTRA_CONF_FILE=overlay-bt_rpc.conf SB_CONFIG_PARTITION_MANAGER=n + extra_args: + - EXTRA_CONF_FILE=overlay-bt_rpc.conf + - SB_CONFIG_PARTITION_MANAGER=n applications.ipc_radio.802154: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: ci_build sysbuild ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - ci_build + - sysbuild + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet @@ -66,8 +103,12 @@ tests: applications.ipc_radio.802154.sysbuild: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: ci_build ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - ci_build + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet @@ -75,8 +116,14 @@ tests: applications.ipc_radio.hci802154: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: bluetooth ci_build sysbuild ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - bluetooth + - ci_build + - sysbuild + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet @@ -84,8 +131,13 @@ tests: applications.ipc_radio.hci802154.sysbuild: sysbuild: true build_only: true - platform_allow: nrf5340dk/nrf5340/cpunet thingy53/nrf5340/cpunet - tags: bluetooth ci_build ci_applications_ipc_radio + platform_allow: + - nrf5340dk/nrf5340/cpunet + - thingy53/nrf5340/cpunet + tags: + - bluetooth + - ci_build + - ci_applications_ipc_radio integration_platforms: - nrf5340dk/nrf5340/cpunet - thingy53/nrf5340/cpunet diff --git a/applications/machine_learning/CMakeLists.txt b/applications/machine_learning/CMakeLists.txt index ff90feb8c4a0..676ae206bb86 100644 --- a/applications/machine_learning/CMakeLists.txt +++ b/applications/machine_learning/CMakeLists.txt @@ -39,7 +39,3 @@ add_subdirectory(common/src/modules) add_subdirectory(src/events) add_subdirectory(src/modules) add_subdirectory(src/util) - -if(CONFIG_BT_HCI_IPC AND NOT SYSBUILD) - assert_exists(hci_ipc_CONF_FILE) -endif() diff --git a/applications/machine_learning/README.rst b/applications/machine_learning/README.rst index ce87618696e8..28793df77724 100644 --- a/applications/machine_learning/README.rst +++ b/applications/machine_learning/README.rst @@ -13,5 +13,5 @@ See the subpages for detailed documentation on the application and its modules: app_desc config_options - intenal_module + internal_module api diff --git a/applications/machine_learning/VERSION b/applications/machine_learning/VERSION index b5c2c35ecc1a..9361645541a7 100644 --- a/applications/machine_learning/VERSION +++ b/applications/machine_learning/VERSION @@ -1,5 +1,5 @@ VERSION_MAJOR = 2 -VERSION_MINOR = 7 +VERSION_MINOR = 8 PATCHLEVEL = 99 VERSION_TWEAK = 0 EXTRAVERSION = diff --git a/applications/machine_learning/app_desc.rst b/applications/machine_learning/app_desc.rst index 30512b2bda96..81edbae54dd3 100644 --- a/applications/machine_learning/app_desc.rst +++ b/applications/machine_learning/app_desc.rst @@ -34,6 +34,9 @@ By default, the following sensors are used by the application: * nRF5340 DK - Simulated sensor (:ref:`sensor_sim`). The simulated sensor generates predefined waves as acceleration. This development kit does not have a built-in accelerometer. +* nRF54L15 DK - Simulated sensor (:ref:`sensor_sim`). + The simulated sensor generates predefined waves as acceleration. + This development kit does not have a built-in accelerometer. * nRF54H20 DK - The development kit does not have a built-in accelerometer. However, it supports the following configurations: @@ -52,6 +55,7 @@ By default, the following transports are used: * Thingy:53 uses :ref:`nus_service_readme`. * The nRF52840 DK uses :ref:`zephyr:uart_api`. * The nRF5340 DK uses :ref:`zephyr:uart_api`. +* The nRF54L15 DK uses :ref:`zephyr:uart_api`. * The nRF54H20 DK uses :ref:`nus_service_readme`. Machine learning model @@ -72,7 +76,7 @@ By default, the application uses pre-trained machine learning models deployed in * ``tap`` - The device is tapped while placed on a flat surface. Unknown gestures, such as shaking the device, are recognized as anomalies. -* Both the nRF52840 DK and the nRF5340 DK use the `nRF Connect SDK simulated sensor machine learning model`_. +* The nRF52840, nRF5340 and nRF54L15 DKs use the `nRF Connect SDK simulated sensor machine learning model`_. The model uses simulated sensor data to recognize the following simulated wave types: * ``sine`` @@ -232,6 +236,11 @@ By default, the following buttons are used by the application: * **Button 1** switches between data forwarding and running a machine learning model. * **Button 3** changes the signal generated by the simulated sensor. + .. group-tab:: nRF54L15 DK + + * **Button 0** switches between data forwarding and running a machine learning model. + * **Button 2** changes the signal generated by the simulated sensor. + .. group-tab:: nRF54H20 DK **Button 0** button switches between data forwarding and running the machine learning model. @@ -266,30 +275,51 @@ By default, the application uses the following LED effects: The LED effect is overridden on the next successful detection. * If the device forwards data, the LED color turns red and uses the following blinking patterns: - * LED blinks slowly if it is not connected. - * LED blinks with an average frequency if it is connected but is not actively forwarding data. - * LED blinks rapidly if it is connected and is actively forwarding data. + * Blinks slowly if it is not connected. + * Blinks with an average frequency if it is connected but is not actively forwarding data. + * Blinks rapidly if it is connected and is actively forwarding data. .. group-tab:: nRF52840 and nRF5340 DKs Both nRF5340 DK and nRF52840 DK use monochromatic LEDs to display the application state. - The **LED1** displays the application state, and the **LED2** displays the signal generated by the simulated sensor. + The **LED1** displays the application state and the **LED2** displays the signal generated by the simulated sensor. * If the device is returning the machine learning prediction results, the **LED1** blinks for a predefined number of times and then turns off for a period of time. Then the sequence is repeated. The machine learning result is represented by the number of blinks: - * ``sine`` - 1 blink - * ``triangle`` - 2 blinks - * ``square`` - 3 blinks - * ``idle`` - 4 blinks + * ``sine`` - one blink + * ``triangle`` - two blinks + * ``square`` - three blinks + * ``idle`` - four blinks If the machine learning model is running but has not detected anything yet or has detected an anomaly, the **LED1** is breathing. * If the device forwards data, the **LED1** has the following blinking patterns: - * LED blinks slowly if it is not connected. - * LED blinks with an average frequency if it is connected but is not actively forwarding data. - * LED blinks rapidly if it is connected and is actively forwarding data. + * Blinks slowly if it is not connected. + * Blinks with an average frequency if it is connected but is not actively forwarding data. + * Blinks rapidly if it is connected and is actively forwarding data. + + .. group-tab:: nRF54L15 DK + + The nRF54L15 DK uses monochromatic LEDs to display the application state. + The **LED1** displays the application state and the **LED3** displays the signal generated by the simulated sensor. + + * If the device is returning the machine learning prediction results, the **LED1** blinks for a predefined number of times and then turns off for a period of time. + Then the sequence is repeated. + The machine learning result is represented by the number of blinks: + + * ``sine`` - one blink + * ``triangle`` - two blinks + * ``square`` - three blinks + * ``idle`` - four blinks + + If the machine learning model is running but has not detected anything yet or has detected an anomaly, the **LED1** is breathing. + * If the device forwards data, the **LED1** has the following blinking patterns: + + * Blinks slowly if it is not connected. + * Blinks with an average frequency if it is connected but is not actively forwarding data. + * Blinks rapidly if it is connected and is actively forwarding data. .. group-tab:: nRF54H20 DK nRF54H20 DK uses monochromatic LEDs to display the application state. @@ -306,9 +336,9 @@ By default, the application uses the following LED effects: If the machine learning model is running, but it has not detected anything yet or the ``idle`` state is detected, **LED0**, **LED1**, and **LED2**, keep blinking. * If the device forwards data, **LED0**, **LED1** and **LED2** has the following blinking patterns: - * LED blinks slowly if it is not connected. - * LED blinks with an average frequency if it is connected, but is not actively forwarding data. - * LED blinks rapidly if it is connected and is actively forwarding data. + * Blinks slowly if it is not connected. + * Blinks with an average frequency if it is connected, but is not actively forwarding data. + * Blinks rapidly if it is connected and is actively forwarding data. .. _nrf_machine_learning_app_configuration: @@ -349,15 +379,16 @@ For more information, see the :ref:`nrf_machine_learning_configuration` page. Multi-image builds ------------------ -The Thingy:53 and the nRF5340 DK use multi-image build with the following child images: +The Thingy:53, and the nRF5340 and nRF54H20 DKs use :ref:`zephyr:sysbuild` to perform multi-image build with the following additional images: * MCUboot bootloader -* Bluetooth HCI RPMsg +* IPC Radio -You can define the application-specific configuration for the mentioned child images in the board-specific directory in the :file:`applications/machine_learning/configuration/` directory. -The Kconfig configuration file should be located in subdirectory :file:`child_image/` and its name should match the application Kconfig file name, and it should contain the build type if necessary. -For example, the :file:`applications/machine_learning/configuration/thingy53_nrf5340_cpuapp/child_image/hci_ipc/prj.conf` file defines configuration of Bluetooth HCI RPMsg for the ``debug`` build type on ``thingy53_nrf5340_cpuapp`` board, while the :file:`applications/machine_learning/configuration/thingy53_nrf5340_cpuapp/child_image/hci_ipc/prj_release.conf` file defines configuration of Bluetooth HCI RPMsg for the ``release`` build type. -See :ref:`ug_multi_image` for detailed information about multi-image builds and child image configuration. +You can define the application-specific configuration for the mentioned images in the board-specific directory in the :file:`applications/machine_learning/sysbuild/` directory. +The Kconfig configuration file should be located in a subdirectory :file:`sysbuild//boards/` and its name should match the application Kconfig file name, and it should contain the build type if necessary. +For example, the :file:`applications/machine_learning/sysbuild/ipc_radio/boards/thingy53_nrf5340_cpunet.conf` file defines the configuration of IPC Radio for the ``debug`` build type for ``thingy53_nrf5340_cpunet`` board target, while the :file:`applications/machine_learning/sysbuild/ipc_radio/boards/thingy53_nrf5340_cpunet_release.conf` file defines the configuration of IPC Radio for the ``release`` build type. +If you want to build the application for the nRF54H20 DK in the dual-core mode, the configuration files for the :term:`Peripheral Processor (PPR) ` image are located in the :file:`applications/machine_learning/remote` folder. +See :ref:`zephyr:sysbuild` for detailed information about using sysbuild for building multiple images with desired configurations. .. _nrf_machine_learning_app_requirements_build_types: .. _nrf_machine_learning_app_configuration_build_types: @@ -418,6 +449,8 @@ nRF54H20 DK .. note:: This application does not work in the default configuration for the nRF54H20 DK without additional parameters like shields or snippets. + |54H_engb_2_8| + To build the application for the nRF54H20 DK with the sensor sampling done by the Application core (single-core application), run the following command: .. code-block:: console @@ -507,7 +540,7 @@ After programming the application, perform the following steps to test the nRF M After a brief delay, the Bluetooth connection between the sample and the Thingy is established. The Thingy forwards the sensor readouts over NUS. The LED on the Thingy starts to blink rapidly. -#. Connect to the sample with a terminal emulator (for example, `nRF Connect Serial Terminal`_). +#. Connect to the sample with a terminal emulator (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings. #. Observe the sensor readouts represented as comma-separated values. Every line represents a single sensor readout. @@ -525,18 +558,45 @@ After programming the application, perform the following steps to test the nRF M 1. Turn on the development kit. The application starts in a mode that runs the machine learning model. - Initially, **LED2** displays the LED effect representing ``sine`` wave (1 blink), and **LED1** is breathing, because the signal was not yet recognized by the machine learning model. + Initially, **LED2** displays the LED effect representing ``sine`` wave (one blink), and **LED1** is breathing, because the signal was not yet recognized by the machine learning model. After a brief delay, the machine learning model recognizes the simulated signal. **LED1** and **LED2** display the same LED effect. #. Press **Button 3** to change the generated acceleration signal. Right after the signal change, the effects displayed by LEDs are different. - After a brief delay, the machine learning model recognizes the ``triangle`` wave, and the same effect (2 blinks) is displayed by both LEDs. + After a brief delay, the machine learning model recognizes the ``triangle`` wave, and the same effect (two blinks) is displayed by both LEDs. #. Press **Button 3** to again change the generated acceleration signal. - The ``square`` wave (3 blinks) is displayed only by the **LED2**. + The ``square`` wave (three blinks) is displayed only by the **LED2**. This signal is marked as an anomaly by the machine learning model, and **LED1** starts breathing. #. Press and hold **Button 1** for more than five seconds to switch to the data forwarding mode. After the mode is switched, **LED1** starts to blink rapidly. -#. Connect to the development kit with a terminal emulator (for example, `nRF Connect Serial Terminal`_). +#. Connect to the development kit with a terminal emulator (for example, the `Serial Terminal app`_). + See :ref:`test_and_optimize` for the required settings. +#. Observe the sensor readouts represented as comma-separated values. + Every line represents a single sensor readout. +#. Turn off the terminal emulator to ensure that only one program has access to the data on UART. + +Optionally, you can also connect to the device using `Edge Impulse's data forwarder`_ and forward data to `Edge Impulse studio`_ (after logging in). +See `Forwarding data to Edge Impulse studio`_ for details. + +Testing with the nRF54L15 DK +--------------------------------------- + +After programming the application, perform the following steps to test the nRF Machine Learning application on the DK: + +1. Turn on the development kit. + The application starts in a mode that runs the machine learning model. + Initially, **LED3** displays the LED effect representing ``sine`` wave (one blink), and **LED1** is breathing, because the signal was not yet recognized by the machine learning model. + After a brief delay, the machine learning model recognizes the simulated signal. + **LED1** and **LED3** display the same LED effect. +#. Press **Button 2** to change the generated acceleration signal. + Right after the signal change, the effects displayed by LEDs are different. + After a brief delay, the machine learning model recognizes the ``triangle`` wave, and the same effect (two blinks) is displayed by both LEDs. +#. Press **Button 2** to again change the generated acceleration signal. + The ``square`` wave (three blinks) is displayed only by the **LED3**. + This signal is marked as an anomaly by the machine learning model, and **LED1** starts breathing. +#. Press and hold **Button 0** for more than five seconds to switch to the data forwarding mode. + After the mode is switched, **LED1** starts to blink rapidly. +#. Connect to the development kit with a terminal emulator (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings. #. Observe the sensor readouts represented as comma-separated values. Every line represents a single sensor readout. @@ -600,7 +660,7 @@ Forwarding data. a. Open the `nRF Connect for Mobile`_ application and connect to the device again. #. Bond with the device from the `nRF Connect for Mobile`_ application on your smartphone or tablet. - #. Find **Nordic UART Service** and enable notification of its "TX Charcteristic". + #. Find **Nordic UART Service** and enable notification of its "TX Characteristic". #. Observe the sensor readouts represented as comma-separated values. Every new value represents a single sensor readout. diff --git a/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay b/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay index 85a4e6515f7d..7fd4fbdecb47 100644 --- a/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay +++ b/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay @@ -68,9 +68,7 @@ ipc1: &cpuapp_cpuppr_ipc { cpuapp_rx_partitions: cpuapp-rx-partitions { compatible = "nordic,owned-partitions", "fixed-partitions"; status = "okay"; - perm-read; - perm-execute; - perm-secure; + nordic,access = ; #address-cells = <1>; #size-cells = <1>; @@ -86,8 +84,7 @@ ipc1: &cpuapp_cpuppr_ipc { cpuapp_rw_partitions: cpuapp-rw-partitions { compatible = "nordic,owned-partitions", "fixed-partitions"; status = "okay"; - perm-read; - perm-write; + nordic,access = ; #address-cells = < 0x1 >; #size-cells = < 0x1 >; diff --git a/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf b/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf index dbd4929051a9..62046020ece0 100644 --- a/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf +++ b/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf @@ -99,10 +99,10 @@ CONFIG_REBOOT=y CONFIG_FLASH=y CONFIG_FLASH_MAP=y -CONFIG_NVS=y +CONFIG_ZMS=y CONFIG_SETTINGS=y -CONFIG_SETTINGS_NVS=y +CONFIG_SETTINGS_ZMS=y CONFIG_GPIO=y diff --git a/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_singlecore.conf b/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_singlecore.conf index 9fbc656b7b7b..8b76766152b7 100644 --- a/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_singlecore.conf +++ b/applications/machine_learning/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_singlecore.conf @@ -95,10 +95,10 @@ CONFIG_REBOOT=y CONFIG_FLASH=y CONFIG_FLASH_MAP=y -CONFIG_NVS=y +CONFIG_ZMS=y CONFIG_SETTINGS=y -CONFIG_SETTINGS_NVS=y +CONFIG_SETTINGS_ZMS=y CONFIG_GPIO=y diff --git a/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/app.overlay b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/app.overlay new file mode 100644 index 000000000000..18fed076ad41 --- /dev/null +++ b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/app.overlay @@ -0,0 +1,87 @@ +/ { + chosen { + ncs,ml-app-ei-data-forwarder-uart = &uart20; + zephyr,console = &uart30; + + }; + + sensor_sim: sensor-sim { + compatible = "nordic,sensor-sim"; + acc-signal = "wave"; + }; + + /* Redefine pwmleds to fit CAF requirements. */ + /delete-node/ pwmleds; + + pwmleds1 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led1: led_pwm_1 { + status = "okay"; + pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "State LED"; + }; + }; + + pwmleds3 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led3: led_pwm_3 { + status = "okay"; + pwms = <&pwm21 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "Simulated signal LED"; + }; + }; +}; + +&uart30 { + status = "okay"; +}; + +&uart20 { + status = "okay"; +}; + +&pwm20 { + status = "okay"; + pinctrl-0 = <&pwm20_default_alt>; + pinctrl-1 = <&pwm20_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm21 { + status = "okay"; + pinctrl-0 = <&pwm21_default_alt>; + pinctrl-1 = <&pwm21_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pinctrl { + pwm20_default_alt: pwm20_default_alt { + group1 { + psels = ; + }; + }; + + pwm20_sleep_alt: pwm20_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm21_default_alt: pwm21_default_alt { + group1 { + psels = ; + }; + }; + + pwm21_sleep_alt: pwm21_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; +}; diff --git a/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/buttons_def.h b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/buttons_def.h new file mode 100644 index 000000000000..4d547949ecda --- /dev/null +++ b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/buttons_def.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from buttons module and holds + * information about pins forming keyboard matrix. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} buttons_def_include_once; + +static const struct gpio_pin col[] = {}; + +static const struct gpio_pin row[] = { + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button0), gpios) }, + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button1), gpios) }, + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button2), gpios) }, + { .port = 0, .pin = DT_GPIO_PIN(DT_NODELABEL(button3), gpios) }, +}; diff --git a/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/click_detector_def.h b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/click_detector_def.h new file mode 100644 index 000000000000..0eb4be60f836 --- /dev/null +++ b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/click_detector_def.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include +#include + +/* This configuration file is included only once from click_detector module + * and holds information about click detector configuration. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} click_detector_def_include_once; + +static const struct click_detector_config click_detector_config[] = { + { + .key_id = CONFIG_ML_APP_MODE_CONTROL_BUTTON_ID, + .consume_button_event = true, + }, +}; diff --git a/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/led_state_def.h b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/led_state_def.h new file mode 100644 index 000000000000..05b1e065a898 --- /dev/null +++ b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/led_state_def.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include +#include "led_state.h" +#include "ei_data_forwarder_event.h" + +/* This configuration file is included only once from led_state module and holds + * information about LED effects associated with data forwarder states and machine + * learning results. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} led_state_def_include_once; + + +/* Map function to LED ID */ +static const uint8_t led_map[] = { + [LED_ID_ML_STATE] = 0, + [LED_ID_SENSOR_SIM] = 1 +}; + +static const struct led_effect ei_data_forwarder_led_effects[] = { + [EI_DATA_FORWARDER_STATE_DISCONNECTED] = + LED_EFFECT_LED_BLINK(2000, LED_COLOR(100, 100, 100)), + [EI_DATA_FORWARDER_STATE_CONNECTED] = + LED_EFFECT_LED_BLINK(500, LED_COLOR(100, 100, 100)), + [EI_DATA_FORWARDER_STATE_TRANSMITTING] = + LED_EFFECT_LED_BLINK(50, LED_COLOR(100, 100, 100)), +}; + +static const struct ml_result_led_effect ml_result_led_effects[] = { + { + .label = NULL, + .effect = LED_EFFECT_LED_BREATH(500, LED_COLOR(100, 100, 100)), + }, + { + .label = ANOMALY_LABEL, + .effect = LED_EFFECT_LED_BREATH(250, LED_COLOR(100, 100, 100)), + }, + { + .label = "sine", + .effect = LED_EFFECT_LED_CLOCK(1, LED_COLOR(100, 100, 100)), + }, + { + .label = "triangle", + .effect = LED_EFFECT_LED_CLOCK(2, LED_COLOR(100, 100, 100)), + }, + { + .label = "square", + .effect = LED_EFFECT_LED_CLOCK(3, LED_COLOR(100, 100, 100)), + }, + { + .label = "idle", + .effect = LED_EFFECT_LED_CLOCK(4, LED_COLOR(100, 100, 100)), + }, +}; diff --git a/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/prj.conf b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/prj.conf new file mode 100644 index 000000000000..30c60521c478 --- /dev/null +++ b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/prj.conf @@ -0,0 +1,106 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# Application configuration + +CONFIG_ML_APP_SENSOR_EVENT_DESCR="accel_sim_xyz" + +CONFIG_ML_APP_EI_DATA_FORWARDER=y +CONFIG_ML_APP_EI_DATA_FORWARDER_UART=y + +CONFIG_ML_APP_ML_RUNNER=y +CONFIG_ML_APP_ML_RUNNER_WINDOW_SHIFT=1 +CONFIG_ML_APP_ML_RUNNER_FRAME_SHIFT=0 + +CONFIG_ML_APP_SENSOR_SIM_CTRL=y +CONFIG_ML_APP_SENSOR_SIM_CTRL_TRIG_BUTTON=y +CONFIG_ML_APP_SENSOR_SIM_CTRL_TRIG_BUTTON_ID=0x0002 + +CONFIG_ML_APP_MODE=y +CONFIG_ML_APP_MODE_CONTROL_BUTTON_ID=0x0000 + +CONFIG_ML_APP_LED_STATE=y +CONFIG_ML_APP_LED_STATE_VALUE_THRESH=900 +CONFIG_ML_APP_LED_STATE_ANOMALY_THRESH=500 + +CONFIG_CAF=y + +CONFIG_CAF_POWER_MANAGER=y + +CONFIG_CAF_INIT_LOG_SENSOR_EVENTS=n + +CONFIG_CAF_SENSOR_MANAGER=y + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y +CONFIG_CAF_LEDS_PWM=y + +################################################################################ +# EI wrapper configuration + +CONFIG_CPP=y +CONFIG_STD_CPP11=y +CONFIG_FP16=n + +# Use the NCS machine learning model for simulated acceleration signal +CONFIG_EDGE_IMPULSE=y +CONFIG_EDGE_IMPULSE_URI="https://developer.nordicsemi.com/nRF_Connect_SDK/EdgeImpulse/nrf_accel_sim-v35.zip; https://publicburan.blob.core.windows.net/nrf-connect-sdk-edgeimpulse/nrf_accel_sim-v35.zip" +CONFIG_EI_WRAPPER=y + +################################################################################ +# System configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=768 +CONFIG_IDLE_STACK_SIZE=512 + +CONFIG_HEAP_MEM_POOL_SIZE=2048 + +CONFIG_SPEED_OPTIMIZATIONS=y +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_BOOT_BANNER=n +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_APP_EVENT_MANAGER=y +CONFIG_REBOOT=y + +CONFIG_GPIO=y +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +# Using simulated sensor (the DK does not have built-in sensor) +CONFIG_SENSOR=y + +# UART can be used only by EI data forwarder +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_LOG_BACKEND_UART=n +CONFIG_UART_ASYNC_API=y +CONFIG_NEWLIB_LIBC=y +CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y + +################################################################################ +# Debug configuration (logger using RTT) + +CONFIG_ASSERT=y +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_LOG=y +CONFIG_LOG_MODE_DEFERRED=y +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=1024 +CONFIG_USE_SEGGER_RTT=y +CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=4096 +CONFIG_LOG_BACKEND_RTT=y +CONFIG_LOG_PRINTK=y diff --git a/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/sensor_manager_def.h b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/sensor_manager_def.h new file mode 100644 index 000000000000..e70bc69c2f36 --- /dev/null +++ b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/sensor_manager_def.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from sensor_manager module and holds + * information about the sampled sensors. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} sensor_manager_def_include_once; + + +static const struct caf_sampled_channel accel_chan[] = { + { + .chan = SENSOR_CHAN_ACCEL_X, + .data_cnt = 1, + }, + { + .chan = SENSOR_CHAN_ACCEL_Y, + .data_cnt = 1, + }, + { + .chan = SENSOR_CHAN_ACCEL_Z, + .data_cnt = 1, + }, +}; + +static const struct sm_sensor_config sensor_configs[] = { + { + .dev = DEVICE_DT_GET(DT_NODELABEL(sensor_sim)), + .event_descr = CONFIG_ML_APP_SENSOR_EVENT_DESCR, + .chans = accel_chan, + .chan_cnt = ARRAY_SIZE(accel_chan), + .sampling_period_ms = 20, + .active_events_limit = 3, + }, +}; diff --git a/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/sensor_sim_ctrl_def.h b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/sensor_sim_ctrl_def.h new file mode 100644 index 000000000000..ac965e490436 --- /dev/null +++ b/applications/machine_learning/configuration/nrf54l15dk_nrf54l15_cpuapp/sensor_sim_ctrl_def.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "sensor_sim_ctrl.h" + +/* This configuration file is included only once from sensor_sim_ctrl module and holds + * information about wave signals that should be generated by simulated sensor. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} sensor_sim_ctrl_def_include_once; + +static const struct sim_wave sim_waves[] = { + { + .label = "sine", + .wave_param = { + .type = WAVE_GEN_TYPE_SINE, + .period_ms = 2000, + .offset = 0.0, + .amplitude = 0.5, + .noise = 0.1, + } + }, + { + .label = "triangle", + .wave_param = { + .type = WAVE_GEN_TYPE_TRIANGLE, + .period_ms = 2000, + .offset = 0.0, + .amplitude = 0.5, + .noise = 0.1, + }, + }, + { + .label = "square", + .wave_param = { + .type = WAVE_GEN_TYPE_SQUARE, + .period_ms = 2000, + .offset = 0.0, + .amplitude = 0.5, + .noise = 0.1, + }, + }, + { + .label = "idle", + .wave_param = { + .type = WAVE_GEN_TYPE_NONE, + .period_ms = 0, + .offset = 0.0, + .amplitude = 0.0, + .noise = 0.1, + }, + }, +}; + +BUILD_ASSERT(ARRAY_SIZE(sim_waves) <= UCHAR_MAX); + +static const struct sim_signal_params sim_signal_params = { + .chan = SENSOR_CHAN_ACCEL_XYZ, + .waves = sim_waves, + .waves_cnt = ARRAY_SIZE(sim_waves), +}; diff --git a/applications/machine_learning/intenal_module.rst b/applications/machine_learning/intenal_module.rst deleted file mode 100644 index 0c729c024363..000000000000 --- a/applications/machine_learning/intenal_module.rst +++ /dev/null @@ -1,62 +0,0 @@ -.. _nrf_machine_learning_app_internal_modules: - -nRF Machine Learning: Internal modules -###################################### - -.. contents:: - :local: - :depth: 2 - -The nRF Machine Learning application uses modules available in :ref:`lib_caf` (CAF), a set of generic modules based on Application Event Manager and available to all applications, and a set of dedicated internal modules. -See :ref:`nrf_machine_learning_app_architecture` for more information. - -The nRF Machine Learning application uses the following modules available in CAF: - -* :ref:`caf_ble_adv` -* :ref:`caf_ble_bond` -* :ref:`caf_ble_smp` -* :ref:`caf_ble_state` -* :ref:`caf_buttons` -* :ref:`caf_click_detector` -* :ref:`caf_leds` -* :ref:`caf_power_manager` -* :ref:`caf_sensor_manager` - -See the module pages for more information about the modules and their configuration. - -The nRF Machine Learning application also uses the following dedicated application modules: - -``ei_data_forwarder_bt_nus`` - The module forwards the sensor readouts over NUS to the connected Bluetooth Central. - The sensor data is forwarded only if the connection is secured and the connection interval is within the limit defined by the :kconfig:option:`CONFIG_BT_PERIPHERAL_PREF_MAX_INT` and :kconfig:option:`CONFIG_BT_PERIPHERAL_PREF_MAX_INT` Kconfig options. - -``ei_data_forwarder_uart`` - The module forwards the sensor readouts over UART. - -``led_state`` - The module displays the application state using LEDs. - The LED effects used to display the state of data forwarding, the machine learning results, and the state of the simulated signal are defined in the :file:`led_state_def.h` file located in the application configuration directory. - The common LED effects are used to represent the machine learning results and the simulated sensor signal. - -``ml_runner`` - The module uses the :ref:`ei_wrapper` API to control running the machine learning model. - It provides the prediction results using :c:struct:`ml_result_event`. - -``ml_app_mode`` - The module controls application mode. - It switches between running the machine learning model and forwarding the data. - The change is triggered by a long press of the button defined in the module's configuration. - -``sensor_sim_ctrl`` - The module controls the parameters of the generated simulated sensor signal. - It switches between predefined sets of parameters for the simulated signal. - The parameters of the generated signals are defined by the :file:`sensor_sim_ctrl_def.h` file located in the application configuration directory. - -``usb_state`` - The module enables USB. - -.. note:: - The ``ei_data_forwarder_bt_nus`` and ``ei_data_forwarder_uart`` modules stop forwarding the sensor readouts if they receive a :c:struct:`sensor_event` that cannot be forwarded and needs to be dropped. - This could happen, for example, if the selected sensor sampling frequency is too high for the used implementation of the Edge Impulse data forwarder. - Data forwarding is stopped to make sure that dropped samples are noticed by the user. - If you switch to running the machine learning model and then switch back to data forwarding, the data is again forwarded to the host. diff --git a/applications/machine_learning/internal_module.rst b/applications/machine_learning/internal_module.rst new file mode 100644 index 000000000000..c4d10aa3f649 --- /dev/null +++ b/applications/machine_learning/internal_module.rst @@ -0,0 +1,62 @@ +.. _nrf_machine_learning_app_internal_modules: + +nRF Machine Learning: Internal modules +###################################### + +.. contents:: + :local: + :depth: 2 + +The nRF Machine Learning application uses modules available in :ref:`lib_caf` (CAF), a set of generic modules based on Application Event Manager and available to all applications, and a set of dedicated internal modules. +See :ref:`nrf_machine_learning_app_architecture` for more information. + +The nRF Machine Learning application uses the following modules available in CAF: + +* :ref:`caf_ble_adv` +* :ref:`caf_ble_bond` +* :ref:`caf_ble_smp` +* :ref:`caf_ble_state` +* :ref:`caf_buttons` +* :ref:`caf_click_detector` +* :ref:`caf_leds` +* :ref:`caf_power_manager` +* :ref:`caf_sensor_manager` + +See the module pages for more information about the modules and their configuration. + +The nRF Machine Learning application also uses the following dedicated application modules: + +``ei_data_forwarder_bt_nus`` + The module forwards the sensor readouts over NUS to the connected Bluetooth Central. + The sensor data is forwarded only if the connection is secured and the connection interval is within the limit defined by the :kconfig:option:`CONFIG_BT_PERIPHERAL_PREF_MIN_INT` and :kconfig:option:`CONFIG_BT_PERIPHERAL_PREF_MAX_INT` Kconfig options. + +``ei_data_forwarder_uart`` + The module forwards the sensor readouts over UART. + +``led_state`` + The module displays the application state using LEDs. + The LED effects used to display the state of data forwarding, the machine learning results, and the state of the simulated signal are defined in the :file:`led_state_def.h` file located in the application configuration directory. + The common LED effects are used to represent the machine learning results and the simulated sensor signal. + +``ml_runner`` + The module uses the :ref:`ei_wrapper` API to control running the machine learning model. + It provides the prediction results using :c:struct:`ml_result_event`. + +``ml_app_mode`` + The module controls application mode. + It switches between running the machine learning model and forwarding the data. + The change is triggered by a long press of the button defined in the module's configuration. + +``sensor_sim_ctrl`` + The module controls the parameters of the generated simulated sensor signal. + It switches between predefined sets of parameters for the simulated signal. + The parameters of the generated signals are defined by the :file:`sensor_sim_ctrl_def.h` file located in the application configuration directory. + +``usb_state`` + The module enables USB. + +.. note:: + The ``ei_data_forwarder_bt_nus`` and ``ei_data_forwarder_uart`` modules stop forwarding the sensor readouts if they receive a :c:struct:`sensor_event` that cannot be forwarded and needs to be dropped. + This could happen, for example, if the selected sensor sampling frequency is too high for the used implementation of the Edge Impulse data forwarder. + Data forwarding is stopped to make sure that dropped samples are noticed by the user. + If you switch to running the machine learning model and then switch back to data forwarding, the data is again forwarded to the host. diff --git a/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.conf b/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.conf index a99f4f4a2bb3..adec495f3583 100644 --- a/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.conf +++ b/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.conf @@ -31,8 +31,6 @@ CONFIG_EVENT_MANAGER_PROXY_BIND_TIMEOUT_MS=4000 CONFIG_GPIO=y -CONFIG_SUIT_MPI_GENERATE=n - ################################################################################ # Debug configuration CONFIG_LOG=y diff --git a/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.overlay b/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.overlay index f3d0b11e83d3..14f0f531a2e2 100644 --- a/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.overlay +++ b/applications/machine_learning/remote/boards/nrf54h20dk_nrf54h20_cpuppr.overlay @@ -38,9 +38,7 @@ cpuapp_rx_partitions: cpuapp-rx-partitions { compatible = "nordic,owned-partitions", "fixed-partitions"; status = "okay"; - perm-read; - perm-execute; - perm-secure; + nordic,access = ; #address-cells = <1>; #size-cells = <1>; @@ -56,8 +54,7 @@ cpuapp_rw_partitions: cpuapp-rw-partitions { compatible = "nordic,owned-partitions", "fixed-partitions"; status = "okay"; - perm-read; - perm-write; + nordic,access = ; #address-cells = < 0x1 >; #size-cells = < 0x1 >; diff --git a/applications/machine_learning/sample.yaml b/applications/machine_learning/sample.yaml index bdb211cee2ae..5495bc5718af 100644 --- a/applications/machine_learning/sample.yaml +++ b/applications/machine_learning/sample.yaml @@ -5,61 +5,91 @@ tests: applications.machine_learning.zdebug: sysbuild: true build_only: true - platform_allow: > - nrf52840dk/nrf52840 thingy53/nrf5340/cpuapp thingy53/nrf5340/cpuapp/ns - nrf5340dk/nrf5340/cpuapp + platform_allow: + - nrf52840dk/nrf52840 + - thingy53/nrf5340/cpuapp + - thingy53/nrf5340/cpuapp/ns + - nrf5340dk/nrf5340/cpuapp + - nrf54l15dk/nrf54l15/cpuapp integration_platforms: - nrf52840dk/nrf52840 - thingy53/nrf5340/cpuapp - thingy53/nrf5340/cpuapp/ns - nrf5340dk/nrf5340/cpuapp - tags: ci_build sysbuild ci_applications_machine_learning + - nrf54l15dk/nrf54l15/cpuapp + tags: + - ci_build + - sysbuild + - ci_applications_machine_learning applications.machine_learning.zdebug_nus: sysbuild: true build_only: true - platform_allow: nrf52840dk/nrf52840 + platform_allow: + - nrf52840dk/nrf52840 integration_platforms: - nrf52840dk/nrf52840 - tags: ci_build sysbuild ci_applications_machine_learning + tags: + - ci_build + - sysbuild + - ci_applications_machine_learning extra_args: FILE_SUFFIX=nus applications.machine_learning.zdebug_rtt: sysbuild: true build_only: true - platform_allow: thingy53/nrf5340/cpuapp thingy53/nrf5340/cpuapp/ns + platform_allow: + - thingy53/nrf5340/cpuapp + - thingy53/nrf5340/cpuapp/ns integration_platforms: - thingy53/nrf5340/cpuapp - thingy53/nrf5340/cpuapp/ns - tags: ci_build sysbuild ci_applications_machine_learning + tags: + - ci_build + - sysbuild + - ci_applications_machine_learning extra_args: FILE_SUFFIX=rtt applications.machine_learning.zrelease: sysbuild: true build_only: true - platform_allow: nrf52840dk/nrf52840 thingy53/nrf5340/cpuapp thingy53/nrf5340/cpuapp/ns + platform_allow: + - nrf52840dk/nrf52840 + - thingy53/nrf5340/cpuapp + - thingy53/nrf5340/cpuapp/ns integration_platforms: - nrf52840dk/nrf52840 - thingy53/nrf5340/cpuapp - thingy53/nrf5340/cpuapp/ns - tags: ci_build sysbuild ci_applications_machine_learning + tags: + - ci_build + - sysbuild + - ci_applications_machine_learning extra_args: FILE_SUFFIX=release applications.machine_learning.sensor_hub.zdebug.singlecore: build_only: true sysbuild: true - platform_allow: nrf54h20dk/nrf54h20/cpuapp + platform_allow: + - nrf54h20dk/nrf54h20/cpuapp integration_platforms: - nrf54h20dk/nrf54h20/cpuapp - tags: ci_build sysbuild ci_applications_machine_learning + tags: + - ci_build + - sysbuild + - ci_applications_machine_learning extra_args: - machine_learning_SHIELD=pca63566 - FILE_SUFFIX="singlecore" + - machine_learning_SHIELD=pca63566 + - FILE_SUFFIX="singlecore" applications.machine_learning.sensor_hub.zdebug: build_only: true sysbuild: true - platform_allow: nrf54h20dk/nrf54h20/cpuapp + platform_allow: + - nrf54h20dk/nrf54h20/cpuapp integration_platforms: - nrf54h20dk/nrf54h20/cpuapp - tags: ci_build sysbuild ci_applications_machine_learning + tags: + - ci_build + - sysbuild + - ci_applications_machine_learning extra_args: - SB_CONFIG_ML_APP_INCLUDE_REMOTE_IMAGE=y - machine_learning_SNIPPET=nordic-ppr - machine_learning_SHIELD=pca63566_fwd - remote_SHIELD=pca63566 + - SB_CONFIG_ML_APP_INCLUDE_REMOTE_IMAGE=y + - machine_learning_SNIPPET=nordic-ppr + - machine_learning_SHIELD=pca63566_fwd + - remote_SHIELD=pca63566 diff --git a/applications/machine_learning/src/modules/Kconfig.ei_result_nsms b/applications/machine_learning/src/modules/Kconfig.ei_result_nsms index df62f291ffcd..5db2d267261e 100644 --- a/applications/machine_learning/src/modules/Kconfig.ei_result_nsms +++ b/applications/machine_learning/src/modules/Kconfig.ei_result_nsms @@ -38,7 +38,7 @@ config ML_APP_EI_RESULT_SECURITY_LEVEL_AUTHEN depends on FLASH depends on FLASH_PAGE_LAYOUT depends on FLASH_MAP - depends on NVS + depends on NVS || ZMS depends on SETTINGS endchoice diff --git a/applications/machine_learning/sysbuild.cmake b/applications/machine_learning/sysbuild.cmake index 6e92f204135e..dbe3aac7d458 100644 --- a/applications/machine_learning/sysbuild.cmake +++ b/applications/machine_learning/sysbuild.cmake @@ -31,8 +31,8 @@ if(SB_CONFIG_PARTITION_MANAGER) endif() # Add a dependency so that the remote image will be built first. -sysbuild_add_dependencies(CONFIGURE machine_learning ipc_radio remote) +sysbuild_add_dependencies(CONFIGURE ${DEFAULT_IMAGE} ipc_radio remote) # Add dependency so that the remote image is flashed first. -sysbuild_add_dependencies(FLASH machine_learning ipc_radio remote) +sysbuild_add_dependencies(FLASH ${DEFAULT_IMAGE} ipc_radio remote) endif() diff --git a/applications/machine_learning/sysbuild/ipc_radio/boards/nrf54h20dk_nrf54h20_cpurad.overlay b/applications/machine_learning/sysbuild/ipc_radio/boards/nrf54h20dk_nrf54h20_cpurad.overlay index a819e46b3d00..fedab1ff4a5f 100644 --- a/applications/machine_learning/sysbuild/ipc_radio/boards/nrf54h20dk_nrf54h20_cpurad.overlay +++ b/applications/machine_learning/sysbuild/ipc_radio/boards/nrf54h20dk_nrf54h20_cpurad.overlay @@ -27,9 +27,7 @@ cpuapp_rx_partitions: cpuapp-rx-partitions { compatible = "nordic,owned-partitions", "fixed-partitions"; status = "disabled"; - perm-read; - perm-execute; - perm-secure; + nordic,access = ; #address-cells = <1>; #size-cells = <1>; @@ -45,8 +43,7 @@ cpuapp_rw_partitions: cpuapp-rw-partitions { compatible = "nordic,owned-partitions", "fixed-partitions"; status = "disabled"; - perm-read; - perm-write; + nordic,access = ; #address-cells = < 0x1 >; #size-cells = < 0x1 >; diff --git a/applications/matter_bridge/Kconfig b/applications/matter_bridge/Kconfig index dc4e3344840b..9ddeab5d0db3 100644 --- a/applications/matter_bridge/Kconfig +++ b/applications/matter_bridge/Kconfig @@ -82,10 +82,6 @@ config BT_SCAN config BT_MAX_CONN default 10 -# Set ACL RX count to CONFIG_BT_MAX_CONN + 1, as it is expected that CONFIG_BT_BUF_ACL_RX_COUNT > CONFIG_BT_MAX_CONN. -config BT_BUF_ACL_RX_COUNT - default 11 - config BT_SCAN_FILTER_ENABLE default y @@ -180,6 +176,12 @@ endchoice endif # NET_L2_OPENTHREAD +# Dummy Kconfig just to select experimental for some of the configurations. +config BRIDGE_EXPERIMENTAL + bool + default y if NET_L2_OPENTHREAD || BRIDGE_SMART_PLUG_SUPPORT + select EXPERIMENTAL + source "${ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR}/config/nrfconnect/chip-module/Kconfig.features" source "${ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR}/config/nrfconnect/chip-module/Kconfig.defaults" source "${ZEPHYR_NRF_MODULE_DIR}/samples/matter/common/src/bridge/Kconfig" diff --git a/applications/matter_bridge/Kconfig.sysbuild b/applications/matter_bridge/Kconfig.sysbuild index e7c6509b3815..400fa46f529d 100644 --- a/applications/matter_bridge/Kconfig.sysbuild +++ b/applications/matter_bridge/Kconfig.sysbuild @@ -64,10 +64,6 @@ config DFU_MULTI_IMAGE_PACKAGE_NET endif # SOC_SERIES_NRF53X endif # BOOTLOADER_MCUBOOT -## Disable DFU for nRF54h20 -config MATTER_OTA - default n if SOC_SERIES_NRF54HX - #### Enable generating factory data config MATTER_FACTORY_DATA_GENERATE default y diff --git a/applications/matter_bridge/README.rst b/applications/matter_bridge/README.rst index 1c95f7686cf5..2fb347d06e10 100644 --- a/applications/matter_bridge/README.rst +++ b/applications/matter_bridge/README.rst @@ -15,7 +15,7 @@ Currently the Matter bridge application supports the following types of *bridged * Bluetooth® LE peripheral devices - Devices that operate on real data (such as sensor measurements or lighting state). * Simulated devices - Devices that interact with the bridge by using data fabricated programmatically by the software. -Note that, in addition to already implemented *bridged devices*, the Matter bridge architecture allows you to add support for other devices that run over diverse connectivity technologies, such as Zigbee or Bluetooth® Mesh. +Note that, in addition to already implemented *bridged devices*, the Matter bridge architecture allows you to add support for other devices that run over diverse connectivity technologies, such as Zigbee or Bluetooth Mesh. To learn more details about supported *bridged devices*, refer to the :ref:`Bridged device support ` section of Matter bridge application guide. See the subpages for how to use the application and how to extend it. diff --git a/applications/matter_bridge/VERSION b/applications/matter_bridge/VERSION index b5c2c35ecc1a..9361645541a7 100644 --- a/applications/matter_bridge/VERSION +++ b/applications/matter_bridge/VERSION @@ -1,5 +1,5 @@ VERSION_MAJOR = 2 -VERSION_MINOR = 7 +VERSION_MINOR = 8 PATCHLEVEL = 99 VERSION_TWEAK = 0 EXTRAVERSION = diff --git a/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.conf b/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.conf index 48808c740b35..3cd450ba2ff8 100644 --- a/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.conf +++ b/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.conf @@ -7,9 +7,6 @@ # Set 10 BLE connections, as it is an upper limit supported caused by RAM usage due to using Thread and BLE at same time. CONFIG_BT_MAX_CONN=10 -# Set ACL RX count to CONFIG_BT_MAX_CONN + 1, as it is expected that CONFIG_BT_BUF_ACL_RX_COUNT > CONFIG_BT_MAX_CONN. -CONFIG_BT_BUF_ACL_RX_COUNT=11 - # Set buffer sizes in a consistent way with the ones used by the network core. #id if oncomment it there is an error that rx buffer is out of range (minimal value is 69) CONFIG_BT_BUF_ACL_RX_SIZE=69 diff --git a/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.overlay b/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.overlay index 20a9383a6305..d941f278a4d7 100644 --- a/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.overlay +++ b/applications/matter_bridge/boards/nrf5340dk_nrf5340_cpuapp.overlay @@ -14,7 +14,7 @@ /* Set IPC thread priority to the highest value to not collide with other threads. */ &ipc0 { - zephyr,priority = <0 PRIO_COOP>; + zephyr,priority = <0 PRIO_COOP>; }; /* Disable unused peripherals to reduce power consumption */ diff --git a/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.conf b/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.conf index fec3fbd785d6..57588c265ac8 100644 --- a/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.conf +++ b/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.conf @@ -4,17 +4,24 @@ # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # -# TODO: Workaround to be removed once DFU and external flash will be supported on nRF54H20. -CONFIG_CHIP_QSPI_NOR=n - CONFIG_MPU_STACK_GUARD=n # Enable PSA crypto from SSF client CONFIG_PSA_SSF_CRYPTO_CLIENT=y CONFIG_SSF_PSA_CRYPTO_SERVICE_ENABLED=y -# TODO: Enable factory data once it is available -CONFIG_CHIP_FACTORY_DATA=n +# Disable Data Cache +CONFIG_DCACHE=n + +# Set the ZMS sector count to match the settings partition size that is 32 kB for this application. +CONFIG_SETTINGS_ZMS_SECTOR_COUNT=8 +# Workaround required as Zephyr L2 implies usage of NVS backend for settings. +# It should be removed once the proper fix will be applied in Zephyr. +CONFIG_NVS=n -# TODO: Workaround to be removed once Zephyr's CONFIG_FPROTECT is supported on nRF54H20. +# TODO: Enable DAC key migration once it is supported. +# Currently ITS does not work properly. CONFIG_CHIP_FACTORY_DATA_WRITE_PROTECT=n + +# Disable GPD +CONFIG_SOC_NRF54H20_GPD=n diff --git a/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.overlay b/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.overlay index 867ad63b45e1..06b1d9f1d972 100644 --- a/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.overlay +++ b/applications/matter_bridge/boards/nrf54h20dk_nrf54h20_cpuapp.overlay @@ -8,52 +8,3 @@ #include <../samples/matter/common/dts/nrf54h20/nrf54h20_cpuapp_peripherals.dtsi> #include <../samples/matter/common/dts/nrf54h20/nrf54h20_cpuapp_memory_map.dtsi> #include <../samples/matter/common/dts/nrf54h20/nrf54h20_ram_allocation.dtsi> - -/delete-node/ &cpuapp_rx_partitions; -/delete-node/ &cpuapp_rw_partitions; - -&mram1x { - erase-block-size = <0x1000>; - write-block-size = <0x10>; - - cpuapp_rx_partitions: cpuapp-rx-partitions { - compatible = "nordic,owned-partitions", "fixed-partitions"; - status = "okay"; - perm-read; - perm-execute; - perm-secure; - #address-cells = <1>; - #size-cells = <1>; - - companion_partition: partition@98000 { - reg = <0x98000 DT_SIZE_K(64)>; - }; - - cpuapp_slot0_partition: partition@a8000 { - reg = <0xa8000 DT_SIZE_K(948)>; - }; - }; - - cpuapp_rw_partitions: cpuapp-rw-partitions { - compatible = "nordic,owned-partitions", "fixed-partitions"; - status = "okay"; - perm-read; - perm-write; - #address-cells = <0x1>; - #size-cells = <0x1>; - - storage_partition: partition@195000 { - reg = <0x195000 DT_SIZE_K(32)>; - }; - - factory_data: partition@19D000 { - reg = <0x19D000 DT_SIZE_K(4)>; - }; - - /* DFU partition to store SUIT manifests and Nordic Firmware update */ - dfu_partition: partition@19E000 { - reg = <0x19E000 DT_SIZE_K(300)>; - }; - - }; -}; diff --git a/applications/matter_bridge/doc/adding_ble_bridged_device_service.rst b/applications/matter_bridge/doc/adding_ble_bridged_device_service.rst index f297036046ac..76557161a2e8 100644 --- a/applications/matter_bridge/doc/adding_ble_bridged_device_service.rst +++ b/applications/matter_bridge/doc/adding_ble_bridged_device_service.rst @@ -3,7 +3,7 @@ Adding support for a new Bluetooth LE service ############################################# -The Matter Bridge application supports bridging Bluetooth LE devices using :ref:`LED Button Service ` and :zephyr:code-sample:`ble_peripheral_esp` Bluetooth services. +The Matter Bridge application supports bridging Bluetooth® LE devices using :ref:`LED Button Service ` and :zephyr:code-sample:`ble_peripheral_esp` Bluetooth services. You can also add support for a proprietary Bluetooth LE service, if required by your use case. The functionality of the added Bluetooth LE service has to be represented by one or more device types available in the :ref:`Matter Data Model `. For example, the :ref:`LED Button Service ` is represented by the Matter On/Off Light and Matter Generic Switch device types. @@ -236,7 +236,6 @@ The following steps show how to add support for a new Bluetooth LE service calle mGattSubscribeParams.value = BT_GATT_CCC_NOTIFY; mGattSubscribeParams.notify = MyBtServiceDataProvider::GattNotifyCallback; mGattSubscribeParams.subscribe = nullptr; - mGattSubscribeParams.write = nullptr; return bt_gatt_subscribe(mDevice.mConn, &mGattSubscribeParams); } diff --git a/applications/matter_bridge/doc/adding_bridged_matter_device.rst b/applications/matter_bridge/doc/adding_bridged_matter_device.rst index 99417a32b417..f9f5368ff381 100644 --- a/applications/matter_bridge/doc/adding_bridged_matter_device.rst +++ b/applications/matter_bridge/doc/adding_bridged_matter_device.rst @@ -7,7 +7,7 @@ The Matter Bridge application supports bridging only a few Matter device types d However, you can select any of the available :ref:`Matter device types ` and add support to it in the application. You will need to implement the ``Matter Bridged Device`` and ``Bridged Device Data Provider`` roles based on the :ref:`Matter Bridge architecture ` for the newly added Matter device type. -The Matter Bridge application supports :ref:`simulated and Bluetooth LE ` bridged device configurations. +The Matter Bridge application supports :ref:`simulated and Bluetooth® LE ` bridged device configurations. In this guide, the simulated provider example is presented, but the process is similar for the Bluetooth LE provider as well. The following steps show how to add support for a new Matter device type, using the Pressure Sensor device type as an example. @@ -33,7 +33,7 @@ The following steps show how to add support for a new Matter device type, using class PressureSensorDevice : public Nrf::MatterBridgedDevice { public: - PressureSensorDevice(const char *nodeLabel); + PressureSensorDevice(const char *uniqueID, const char *nodeLabel); static constexpr uint16_t kPressureSensorDeviceTypeId = 0x0305; }; @@ -44,7 +44,8 @@ The following steps show how to add support for a new Matter device type, using #include "pressure_sensor.h" - PressureSensorDevice::PressureSensorDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) {} + PressureSensorDevice::PressureSensorDevice(const char *uniqueID, const char *nodeLabel) + : MatterBridgedDevice(uniqueID, nodeLabel) {} #. Declare all clusters that are mandatory for the Pressure Sensor device type, according to the Matter device library specification, and fill the appropriate :c:struct:`MatterBridgedDevice` class fields in the :c:struct:`PressureSensorDevice` class constructor. @@ -98,7 +99,8 @@ The following steps show how to add support for a new Matter device type, using .. code-block:: C++ - PressureSensorDevice::PressureSensorDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) + PressureSensorDevice::PressureSensorDevice(const char *uniqueID, const char *nodeLabel) + : MatterBridgedDevice(uniqueID, nodeLabel) { mDataVersionSize = kPressureDataVersionSize; mEp = &bridgedPressureEndpoint; @@ -291,8 +293,6 @@ The following steps show how to add support for a new Matter device type, using .. code-block:: C++ - static void NotifyAttributeChange(intptr_t context); - static constexpr uint16_t kMeasurementsIntervalMs = 10000; static constexpr int16_t kMinRandomPressure = 95; static constexpr int16_t kMaxRandomPressure = 101; @@ -323,18 +323,20 @@ The following steps show how to add support for a new Matter device type, using if (!timer || !timer->user_data) { return; } - SimulatedPressureSensorDataProvider *provider = reinterpret_cast(timer->user_data); - /* Get some random data to emulate sensor measurements. */ - provider->mPressure = chip::Crypto::GetRandU16() % (kMaxRandomPressure - kMinRandomPressure) + kMinRandomPressure; - DeviceLayer::PlatformMgr().ScheduleWork(NotifyAttributeChange, reinterpret_cast(provider)); - } - void SimulatedPressureSensorDataProvider::NotifyAttributeChange(intptr_t context) - { - SimulatedPressureSensorDataProvider *provider = reinterpret_cast(context); - provider->NotifyUpdateState(Clusters::PressureMeasurement::Id, + DeviceLayer::PlatformMgr().ScheduleWork( + [](intptr_t p) { + SimulatedPressureSensorDataProvider *provider = + reinterpret_cast(p); + + /* Get some random data to emulate sensor measurements. */ + provider->mPressure = chip::Crypto::GetRandU16() % (kMaxRandomPressure - kMinRandomPressure) + kMinRandomPressure; + + provider->NotifyUpdateState(Clusters::PressureMeasurement::Id, Clusters::PressureMeasurement::Attributes::MeasuredValue::Id, &provider->mPressure, sizeof(provider->mPressure)); + }, + reinterpret_cast(timer->user_data)); } #. Implement the body of the :c:func:`NotifyUpdateState` method that shall be called after every data change related to the Pressure Sensor device. @@ -394,11 +396,11 @@ The following steps show how to add support for a new Matter device type, using .. code-block:: C++ { PressureSensorDevice::kPressureSensorDeviceTypeId, - [checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, - :file:`src/simulated_providers/simulated_bridged_device_factory.cpp`, :c:func:`GetDataProviderFactory` method diff --git a/applications/matter_bridge/doc/adding_bridged_protocol.rst b/applications/matter_bridge/doc/adding_bridged_protocol.rst index 8a1bd20b6f34..9dc1cf6f45f2 100644 --- a/applications/matter_bridge/doc/adding_bridged_protocol.rst +++ b/applications/matter_bridge/doc/adding_bridged_protocol.rst @@ -7,7 +7,7 @@ The :ref:`Matter Bridge architecture `, you also need the following: +To test the Matter bridge application with the :ref:`Bluetooth® LE bridged device `, you also need the following: * An additional development kit compatible with one of the following Bluetooth LE samples: @@ -28,7 +28,7 @@ To test the Matter bridge application with the :ref:`Bluetooth LE bridged device * A micro-USB cable for every development kit to connect it to the PC. -To commission the Matter bridge device and control it remotely through a Wi-Fi network, you also need a Matter controller device :ref:`configured on PC or smartphone `. +To commission the Matter bridge device and control it remotely through a Wi-Fi® network, you also need a Matter controller device :ref:`configured on PC or smartphone `. This requires additional hardware depending on your setup. .. note:: @@ -98,14 +98,18 @@ For example: For information about how to upgrade the device firmware using a PC or a smartphone, see the :ref:`matter_bridge_app_dfu` section. -.. note:: - Currently the DFU over Bluetooth LE SMP and Matter OTA are not available for the ``nrf54h20dk/nrf54h20/cpuapp`` board target. - The Matter bridge device has an additional functionality, enabling it to work as a smart plug. This feature provides an additional endpoint with an ID equal to 2, which represents Matter on/off smart plug device type functionality. This means that you can integrate the Matter bridge functionality into your end product, such as a smart plug, and avoid having to use a standalone bridge device. This is an optional feature and can be enabled by :ref:`Configuring the smart plug functionality `. +SUIT DFU on nRF54H20 +==================== + +.. include:: ../../../samples/matter/template/README.rst + :start-after: matter_template_dfu_suit_start + :end-before: matter_template_dfu_suit_end + .. _matter_bridge_app_bridged_support: Bridged device support @@ -131,7 +135,7 @@ Remote testing in a network =========================== By default, the Matter accessory device has no IPv6 network configured. -To use the device within a Wi-Fi network, you must pair it with the Matter controller over Bluetooth® LE to get the configuration from the controller. +To use the device within a Wi-Fi network, you must pair it with the Matter controller over Bluetooth LE to get the configuration from the controller. The Bluetooth LE advertising starts automatically upon device startup, but only for a predefined period of time (1 hour by default). If the Bluetooth LE advertising times out, you can re-enable it manually (see the :ref:`matter_bridge_app_ui` section). @@ -388,70 +392,78 @@ Check and configure the following configuration options: .. _CONFIG_BRIDGED_DEVICE_IMPLEMENTATION: CONFIG_BRIDGED_DEVICE_IMPLEMENTATION - Select bridged device implementation. + ``bool`` - Select bridged device implementation. See the :ref:`matter_bridge_app_bridged_support_configs` section for more information. Accepts the following values: .. _CONFIG_BRIDGED_DEVICE_SIMULATED: CONFIG_BRIDGED_DEVICE_SIMULATED - Implement a simulated bridged device. + ``bool`` - Implement a simulated bridged device. You must also configure :ref:`CONFIG_BRIDGED_DEVICE_SIMULATED_ONOFF_IMPLEMENTATION ` .. _CONFIG_BRIDGED_DEVICE_BT: CONFIG_BRIDGED_DEVICE_BT - Implement a Bluetooth LE bridged device. + ``bool`` - Implement a Bluetooth LE bridged device. .. _CONFIG_BRIDGE_HUMIDITY_SENSOR_BRIDGED_DEVICE: CONFIG_BRIDGE_HUMIDITY_SENSOR_BRIDGED_DEVICE - Enable support for Humidity Sensor bridged device. + ``bool`` - Enable support for Humidity Sensor bridged device. .. _CONFIG_BRIDGE_ONOFF_LIGHT_BRIDGED_DEVICE: CONFIG_BRIDGE_ONOFF_LIGHT_BRIDGED_DEVICE - Enable support for OnOff Light bridged device. + ``bool`` - Enable support for OnOff Light bridged device. .. _CONFIG_BRIDGE_SWITCH_BRIDGED_DEVICE: CONFIG_BRIDGE_SWITCH_BRIDGED_DEVICE - Enable support for a switch bridged device. + ``bool`` - Enable support for a switch bridged device. Accepts the following values: .. _CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE: CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE - Enable support for Generic Switch bridged device. + ``bool`` - Enable support for Generic Switch bridged device. .. _CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE: CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE - Enable support for OnOff Light Switch bridged device. + ``bool`` - Enable support for OnOff Light Switch bridged device. .. _CONFIG_BRIDGE_TEMPERATURE_SENSOR_BRIDGED_DEVICE: CONFIG_BRIDGE_TEMPERATURE_SENSOR_BRIDGED_DEVICE - Enable support for Temperature Sensor bridged device. + ``bool`` - Enable support for Temperature Sensor bridged device. + +.. _CONFIG_BRIDGE_MIGRATE_PRE_2_7_0: + +CONFIG_BRIDGE_MIGRATE_PRE_2_7_0 +``bool`` - Enable migration of bridged device data stored in old scheme from pre |NCS| 2.7.0 releases. -If you selected the simulated device implementation using the :ref:`CONFIG_BRIDGED_DEVICE_SIMULATED ` Kconfig option, also check and configure the following option: +.. _CONFIG_BRIDGE_MIGRATE_VERSION_1: + +CONFIG_BRIDGE_MIGRATE_VERSION_1 +``bool`` - Enable migration of bridged device data stored in version 1 of new scheme.If you selected the simulated device implementation using the :ref:`CONFIG_BRIDGED_DEVICE_SIMULATED ` Kconfig option, also check and configure the following option: .. _CONFIG_BRIDGED_DEVICE_SIMULATED_ONOFF_IMPLEMENTATION: CONFIG_BRIDGED_DEVICE_SIMULATED_ONOFF_IMPLEMENTATION - Select the simulated OnOff device implementation. + ``bool`` - Select the simulated OnOff device implementation. Accepts the following values: .. _CONFIG_BRIDGED_DEVICE_SIMULATED_ONOFF_AUTOMATIC: CONFIG_BRIDGED_DEVICE_SIMULATED_ONOFF_AUTOMATIC - Automatically simulated OnOff device. + ``bool`` - Automatically simulated OnOff device. The simulated device automatically changes its state periodically. .. _CONFIG_BRIDGED_DEVICE_SIMULATED_ONOFF_SHELL: CONFIG_BRIDGED_DEVICE_SIMULATED_ONOFF_SHELL - Shell-controlled simulated OnOff device. + ``bool`` - Shell-controlled simulated OnOff device. The state of the simulated device is changed using shell commands. If you selected the Bluetooth LE device implementation using the :ref:`CONFIG_BRIDGED_DEVICE_BT ` Kconfig option, also check and configure the following options: @@ -459,29 +471,29 @@ If you selected the Bluetooth LE device implementation using the :ref:`CONFIG_BR .. _CONFIG_BRIDGE_BT_MAX_SCANNED_DEVICES: CONFIG_BRIDGE_BT_MAX_SCANNED_DEVICES - Set the maximum number of scanned devices. + ``int`` - Set the maximum number of scanned devices. .. _CONFIG_BRIDGE_BT_MINIMUM_SECURITY_LEVEL: CONFIG_BRIDGE_BT_MINIMUM_SECURITY_LEVEL - Set the minimum Bluetooth security level of bridged devices that the bridge device will accept. + ``int`` - Set the minimum Bluetooth security level of bridged devices that the bridge device will accept. Bridged devices using this or a higher level will be allowed to connect to the bridge. See the :ref:`matter_bridge_app_bt_security` section for more information. .. _CONFIG_BRIDGE_BT_RECOVERY_MAX_INTERVAL: CONFIG_BRIDGE_BT_RECOVERY_MAX_INTERVAL - Set the maximum time (in seconds) between recovery attempts when the Bluetooth LE connection to the bridged device is lost. + ``int`` - Set the maximum time (in seconds) between recovery attempts when the Bluetooth LE connection to the bridged device is lost. .. _CONFIG_BRIDGE_BT_RECOVERY_SCAN_TIMEOUT_MS: CONFIG_BRIDGE_BT_RECOVERY_SCAN_TIMEOUT_MS - Set the time (in milliseconds) within which the Bridge will try to re-establish a connection to the lost Bluetooth LE device. + ``int`` - Set the time (in milliseconds) within which the Bridge will try to re-establish a connection to the lost Bluetooth LE device. .. _CONFIG_BRIDGE_BT_SCAN_TIMEOUT_MS: CONFIG_BRIDGE_BT_SCAN_TIMEOUT_MS - Set the Bluetooth LE scan timeout in milliseconds. + ``int`` - Set the Bluetooth LE scan timeout in milliseconds. The following options affect how many bridged devices the application supports. See the :ref:`matter_bridge_app_bridged_support_configs` section for more information. @@ -489,12 +501,12 @@ See the :ref:`matter_bridge_app_bridged_support_configs` section for more inform .. _CONFIG_BRIDGE_MAX_BRIDGED_DEVICES_NUMBER: CONFIG_BRIDGE_MAX_BRIDGED_DEVICES_NUMBER - Set the maximum number of physical non-Matter devices supported by the Bridge. + ``int`` - Set the maximum number of physical non-Matter devices supported by the Bridge. .. _CONFIG_BRIDGE_MAX_DYNAMIC_ENDPOINTS_NUMBER: CONFIG_BRIDGE_MAX_DYNAMIC_ENDPOINTS_NUMBER - Set the maximum number of dynamic endpoints supported by the Bridge. + ``int`` - Set the maximum number of dynamic endpoints supported by the Bridge. .. _matter_bridge_app_bridged_support_configs: @@ -556,7 +568,7 @@ The current maximum number of Bluetooth LE connections that can be selected usin .. group-tab:: Matter bridge over Thread - You can not increase the default number of Bluetooth LE connections in this configuration using overlays. + You cannot increase the default number of Bluetooth LE connections in this configuration using overlays. This is because the configuration uses both Thread and Bluetooth LE protocols, and limited RAM memory. You can still increase the number of connections by modifying the board files and decreasing the buffer sizes. The default number of connections is ``10``, which effectively means 9 bridged devices. @@ -576,7 +588,7 @@ The current maximum number of Bluetooth LE connections that can be selected usin .. parsed-literal:: :class: highlight - west build -b nrf54h20dk/nrf54h20/cpuapp -p -- -DSB_CONFIG_WIFI_NRF70=y -DCONFIG_CHIP_WIFI=y -Dmatter_bridge_SHIELD=nrf700x_nrf54h20dk -DCONFIG_BRIDGED_DEVICE_BT=y -DEXTRA_CONF_FILE="overlay-bt_max_connections_app.conf" -Dipc_radio_EXTRA_CONF_FILE="overlay-bt_max_connections_net.conf" + west build -b nrf54h20dk/nrf54h20/cpuapp -p -- -DSB_CONFIG_WIFI_NRF70=y -DCONFIG_CHIP_WIFI=y -Dmatter_bridge_SHIELD=nrf7002eb_interposer_p1 -DCONFIG_BRIDGED_DEVICE_BT=y -DEXTRA_CONF_FILE="overlay-bt_max_connections_app.conf" -Dipc_radio_EXTRA_CONF_FILE="overlay-bt_max_connections_net.conf" .. group-tab:: Matter bridge over Thread @@ -697,6 +709,17 @@ The application supports the following configurations: Enables the Matter Bridge to work with Wi-Fi on nRF5340 DK. +Factory data support +==================== + +.. include:: ../../../samples/matter/lock/README.rst + :start-after: matter_door_lock_sample_factory_data_start + :end-before: matter_door_lock_sample_factory_data_end + +.. include:: ../../../samples/matter/lock/README.rst + :start-after: matter_door_lock_sample_factory_data_nrf54h20_start + :end-before: matter_door_lock_sample_factory_data_nrf54h20_end + Building and running ******************** @@ -719,7 +742,11 @@ Once connected, run the following command to build the sample: .. code-block:: console - west build -b nrf54h20dk/nrf54h20/cpuapp -p -- -DSB_CONFIG_WIFI_NRF70=y -DCONFIG_CHIP_WIFI=y -Dmatter_bridge_SHIELD=nrf700x_nrf54h20dk + west build -b nrf54h20dk/nrf54h20/cpuapp -p -- -DSB_CONFIG_WIFI_NRF70=y -DCONFIG_CHIP_WIFI=y -Dmatter_bridge_SHIELD=nrf7002eb_interposer_p1 + +.. note:: + |54H_engb_2_8| + Selecting a configuration ========================= @@ -737,17 +764,7 @@ To enable the Matter smart plugin functionality, run the following command with .. parsed-literal:: :class: highlight - .. group-tab:: nRF54 DKs - - .. code-block:: console - - west build -b nrf54h20dk/nrf54h20/cpuapp -p -- -DSB_CONFIG_WIFI_NRF70=y -DCONFIG_CHIP_WIFI=y -Dmatter_bridge_SHIELD=nrf700x_nrf54h20dk -DCONFIG_BRIDGED_DEVICE_BT=y -Dmatter_bridge_SNIPPET=onoff_plug - - .. group-tab:: nRF70 DKs - - .. code-block:: console - - west build -b nrf7002dk/nrf5340/cpuapp -p -- -DCONFIG_BRIDGED_DEVICE_BT=y -Dmatter_bridge_SNIPPET=onoff_plug + west build -b *board_target* -p -- -Dmatter_bridge_SNIPPET=onoff_plug .. _matter_bridge_testing: diff --git a/applications/matter_bridge/overlay-bt_max_connections_app.conf b/applications/matter_bridge/overlay-bt_max_connections_app.conf index a7a28b3b0514..83de533d7cd6 100644 --- a/applications/matter_bridge/overlay-bt_max_connections_app.conf +++ b/applications/matter_bridge/overlay-bt_max_connections_app.conf @@ -7,9 +7,6 @@ # Set 20 BLE connections, as it is an upper limit supported by the Soft Device Controller. CONFIG_BT_MAX_CONN=20 -# Set ACL RX count to CONFIG_BT_MAX_CONN + 1, as it is expected that CONFIG_BT_BUF_ACL_RX_COUNT > CONFIG_BT_MAX_CONN. -CONFIG_BT_BUF_ACL_RX_COUNT=21 - # Set buffer sizes in a consistent way with the ones used by the network core. CONFIG_BT_BUF_ACL_RX_SIZE=84 CONFIG_BT_BUF_ACL_TX_SIZE=84 diff --git a/applications/matter_bridge/prj.conf b/applications/matter_bridge/prj.conf index 072ecc1b0656..80e7f1338b4d 100644 --- a/applications/matter_bridge/prj.conf +++ b/applications/matter_bridge/prj.conf @@ -52,5 +52,5 @@ CONFIG_CHIP_FACTORY_DATA_BUILD=y CONFIG_LTO=y CONFIG_ISR_TABLES_LOCAL_DECLARATION=y -# DAC Migration -CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY=y +# Increase heap size to accommodate the memory required for additional bridged devices. +CONFIG_CHIP_MALLOC_SYS_HEAP_SIZE=16384 diff --git a/applications/matter_bridge/prj_release.conf b/applications/matter_bridge/prj_release.conf index b34d244892a7..8b5f5936fe49 100644 --- a/applications/matter_bridge/prj_release.conf +++ b/applications/matter_bridge/prj_release.conf @@ -56,5 +56,5 @@ CONFIG_CHIP_ENABLE_READ_CLIENT=y # Enable Watchdog CONFIG_NCS_SAMPLE_MATTER_WATCHDOG=y -# DAC Migration -CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY=y +# Increase heap size to accommodate the memory required for additional bridged devices. +CONFIG_CHIP_MALLOC_SYS_HEAP_SIZE=16384 diff --git a/applications/matter_bridge/sample.yaml b/applications/matter_bridge/sample.yaml index c2087b5c0fcb..4702fbe15613 100644 --- a/applications/matter_bridge/sample.yaml +++ b/applications/matter_bridge/sample.yaml @@ -5,112 +5,164 @@ tests: applications.matter_bridge.release: sysbuild: true build_only: true - extra_args: FILE_SUFFIX=release - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y + extra_args: + - FILE_SUFFIX=release + - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n + - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y integration_platforms: - nrf7002dk/nrf5340/cpuapp - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - platform_allow: nrf7002dk/nrf5340/cpuapp nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - tags: sysbuild ci_applications_matter + platform_allow: + - nrf7002dk/nrf5340/cpuapp + - nrf5340dk/nrf5340/cpuapp + - nrf54h20dk/nrf54h20/cpuapp + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.lto: sysbuild: true build_only: true - extra_args: CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y + extra_args: + - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n + - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y integration_platforms: - nrf7002dk/nrf5340/cpuapp - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - platform_allow: nrf7002dk/nrf5340/cpuapp nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - tags: sysbuild ci_applications_matter + platform_allow: + - nrf7002dk/nrf5340/cpuapp + - nrf5340dk/nrf5340/cpuapp + - nrf54h20dk/nrf54h20/cpuapp + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.lto.br_ble: sysbuild: true build_only: true - extra_args: CONFIG_BRIDGED_DEVICE_BT=y - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y + extra_args: + - CONFIG_BRIDGED_DEVICE_BT=y + - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n + - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y integration_platforms: - nrf7002dk/nrf5340/cpuapp - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - platform_allow: nrf7002dk/nrf5340/cpuapp nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - tags: sysbuild ci_applications_matter + platform_allow: + - nrf7002dk/nrf5340/cpuapp + - nrf5340dk/nrf5340/cpuapp + - nrf54h20dk/nrf54h20/cpuapp + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.release.br_ble: sysbuild: true build_only: true - extra_args: FILE_SUFFIX=release CONFIG_BRIDGED_DEVICE_BT=y - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y + extra_args: + - FILE_SUFFIX=release + - CONFIG_BRIDGED_DEVICE_BT=y + - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n + - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y integration_platforms: - nrf7002dk/nrf5340/cpuapp - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - platform_allow: nrf7002dk/nrf5340/cpuapp nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - tags: sysbuild ci_applications_matter + platform_allow: + - nrf7002dk/nrf5340/cpuapp + - nrf5340dk/nrf5340/cpuapp + - nrf54h20dk/nrf54h20/cpuapp + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.lto.br_ble.smp_dfu: sysbuild: true build_only: true - extra_args: CONFIG_CHIP_DFU_OVER_BT_SMP=y CONFIG_BRIDGED_DEVICE_BT=y - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y + extra_args: + - CONFIG_CHIP_DFU_OVER_BT_SMP=y + - CONFIG_BRIDGED_DEVICE_BT=y + - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n + - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y integration_platforms: - nrf7002dk/nrf5340/cpuapp platform_allow: nrf7002dk/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.lto.nrf5340.wifi: sysbuild: true build_only: true - extra_args: matter_bridge_SHIELD=nrf7002ek SB_CONFIG_WIFI_PATCHES_EXT_FLASH_STORE=y - mcuboot_CONFIG_UPDATEABLE_IMAGE_NUMBER=3 SB_CONFIG_WIFI_NRF70=y - SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_WIFI_FW_PATCH=y - CONFIG_CHIP_DFU_OVER_BT_SMP=y - FILE_SUFFIX=nrf70ek + extra_args: + - matter_bridge_SHIELD=nrf7002ek + - SB_CONFIG_WIFI_PATCHES_EXT_FLASH_STORE=y + - mcuboot_CONFIG_UPDATEABLE_IMAGE_NUMBER=3 + - SB_CONFIG_WIFI_NRF70=y + - SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_WIFI_FW_PATCH=y + - CONFIG_CHIP_DFU_OVER_BT_SMP=y + - FILE_SUFFIX=nrf70ek integration_platforms: - nrf5340dk/nrf5340/cpuapp platform_allow: nrf5340dk/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.lto.br_ble.nrf54h20.wifi: sysbuild: true build_only: true - extra_args: SB_CONFIG_WIFI_NRF70=y CONFIG_CHIP_WIFI=y - matter_bridge_SHIELD=nrf7002eb_interposer_p1 CONFIG_BRIDGED_DEVICE_BT=y + extra_args: + - SB_CONFIG_WIFI_NRF70=y + - CONFIG_CHIP_WIFI=y + - matter_bridge_SHIELD="nrf7002eb_interposer_p1;nrf7002eb" + - CONFIG_BRIDGED_DEVICE_BT=y integration_platforms: - nrf54h20dk/nrf54h20/cpuapp platform_allow: nrf54h20dk/nrf54h20/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.release.br_ble.nrf54h20.wifi: sysbuild: true build_only: true - extra_args: FILE_SUFFIX=release SB_CONFIG_WIFI_NRF70=y CONFIG_CHIP_WIFI=y - matter_bridge_SHIELD=nrf7002eb_interposer_p1 CONFIG_BRIDGED_DEVICE_BT=y + extra_args: + - FILE_SUFFIX=release + - SB_CONFIG_WIFI_NRF70=y + - CONFIG_CHIP_WIFI=y + - matter_bridge_SHIELD="nrf7002eb_interposer_p1;nrf7002eb" + - CONFIG_BRIDGED_DEVICE_BT=y integration_platforms: - nrf54h20dk/nrf54h20/cpuapp platform_allow: nrf54h20dk/nrf54h20/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.lto.br_ble.memory_profiling: sysbuild: true build_only: true - extra_args: CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y - CONFIG_CHIP_MEMORY_PROFILING=y CONFIG_BRIDGED_DEVICE_BT=y + extra_args: + - CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE=n + - CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE=y + - CONFIG_CHIP_MEMORY_PROFILING=y + - CONFIG_BRIDGED_DEVICE_BT=y + - CONFIG_BRIDGE_MIGRATE_VERSION_1=n + - CONFIG_WIFI_NM_WPA_SUPPLICANT_WPA3=n integration_platforms: - nrf7002dk/nrf5340/cpuapp - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - platform_allow: nrf7002dk/nrf5340/cpuapp nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp - tags: sysbuild ci_applications_matter + platform_allow: + - nrf7002dk/nrf5340/cpuapp + - nrf5340dk/nrf5340/cpuapp + - nrf54h20dk/nrf54h20/cpuapp + tags: + - sysbuild + - ci_applications_matter applications.matter_bridge.lto.smart_plug: sysbuild: true build_only: true - extra_args: matter_bridge_SNIPPET=onoff_plug + extra_args: + - matter_bridge_SNIPPET=onoff_plug integration_platforms: - nrf5340dk/nrf5340/cpuapp platform_allow: nrf5340dk/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter diff --git a/applications/matter_bridge/snippets/onoff_plug/bridge.zap b/applications/matter_bridge/snippets/onoff_plug/bridge.zap index a75f40c77605..35e2bdba9d03 100644 --- a/applications/matter_bridge/snippets/onoff_plug/bridge.zap +++ b/applications/matter_bridge/snippets/onoff_plug/bridge.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -29,6 +29,7 @@ "pathRelativity": "relativeToZap", "path": "../../../../../modules/lib/matter/src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -37,12 +38,18 @@ "id": 1, "name": "MA-rootdevice", "deviceTypeRef": { - "code": 22, + "code": 18, "profileId": 259, - "label": "MA-rootdevice", - "name": "MA-rootdevice" + "label": "MA-otarequestor", + "name": "MA-otarequestor" }, "deviceTypes": [ + { + "code": 18, + "profileId": 259, + "label": "MA-otarequestor", + "name": "MA-otarequestor" + }, { "code": 22, "profileId": 259, @@ -51,13 +58,15 @@ } ], "deviceVersions": [ - 2 + 1, + 3 ], "deviceIdentifiers": [ + 18, 22 ], - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeName": "MA-otarequestor", + "deviceTypeCode": 18, "deviceTypeProfileId": 259, "clusters": [ { @@ -164,6 +173,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -334,6 +359,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -360,7 +401,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -696,6 +737,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -738,7 +795,7 @@ "storageOption": "RAM", "singleton": 1, "bounded": 0, - "defaultValue": "3", + "defaultValue": "4", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -817,40 +874,6 @@ "isIncoming": 0, "isEnabled": 1 } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "1", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } ] }, { @@ -967,6 +990,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1210,6 +1249,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1252,7 +1307,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "2", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -1550,6 +1605,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1886,6 +1957,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2059,7 +2146,7 @@ ] }, { - "name": "WiFi Network Diagnostics", + "name": "Wi-Fi Network Diagnostics", "code": 54, "mfgCode": null, "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", @@ -2422,6 +2509,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2706,6 +2809,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2910,6 +3029,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2980,7 +3115,7 @@ } ], "deviceVersions": [ - 1 + 2 ], "deviceIdentifiers": [ 14 @@ -3129,7 +3264,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3484,7 +3619,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4367,7 +4502,7 @@ } ], "deviceVersions": [ - 2 + 3 ], "deviceIdentifiers": [ 256 @@ -4392,40 +4527,6 @@ "isIncoming": 0, "isEnabled": 1 } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "4", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } ] }, { @@ -4576,7 +4677,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4844,40 +4945,6 @@ "isIncoming": 0, "isEnabled": 1 } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "4", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } ] }, { @@ -5108,7 +5175,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -5640,6 +5707,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "UniqueID", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, diff --git a/applications/matter_bridge/snippets/onoff_plug/zap-generated/access.h b/applications/matter_bridge/snippets/onoff_plug/zap-generated/access.h index 068d687dff2d..ef40c147d7bb 100644 --- a/applications/matter_bridge/snippets/onoff_plug/zap-generated/access.h +++ b/applications/matter_bridge/snippets/onoff_plug/zap-generated/access.h @@ -32,9 +32,6 @@ /* Cluster: On/Off, Attribute: StartUpOnOff, Privilege: view */ \ 0x0000001F, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ 0x0000001F, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -54,9 +51,6 @@ /* Cluster: On/Off, Attribute: StartUpOnOff, Privilege: view */ \ 0x00000000, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ 0x00000001, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -76,9 +70,6 @@ /* Cluster: On/Off, Attribute: StartUpOnOff, Privilege: view */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -262,18 +253,21 @@ #define GENERATED_ACCESS_READ_EVENT__CLUSTER { \ 0x0000001F, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ 0x0000001F, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + 0x0000001F, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } // Parallel array data (cluster, *event*, privilege) for read event #define GENERATED_ACCESS_READ_EVENT__EVENT { \ 0x00000000, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ 0x00000001, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + 0x00000002, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } // Parallel array data (cluster, event, *privilege*) for read event #define GENERATED_ACCESS_READ_EVENT__PRIVILEGE { \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } //////////////////////////////////////////////////////////////////////////////// diff --git a/applications/matter_bridge/snippets/onoff_plug/zap-generated/endpoint_config.h b/applications/matter_bridge/snippets/onoff_plug/zap-generated/endpoint_config.h index 844ae37c177b..aa2f094e3ba2 100644 --- a/applications/matter_bridge/snippets/onoff_plug/zap-generated/endpoint_config.h +++ b/applications/matter_bridge/snippets/onoff_plug/zap-generated/endpoint_config.h @@ -62,7 +62,7 @@ } // This is an array of EmberAfAttributeMetadata structures. -#define GENERATED_ATTRIBUTE_COUNT 190 +#define GENERATED_ATTRIBUTE_COUNT 191 #define GENERATED_ATTRIBUTES \ { \ /* Endpoint: 0, Cluster: Descriptor (server) */ \ @@ -90,7 +90,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TargetsPerAccessControlEntry */ \ { ZAP_EMPTY_DEFAULT(), 0x00000004, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* AccessControlEntriesPerFabric */ \ - { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ + { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */ \ \ @@ -140,7 +140,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* MaxPathsPerInvoke \ */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ + { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: OTA Software Update Requestor (server) */ \ @@ -166,7 +166,7 @@ { ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BOOLEAN), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportsConcurrentConnection */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: Network Commissioning (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(INT8U), \ @@ -227,7 +227,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ - /* Endpoint: 0, Cluster: WiFi Network Diagnostics (server) */ \ + /* Endpoint: 0, Cluster: Wi-Fi Network Diagnostics (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 7, ZAP_TYPE(OCTET_STRING), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* BSSID */ \ { ZAP_EMPTY_DEFAULT(), 0x00000001, 1, ZAP_TYPE(ENUM8), \ @@ -301,7 +301,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), \ @@ -322,7 +322,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 2, Cluster: Groups (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(BITMAP8), 0 }, /* NameSupport */ \ @@ -369,7 +369,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 3, Cluster: Groups (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(BITMAP8), 0 }, /* NameSupport */ \ @@ -387,7 +387,7 @@ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* StartUpOnOff */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 3, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), \ @@ -425,6 +425,8 @@ { ZAP_EMPTY_DEFAULT(), 0x0000000E, 65, ZAP_TYPE(CHAR_STRING), 0 }, /* ProductLabel */ \ { ZAP_EMPTY_DEFAULT(), 0x0000000F, 33, ZAP_TYPE(CHAR_STRING), 0 }, /* SerialNumber */ \ { ZAP_SIMPLE_DEFAULT(1), 0x00000011, 1, ZAP_TYPE(BOOLEAN), 0 }, /* Reachable */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000012, 33, ZAP_TYPE(CHAR_STRING), \ + ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* UniqueID */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ @@ -792,7 +794,7 @@ .eventCount = 0, \ },\ { \ - /* Endpoint: 0, Cluster: WiFi Network Diagnostics (server) */ \ + /* Endpoint: 0, Cluster: Wi-Fi Network Diagnostics (server) */ \ .clusterId = 0x00000036, \ .attributes = ZAP_ATTRIBUTE_INDEX(72), \ .attributeCount = 12, \ @@ -1029,7 +1031,7 @@ /* Endpoint: 3, Cluster: Bridged Device Basic Information (server) */ \ .clusterId = 0x00000039, \ .attributes = ZAP_ATTRIBUTE_INDEX(160), \ - .attributeCount = 16, \ + .attributeCount = 17, \ .clusterSize = 650, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ @@ -1041,7 +1043,7 @@ { \ /* Endpoint: 3, Cluster: Switch (server) */ \ .clusterId = 0x0000003B, \ - .attributes = ZAP_ATTRIBUTE_INDEX(176), \ + .attributes = ZAP_ATTRIBUTE_INDEX(177), \ .attributeCount = 4, \ .clusterSize = 8, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -1054,7 +1056,7 @@ { \ /* Endpoint: 3, Cluster: Temperature Measurement (server) */ \ .clusterId = 0x00000402, \ - .attributes = ZAP_ATTRIBUTE_INDEX(180), \ + .attributes = ZAP_ATTRIBUTE_INDEX(181), \ .attributeCount = 5, \ .clusterSize = 12, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -1067,7 +1069,7 @@ { \ /* Endpoint: 3, Cluster: Relative Humidity Measurement (server) */ \ .clusterId = 0x00000405, \ - .attributes = ZAP_ATTRIBUTE_INDEX(185), \ + .attributes = ZAP_ATTRIBUTE_INDEX(186), \ .attributeCount = 5, \ .clusterSize = 12, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -1121,22 +1123,22 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE, // Array of device types #define FIXED_DEVICE_TYPES \ { \ - { 0x00000016, 2 }, { 0x0000000E, 1 }, { 0x0000010A, 3 }, \ + { 0x00000012, 1 }, { 0x00000016, 3 }, { 0x0000000E, 2 }, { 0x0000010A, 3 }, \ { \ - 0x00000100, 2 \ + 0x00000100, 3 \ } \ } // Array of device type offsets #define FIXED_DEVICE_TYPE_OFFSETS \ { \ - 0, 1, 2, 3 \ + 0, 2, 3, 4 \ } // Array of device type lengths #define FIXED_DEVICE_TYPE_LENGTHS \ { \ - 1, 1, 1, 1 \ + 2, 1, 1, 1 \ } // Array of endpoint types supported on each endpoint diff --git a/applications/matter_bridge/snippets/onoff_plug/zap-generated/gen_config.h b/applications/matter_bridge/snippets/onoff_plug/zap-generated/gen_config.h index 6b38e8bb3e89..862d93c04882 100644 --- a/applications/matter_bridge/snippets/onoff_plug/zap-generated/gen_config.h +++ b/applications/matter_bridge/snippets/onoff_plug/zap-generated/gen_config.h @@ -126,7 +126,7 @@ #define MATTER_DM_PLUGIN_SOFTWARE_DIAGNOSTICS_SERVER #define MATTER_DM_PLUGIN_SOFTWARE_DIAGNOSTICS -// Use this macro to check if the server side of the WiFi Network Diagnostics cluster is included +// Use this macro to check if the server side of the Wi-Fi Network Diagnostics cluster is included #define ZCL_USING_WIFI_NETWORK_DIAGNOSTICS_CLUSTER_SERVER #define MATTER_DM_PLUGIN_WI_FI_NETWORK_DIAGNOSTICS_SERVER #define MATTER_DM_PLUGIN_WI_FI_NETWORK_DIAGNOSTICS diff --git a/applications/matter_bridge/src/app_task.cpp b/applications/matter_bridge/src/app_task.cpp index 8c76176e6a73..84ab79690b17 100644 --- a/applications/matter_bridge/src/app_task.cpp +++ b/applications/matter_bridge/src/app_task.cpp @@ -22,10 +22,6 @@ #include "bridge/ble_connectivity_manager.h" #endif -#ifdef CONFIG_CHIP_OTA_REQUESTOR -#include "dfu/ota/ota_util.h" -#endif /* CONFIG_BRIDGED_DEVICE_BT */ - #include #include #include @@ -126,10 +122,10 @@ CHIP_ERROR AppTask::RestoreBridgedDevices() LOG_INF("Loaded bridged device on endpoint id %d from the storage", device.mEndpointId); #ifdef CONFIG_BRIDGED_DEVICE_BT - BleBridgedDeviceFactory::CreateDevice(device.mDeviceType, btAddr, device.mNodeLabel, indexes[i], - device.mEndpointId); + BleBridgedDeviceFactory::CreateDevice(device.mDeviceType, btAddr, device.mUniqueID, device.mNodeLabel, + indexes[i], device.mEndpointId); #else - SimulatedBridgedDeviceFactory::CreateDevice(device.mDeviceType, device.mNodeLabel, + SimulatedBridgedDeviceFactory::CreateDevice(device.mDeviceType, device.mUniqueID, device.mNodeLabel, chip::Optional(indexes[i]), chip::Optional(device.mEndpointId)); #endif diff --git a/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.cpp b/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.cpp index 4a142b98a03a..41d15936d381 100644 --- a/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.cpp +++ b/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.cpp @@ -87,8 +87,10 @@ CHIP_ERROR StoreDevice(MatterBridgedDevice *device, BridgedDeviceDataProvider *p bridgedDevice.mEndpointId = device->GetEndpointId(); bridgedDevice.mDeviceType = device->GetDeviceType(); + bridgedDevice.mUniqueIDLength = strlen(device->GetUniqueID()); + memcpy(bridgedDevice.mUniqueID, device->GetUniqueID(), bridgedDevice.mUniqueIDLength); bridgedDevice.mNodeLabelLength = strlen(device->GetNodeLabel()); - memcpy(bridgedDevice.mNodeLabel, device->GetNodeLabel(), strlen(device->GetNodeLabel())); + memcpy(bridgedDevice.mNodeLabel, device->GetNodeLabel(), bridgedDevice.mNodeLabelLength); /* Fill BT address information as a part of implementation specific user data. */ bridgedDevice.mUserDataSize = sizeof(addr); @@ -122,8 +124,8 @@ CHIP_ERROR StoreDevice(MatterBridgedDevice *device, BridgedDeviceDataProvider *p return CHIP_NO_ERROR; } -CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8_t count, const char *nodeLabel, - BridgedDeviceDataProvider *provider, uint8_t indexes[] = nullptr, +CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8_t count, const char *uniqueID, + const char *nodeLabel, BridgedDeviceDataProvider *provider, uint8_t indexes[] = nullptr, uint16_t endpointIds[] = nullptr) { VerifyOrReturnError(provider != nullptr, CHIP_ERROR_INVALID_ARGUMENT, LOG_ERR("No valid data provider!")); @@ -144,7 +146,7 @@ CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8 uint8_t addedDevicesCount = 0; for (; addedDevicesCount < count; addedDevicesCount++) { newBridgedDevices[addedDevicesCount] = BleBridgedDeviceFactory::GetBridgedDeviceFactory().Create( - deviceTypes[addedDevicesCount], nodeLabel); + deviceTypes[addedDevicesCount], uniqueID, nodeLabel); if (!newBridgedDevices[addedDevicesCount]) { LOG_ERR("Cannot allocate Matter device of given type"); @@ -199,6 +201,7 @@ CHIP_ERROR AddMatterDevices(MatterBridgedDevice::DeviceType deviceTypes[], uint8 struct BluetoothConnectionContext { MatterBridgedDevice::DeviceType deviceTypes[BridgeManager::kMaxBridgedDevicesPerProvider]; uint8_t count; + char uniqueID[MatterBridgedDevice::kUniqueIDSize] = { 0 }; char nodeLabel[MatterBridgedDevice::kNodeLabelSize] = { 0 }; BLEBridgedDeviceProvider *provider; bt_addr_le_t address; @@ -223,7 +226,7 @@ CHIP_ERROR BluetoothDeviceConnected(bool success, void *context) chip::Optional endpointIds[BridgeManager::kMaxBridgedDevicesPerProvider]; /* AddMatterDevices takes the ownership of the passed provider object and will delete it in case the BridgeManager fails to accept this object. */ - CHIP_ERROR err = AddMatterDevices(ctx->deviceTypes, ctx->count, ctx->nodeLabel, ctx->provider); + CHIP_ERROR err = AddMatterDevices(ctx->deviceTypes, ctx->count, ctx->uniqueID, ctx->nodeLabel, ctx->provider); chip::Platform::Delete(ctx); return err; @@ -232,6 +235,14 @@ CHIP_ERROR BluetoothDeviceConnected(bool success, void *context) BleBridgedDeviceFactory::BridgedDeviceFactory &BleBridgedDeviceFactory::GetBridgedDeviceFactory() { + auto checkUniqueID = [](const char *uniqueID) { + /* If node uniqueID is provided it must fit the maximum defined length */ + if (!uniqueID || (uniqueID && (strlen(uniqueID) < Nrf::MatterBridgedDevice::kUniqueIDSize))) { + return true; + } + return false; + }; + auto checkLabel = [](const char *nodeLabel) { /* If node label is provided it must fit the maximum defined length */ if (!nodeLabel || (nodeLabel && (strlen(nodeLabel) < MatterBridgedDevice::kNodeLabelSize))) { @@ -243,47 +254,52 @@ BleBridgedDeviceFactory::BridgedDeviceFactory &BleBridgedDeviceFactory::GetBridg static BridgedDeviceFactory sBridgedDeviceFactory{ #ifdef CONFIG_BRIDGE_HUMIDITY_SENSOR_BRIDGED_DEVICE { MatterBridgedDevice::DeviceType::HumiditySensor, - [checkLabel](const char *nodeLabel) -> MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_ONOFF_LIGHT_BRIDGED_DEVICE { MatterBridgedDevice::DeviceType::OnOffLight, - [checkLabel](const char *nodeLabel) -> MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_TEMPERATURE_SENSOR_BRIDGED_DEVICE { MatterBridgedDevice::DeviceType::TemperatureSensor, - [checkLabel](const char *nodeLabel) -> MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE { MatterBridgedDevice::DeviceType::GenericSwitch, - [checkLabel](const char *nodeLabel) -> MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE { MatterBridgedDevice::DeviceType::OnOffLightSwitch, - [checkLabel](const char *nodeLabel) -> MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif }; @@ -311,8 +327,8 @@ BleBridgedDeviceFactory::BleDataProviderFactory &BleBridgedDeviceFactory::GetDat return sDeviceDataProvider; } -CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *nodeLabel, - uint8_t index, uint16_t endpointId) +CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *uniqueID, + const char *nodeLabel, uint8_t index, uint16_t endpointId) { CHIP_ERROR err; @@ -322,8 +338,8 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t bt */ BLEBridgedDeviceProvider *provider = BLEConnectivityManager::Instance().FindBLEProvider(btAddress); if (provider) { - return AddMatterDevices(reinterpret_cast(&deviceType), 1, nodeLabel, - provider, &index, &endpointId); + return AddMatterDevices(reinterpret_cast(&deviceType), 1, uniqueID, + nodeLabel, provider, &index, &endpointId); } ServiceUuid providerType; @@ -342,8 +358,8 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t bt /* Confirm that the first connection was done and this will be only the device recovery. */ provider->ConfirmInitialConnection(); provider->InitializeBridgedDevice(btAddress, nullptr, nullptr); - err = AddMatterDevices(reinterpret_cast(&deviceType), 1, nodeLabel, provider, - &index, &endpointId); + err = AddMatterDevices(reinterpret_cast(&deviceType), 1, uniqueID, nodeLabel, + provider, &index, &endpointId); if (err != CHIP_NO_ERROR) { return err; @@ -359,7 +375,8 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(int deviceType, bt_addr_le_t bt return err; } -CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *nodeLabel, +CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *uniqueID, + const char *nodeLabel, BLEConnectivityManager::ConnectionSecurityRequest *request) { /* Check if there is already existing provider for given address. @@ -396,6 +413,10 @@ CHIP_ERROR BleBridgedDeviceFactory::CreateDevice(uint16_t uuid, bt_addr_le_t btA contextPtr->deviceTypes[i] = deviceTypes[i]; } + if (uniqueID) { + strcpy(contextPtr->uniqueID, uniqueID); + } + if (nodeLabel) { strcpy(contextPtr->nodeLabel, nodeLabel); } diff --git a/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.h b/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.h index 6fe7fe5a8960..a1eb7275836e 100644 --- a/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.h +++ b/applications/matter_bridge/src/ble_providers/ble_bridged_device_factory.h @@ -49,8 +49,8 @@ enum ServiceUuid : uint16_t { LedButtonService = 0xbcd1, EnvironmentalSensorServ using UpdateAttributeCallback = Nrf::BridgedDeviceDataProvider::UpdateAttributeCallback; using InvokeCommandCallback = Nrf::BridgedDeviceDataProvider::InvokeCommandCallback; using DeviceType = uint16_t; -using BridgedDeviceFactory = Nrf::DeviceFactory; using BleDataProviderFactory = Nrf::DeviceFactory; +using BridgedDeviceFactory = Nrf::DeviceFactory; BridgedDeviceFactory &GetBridgedDeviceFactory(); BleDataProviderFactory &GetDataProviderFactory(); @@ -60,14 +60,15 @@ BleDataProviderFactory &GetDataProviderFactory(); * * @param deviceType the Matter device type of a bridged device to be created * @param btAddress the Bluetooth LE address of a device to be bridged with created Matter device + * @param uniqueID UniqueID of a Matter device to be created * @param nodeLabel node label of a Matter device to be created * @param index index that will be assigned to the created device * @param endpointId endpoint id that will be assigned to the created device * @return CHIP_NO_ERROR on success * @return other error code on failure */ -CHIP_ERROR CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *nodeLabel, uint8_t index, - uint16_t endpointId); +CHIP_ERROR CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *uniqueID, const char *nodeLabel, + uint8_t index, uint16_t endpointId); /** * @brief Create a bridged device using a specific Bluetooth LE service and leaving index and endpoint ID selection to @@ -75,13 +76,15 @@ CHIP_ERROR CreateDevice(int deviceType, bt_addr_le_t btAddress, const char *node * * @param uuid the Bluetooth LE service UUID of a bridged device provider that will be paired with bridged device * @param btAddress the Bluetooth LE address of a device to be bridged with created Matter device + * @param uniqueID UniqueID of a Matter device to be created * @param nodeLabel node label of a Matter device to be created * @param request address of connection request object for handling additional security information requiered by the connection. * Can be nullptr, if connection does not use security. * @return CHIP_NO_ERROR on success * @return other error code on failure */ -CHIP_ERROR CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *nodeLabel, Nrf::BLEConnectivityManager::ConnectionSecurityRequest * request = nullptr); +CHIP_ERROR CreateDevice(uint16_t uuid, bt_addr_le_t btAddress, const char *uniqueID, const char *nodeLabel, + Nrf::BLEConnectivityManager::ConnectionSecurityRequest *request = nullptr); /** * @brief Remove bridged device. diff --git a/applications/matter_bridge/src/bridge_shell.cpp b/applications/matter_bridge/src/bridge_shell.cpp index f3009210e630..0507eac1608d 100644 --- a/applications/matter_bridge/src/bridge_shell.cpp +++ b/applications/matter_bridge/src/bridge_shell.cpp @@ -5,6 +5,7 @@ */ #include "bridge_manager.h" +#include "platform/ConfigurationManager.h" #ifdef CONFIG_BRIDGED_DEVICE_BT #include "ble_bridged_device_factory.h" @@ -48,6 +49,9 @@ static int AddBridgedDeviceHandler(const struct shell *shell, size_t argc, char char *nodeLabel = nullptr; CHIP_ERROR result = CHIP_NO_ERROR; + char uniqueID[chip::DeviceLayer::ConfigurationManager::kMaxUniqueIDLength]; + chip::DeviceLayer::ConfigurationMgrImpl().GenerateUniqueId(uniqueID, sizeof(uniqueID)); + #if defined(CONFIG_BRIDGED_DEVICE_BT) int bleDeviceIndex = strtoul(argv[1], NULL, 0); @@ -72,9 +76,9 @@ static int AddBridgedDeviceHandler(const struct shell *shell, size_t argc, char Nrf::BLEConnectivityManager::ConnectionSecurityRequest request; request.mCallback = BluetoothConnectionSecurityRequest; request.mContext = const_cast(shell); - result = BleBridgedDeviceFactory::CreateDevice(uuid, address, nodeLabel, &request); + result = BleBridgedDeviceFactory::CreateDevice(uuid, address, uniqueID, nodeLabel, &request); #else - result = BleBridgedDeviceFactory::CreateDevice(uuid, address, nodeLabel); + result = BleBridgedDeviceFactory::CreateDevice(uuid, uniqueID, address, nodeLabel); #endif /* CONFIG_BT_SMP */ #elif defined(CONFIG_BRIDGED_DEVICE_SIMULATED) @@ -84,7 +88,7 @@ static int AddBridgedDeviceHandler(const struct shell *shell, size_t argc, char nodeLabel = argv[2]; } - result = SimulatedBridgedDeviceFactory::CreateDevice(deviceType, nodeLabel); + result = SimulatedBridgedDeviceFactory::CreateDevice(deviceType, uniqueID, nodeLabel); #else return -ENOTSUP; diff --git a/applications/matter_bridge/src/bridged_device_types/generic_switch.cpp b/applications/matter_bridge/src/bridged_device_types/generic_switch.cpp index 73699494c786..3ff12ad8d35d 100644 --- a/applications/matter_bridge/src/bridged_device_types/generic_switch.cpp +++ b/applications/matter_bridge/src/bridged_device_types/generic_switch.cpp @@ -53,7 +53,8 @@ static constexpr EmberAfDeviceType kBridgedGenericSwitchDeviceTypes[] = { static constexpr uint8_t kSwitchDataVersionSize = ArraySize(genericSwitchClusters); -GenericSwitchDevice::GenericSwitchDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) +GenericSwitchDevice::GenericSwitchDevice(const char *uniqueID, const char *nodeLabel) + : MatterBridgedDevice(uniqueID, nodeLabel) { mDataVersionSize = kSwitchDataVersionSize; mEp = &bridgedGenericSwitchEndpoint; diff --git a/applications/matter_bridge/src/bridged_device_types/generic_switch.h b/applications/matter_bridge/src/bridged_device_types/generic_switch.h index c93b95bbb8cc..be3c874d3234 100644 --- a/applications/matter_bridge/src/bridged_device_types/generic_switch.h +++ b/applications/matter_bridge/src/bridged_device_types/generic_switch.h @@ -10,7 +10,7 @@ class GenericSwitchDevice : public Nrf::MatterBridgedDevice { public: - GenericSwitchDevice(const char *nodeLabel); + GenericSwitchDevice(const char *uniqueID, const char *nodeLabel); uint16_t GetDeviceType() const override { return Nrf::MatterBridgedDevice::DeviceType::GenericSwitch; } CHIP_ERROR HandleRead(chip::ClusterId clusterId, chip::AttributeId attributeId, uint8_t *buffer, @@ -36,7 +36,7 @@ class GenericSwitchDevice : public Nrf::MatterBridgedDevice { private: CHIP_ERROR HandleReadSwitch(chip::AttributeId attributeId, uint8_t *buffer, uint16_t maxReadLength); - static constexpr uint16_t GetSwitchClusterRevision() { return 1; } + static constexpr uint16_t GetSwitchClusterRevision() { return 2; } /* According to the Matter 1.2 specification: Bit 1 -> MomentarySwitch in the Switch Cluster section. */ static constexpr uint32_t GetSwitchClusterFeatureMap() { return 2; } static constexpr uint32_t GetSwitchClusterNumberOfPositions() { return 2; } diff --git a/applications/matter_bridge/src/bridged_device_types/humidity_sensor.cpp b/applications/matter_bridge/src/bridged_device_types/humidity_sensor.cpp index e2092078b151..564758f2efff 100644 --- a/applications/matter_bridge/src/bridged_device_types/humidity_sensor.cpp +++ b/applications/matter_bridge/src/bridged_device_types/humidity_sensor.cpp @@ -48,7 +48,8 @@ static constexpr EmberAfDeviceType kBridgedHumidityDeviceTypes[] = { static constexpr uint8_t kHumidityDataVersionSize = ArraySize(bridgedHumidityClusters); -HumiditySensorDevice::HumiditySensorDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) +HumiditySensorDevice::HumiditySensorDevice(const char *uniqueID, const char *nodeLabel) + : MatterBridgedDevice(uniqueID, nodeLabel) { mDataVersionSize = kHumidityDataVersionSize; mEp = &bridgedHumidityEndpoint; diff --git a/applications/matter_bridge/src/bridged_device_types/humidity_sensor.h b/applications/matter_bridge/src/bridged_device_types/humidity_sensor.h index d3ceba22f67f..04209047b48e 100644 --- a/applications/matter_bridge/src/bridged_device_types/humidity_sensor.h +++ b/applications/matter_bridge/src/bridged_device_types/humidity_sensor.h @@ -10,7 +10,7 @@ class HumiditySensorDevice : public Nrf::MatterBridgedDevice { public: - HumiditySensorDevice(const char *nodeLabel); + HumiditySensorDevice(const char *uniqueID, const char *nodeLabel); uint16_t GetMeasuredValue() { return mMeasuredValue; } uint16_t GetMinMeasuredValue() { return mMinMeasuredValue; } diff --git a/applications/matter_bridge/src/bridged_device_types/onoff_light.cpp b/applications/matter_bridge/src/bridged_device_types/onoff_light.cpp index 981064a73c13..99ac86e35f64 100644 --- a/applications/matter_bridge/src/bridged_device_types/onoff_light.cpp +++ b/applications/matter_bridge/src/bridged_device_types/onoff_light.cpp @@ -85,7 +85,7 @@ DECLARE_DYNAMIC_CLUSTER(Clusters::OnOff::Id, onOffAttrs, ZAP_CLUSTER_MASK(SERVER DECLARE_DYNAMIC_ENDPOINT(bridgedLightEndpoint, bridgedLightClusters); -static constexpr uint8_t kBridgedOnOffEndpointVersion = 2; +static constexpr uint8_t kBridgedOnOffEndpointVersion = 3; static constexpr EmberAfDeviceType kBridgedOnOffDeviceTypes[] = { { static_cast(MatterBridgedDevice::DeviceType::OnOffLight), kBridgedOnOffEndpointVersion }, @@ -95,7 +95,8 @@ static constexpr EmberAfDeviceType kBridgedOnOffDeviceTypes[] = { static constexpr uint8_t kLightDataVersionSize = ArraySize(bridgedLightClusters); -OnOffLightDevice::OnOffLightDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) +OnOffLightDevice::OnOffLightDevice(const char *uniqueID, const char *nodeLabel) + : MatterBridgedDevice(uniqueID, nodeLabel) { mDataVersionSize = kLightDataVersionSize; mEp = &bridgedLightEndpoint; diff --git a/applications/matter_bridge/src/bridged_device_types/onoff_light.h b/applications/matter_bridge/src/bridged_device_types/onoff_light.h index 744da30c7e87..b59ac557fa5e 100644 --- a/applications/matter_bridge/src/bridged_device_types/onoff_light.h +++ b/applications/matter_bridge/src/bridged_device_types/onoff_light.h @@ -10,7 +10,7 @@ class OnOffLightDevice : public Nrf::MatterBridgedDevice { public: - OnOffLightDevice(const char *nodeLabel); + OnOffLightDevice(const char *uniqueID, const char *nodeLabel); bool GetOnOff() { return mOnOff; } void Toggle() { mOnOff = !mOnOff; } @@ -20,11 +20,12 @@ class OnOffLightDevice : public Nrf::MatterBridgedDevice { uint16_t maxReadLength) override; CHIP_ERROR HandleReadOnOff(chip::AttributeId attributeId, uint8_t *buffer, uint16_t maxReadLength); CHIP_ERROR HandleReadGroups(chip::AttributeId attributeId, uint8_t *buffer, uint16_t maxReadLength); - CHIP_ERROR HandleWrite(chip::ClusterId clusterId, chip::AttributeId attributeId, uint8_t *buffer, size_t size) override; + CHIP_ERROR HandleWrite(chip::ClusterId clusterId, chip::AttributeId attributeId, uint8_t *buffer, + size_t size) override; CHIP_ERROR HandleAttributeChange(chip::ClusterId clusterId, chip::AttributeId attributeId, void *data, size_t dataSize) override; - static constexpr uint16_t GetOnOffClusterRevision() { return 5; } + static constexpr uint16_t GetOnOffClusterRevision() { return 6; } static constexpr uint32_t GetOnOffFeatureMap() { return 1; } static constexpr uint16_t GetGroupsClusterRevision() { return 4; } static constexpr uint32_t GetGroupsFeatureMap() { return 1; } diff --git a/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.cpp b/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.cpp index 699d1cbc12b6..a69348bd0801 100644 --- a/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.cpp +++ b/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.cpp @@ -55,7 +55,7 @@ DECLARE_DYNAMIC_CLUSTER(Clusters::OnOff::Id, onOffClientAttrs, ZAP_CLUSTER_MASK( DECLARE_DYNAMIC_ENDPOINT(bridgedLightSwitchEndpoint, bridgedLightSwitchClusters); -static constexpr uint8_t kBridgedOnOffLightSwitchEndpointVersion = 2; +static constexpr uint8_t kBridgedOnOffLightSwitchEndpointVersion = 3; static constexpr EmberAfDeviceType kBridgedLightSwitchDeviceTypes[] = { { static_cast(MatterBridgedDevice::DeviceType::OnOffLightSwitch), @@ -66,7 +66,8 @@ static constexpr EmberAfDeviceType kBridgedLightSwitchDeviceTypes[] = { static constexpr uint8_t kLightSwitchDataVersionSize = ArraySize(bridgedLightSwitchClusters); -OnOffLightSwitchDevice::OnOffLightSwitchDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) +OnOffLightSwitchDevice::OnOffLightSwitchDevice(const char *uniqueID, const char *nodeLabel) + : MatterBridgedDevice(uniqueID, nodeLabel) { mDataVersionSize = kLightSwitchDataVersionSize; mEp = &bridgedLightSwitchEndpoint; diff --git a/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.h b/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.h index 3d2b151a9222..30971eed218a 100644 --- a/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.h +++ b/applications/matter_bridge/src/bridged_device_types/onoff_light_switch.h @@ -10,7 +10,7 @@ class OnOffLightSwitchDevice : public Nrf::MatterBridgedDevice { public: - OnOffLightSwitchDevice(const char *nodeLabel); + OnOffLightSwitchDevice(const char *uniqueID, const char *nodeLabel); uint16_t GetDeviceType() const override { return Nrf::MatterBridgedDevice::DeviceType::OnOffLightSwitch; } CHIP_ERROR HandleRead(chip::ClusterId clusterId, chip::AttributeId attributeId, uint8_t *buffer, @@ -38,7 +38,7 @@ class OnOffLightSwitchDevice : public Nrf::MatterBridgedDevice { return CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE; } - static constexpr uint16_t GetOnOffClusterRevision() { return 4; } + static constexpr uint16_t GetOnOffClusterRevision() { return 6; } static constexpr uint32_t GetOnOffFeatureMap() { return 1; } static constexpr uint16_t GetBindingClusterRevision() { return 1; } static constexpr uint32_t GetBindingFeatureMap() { return 0; } diff --git a/applications/matter_bridge/src/bridged_device_types/temperature_sensor.cpp b/applications/matter_bridge/src/bridged_device_types/temperature_sensor.cpp index 0a52e0de0baa..c667cc3faa93 100644 --- a/applications/matter_bridge/src/bridged_device_types/temperature_sensor.cpp +++ b/applications/matter_bridge/src/bridged_device_types/temperature_sensor.cpp @@ -44,7 +44,8 @@ static constexpr EmberAfDeviceType kBridgedTemperatureDeviceTypes[] = { static constexpr uint8_t kTemperatureDataVersionSize = ArraySize(bridgedTemperatureClusters); -TemperatureSensorDevice::TemperatureSensorDevice(const char *nodeLabel) : MatterBridgedDevice(nodeLabel) +TemperatureSensorDevice::TemperatureSensorDevice(const char *uniqueID, const char *nodeLabel) + : MatterBridgedDevice(uniqueID, nodeLabel) { mDataVersionSize = kTemperatureDataVersionSize; mEp = &bridgedTemperatureEndpoint; diff --git a/applications/matter_bridge/src/bridged_device_types/temperature_sensor.h b/applications/matter_bridge/src/bridged_device_types/temperature_sensor.h index 807f60e860dd..eb33e655de5b 100644 --- a/applications/matter_bridge/src/bridged_device_types/temperature_sensor.h +++ b/applications/matter_bridge/src/bridged_device_types/temperature_sensor.h @@ -10,7 +10,7 @@ class TemperatureSensorDevice : public Nrf::MatterBridgedDevice { public: - TemperatureSensorDevice(const char *nodeLabel); + TemperatureSensorDevice(const char *uniqueID, const char *nodeLabel); int16_t GetMeasuredValue() { return mMeasuredValue; } int16_t GetMinMeasuredValue() { return mMinMeasuredValue; } diff --git a/applications/matter_bridge/src/default_zap/bridge.zap b/applications/matter_bridge/src/default_zap/bridge.zap index 74b39e06c718..78711e85f821 100644 --- a/applications/matter_bridge/src/default_zap/bridge.zap +++ b/applications/matter_bridge/src/default_zap/bridge.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -17,12 +17,6 @@ } ], "package": [ - { - "pathRelativity": "relativeToZap", - "path": "../../../../../modules/lib/matter/src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" - }, { "pathRelativity": "relativeToZap", "path": "../../../../../modules/lib/matter/src/app/zap-templates/zcl/zcl.json", @@ -33,8 +27,9 @@ }, { "pathRelativity": "relativeToZap", - "path": "../../../../../matter/connectedhomeip/src/app/zap-templates/app-templates.json", + "path": "../../../../../modules/lib/matter/src/app/zap-templates/app-templates.json", "type": "gen-templates-json", + "category": "matter", "version": "chip-v1" } ], @@ -43,12 +38,18 @@ "id": 1, "name": "MA-rootdevice", "deviceTypeRef": { - "code": 22, + "code": 18, "profileId": 259, - "label": "MA-rootdevice", - "name": "MA-rootdevice" + "label": "MA-otarequestor", + "name": "MA-otarequestor" }, "deviceTypes": [ + { + "code": 18, + "profileId": 259, + "label": "MA-otarequestor", + "name": "MA-otarequestor" + }, { "code": 22, "profileId": 259, @@ -57,13 +58,15 @@ } ], "deviceVersions": [ - 2 + 1, + 3 ], "deviceIdentifiers": [ + 18, 22 ], - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeName": "MA-otarequestor", + "deviceTypeCode": 18, "deviceTypeProfileId": 259, "clusters": [ { @@ -170,6 +173,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -340,6 +359,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -366,7 +401,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -702,6 +737,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -744,7 +795,7 @@ "storageOption": "RAM", "singleton": 1, "bounded": 0, - "defaultValue": "3", + "defaultValue": "4", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -823,40 +874,6 @@ "isIncoming": 0, "isEnabled": 1 } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "1", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } ] }, { @@ -973,6 +990,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1216,6 +1249,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1258,7 +1307,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "1", + "defaultValue": "2", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -1556,6 +1605,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1642,7 +1707,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1658,7 +1723,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1674,7 +1739,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1690,7 +1755,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1892,6 +1957,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2065,7 +2146,7 @@ ] }, { - "name": "WiFi Network Diagnostics", + "name": "Wi-Fi Network Diagnostics", "code": 54, "mfgCode": null, "define": "WIFI_NETWORK_DIAGNOSTICS_CLUSTER", @@ -2428,6 +2509,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2712,6 +2809,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2916,6 +3029,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -2986,7 +3115,7 @@ } ], "deviceVersions": [ - 1 + 2 ], "deviceIdentifiers": [ 14 @@ -3135,7 +3264,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3333,7 +3462,7 @@ } ], "deviceVersions": [ - 2 + 3 ], "deviceIdentifiers": [ 256 @@ -3358,40 +3487,6 @@ "isIncoming": 0, "isEnabled": 1 } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "4", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } ] }, { @@ -3542,7 +3637,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -3810,40 +3905,6 @@ "isIncoming": 0, "isEnabled": 1 } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "4", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } ] }, { @@ -4074,7 +4135,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "6", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4606,6 +4667,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "UniqueID", + "code": 18, + "mfgCode": null, + "side": "server", + "type": "char_string", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": "", + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "GeneratedCommandList", "code": 65528, @@ -5188,4 +5265,4 @@ "parentEndpointIdentifier": null } ] -} +} \ No newline at end of file diff --git a/applications/matter_bridge/src/default_zap/zap-generated/access.h b/applications/matter_bridge/src/default_zap/zap-generated/access.h index 2c7811061dc9..4e47d8859f02 100644 --- a/applications/matter_bridge/src/default_zap/zap-generated/access.h +++ b/applications/matter_bridge/src/default_zap/zap-generated/access.h @@ -32,9 +32,6 @@ /* Cluster: On/Off, Attribute: StartUpOnOff, Privilege: view */ \ 0x0000001F, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ 0x0000001F, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -54,9 +51,6 @@ /* Cluster: On/Off, Attribute: StartUpOnOff, Privilege: view */ \ 0x00000000, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ 0x00000001, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -76,9 +70,6 @@ /* Cluster: On/Off, Attribute: StartUpOnOff, Privilege: view */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -250,18 +241,21 @@ #define GENERATED_ACCESS_READ_EVENT__CLUSTER { \ 0x0000001F, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ 0x0000001F, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + 0x0000001F, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } // Parallel array data (cluster, *event*, privilege) for read event #define GENERATED_ACCESS_READ_EVENT__EVENT { \ 0x00000000, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ 0x00000001, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + 0x00000002, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } // Parallel array data (cluster, event, *privilege*) for read event #define GENERATED_ACCESS_READ_EVENT__PRIVILEGE { \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } //////////////////////////////////////////////////////////////////////////////// diff --git a/applications/matter_bridge/src/default_zap/zap-generated/endpoint_config.h b/applications/matter_bridge/src/default_zap/zap-generated/endpoint_config.h index e50ff93fc4d7..e59a7ba280b1 100644 --- a/applications/matter_bridge/src/default_zap/zap-generated/endpoint_config.h +++ b/applications/matter_bridge/src/default_zap/zap-generated/endpoint_config.h @@ -59,7 +59,7 @@ } // This is an array of EmberAfAttributeMetadata structures. -#define GENERATED_ATTRIBUTE_COUNT 166 +#define GENERATED_ATTRIBUTE_COUNT 167 #define GENERATED_ATTRIBUTES \ { \ /* Endpoint: 0, Cluster: Descriptor (server) */ \ @@ -87,7 +87,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TargetsPerAccessControlEntry */ \ { ZAP_EMPTY_DEFAULT(), 0x00000004, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* AccessControlEntriesPerFabric */ \ - { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ + { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */ \ \ @@ -137,7 +137,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* MaxPathsPerInvoke \ */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ + { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: OTA Software Update Requestor (server) */ \ @@ -163,7 +163,7 @@ { ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BOOLEAN), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportsConcurrentConnection */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: Network Commissioning (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(INT8U), \ @@ -224,7 +224,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ - /* Endpoint: 0, Cluster: WiFi Network Diagnostics (server) */ \ + /* Endpoint: 0, Cluster: Wi-Fi Network Diagnostics (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 7, ZAP_TYPE(OCTET_STRING), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* BSSID */ \ { ZAP_EMPTY_DEFAULT(), 0x00000001, 1, ZAP_TYPE(ENUM8), \ @@ -298,7 +298,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), \ @@ -319,7 +319,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0x00), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 2, Cluster: Groups (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(BITMAP8), 0 }, /* NameSupport */ \ @@ -337,7 +337,7 @@ ZAP_ATTRIBUTE_MASK(MIN_MAX) | ZAP_ATTRIBUTE_MASK(WRITABLE) | \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* StartUpOnOff */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 2, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), \ @@ -375,6 +375,8 @@ { ZAP_EMPTY_DEFAULT(), 0x0000000E, 65, ZAP_TYPE(CHAR_STRING), 0 }, /* ProductLabel */ \ { ZAP_EMPTY_DEFAULT(), 0x0000000F, 33, ZAP_TYPE(CHAR_STRING), 0 }, /* SerialNumber */ \ { ZAP_SIMPLE_DEFAULT(1), 0x00000011, 1, ZAP_TYPE(BOOLEAN), 0 }, /* Reachable */ \ + { ZAP_EMPTY_DEFAULT(), 0x00000012, 33, ZAP_TYPE(CHAR_STRING), \ + ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* UniqueID */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ @@ -691,7 +693,7 @@ .eventCount = 0, \ },\ { \ - /* Endpoint: 0, Cluster: WiFi Network Diagnostics (server) */ \ + /* Endpoint: 0, Cluster: Wi-Fi Network Diagnostics (server) */ \ .clusterId = 0x00000036, \ .attributes = ZAP_ATTRIBUTE_INDEX(72), \ .attributeCount = 12, \ @@ -863,7 +865,7 @@ /* Endpoint: 2, Cluster: Bridged Device Basic Information (server) */ \ .clusterId = 0x00000039, \ .attributes = ZAP_ATTRIBUTE_INDEX(136), \ - .attributeCount = 16, \ + .attributeCount = 17, \ .clusterSize = 650, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ .functions = NULL, \ @@ -875,7 +877,7 @@ { \ /* Endpoint: 2, Cluster: Switch (server) */ \ .clusterId = 0x0000003B, \ - .attributes = ZAP_ATTRIBUTE_INDEX(152), \ + .attributes = ZAP_ATTRIBUTE_INDEX(153), \ .attributeCount = 4, \ .clusterSize = 8, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -888,7 +890,7 @@ { \ /* Endpoint: 2, Cluster: Temperature Measurement (server) */ \ .clusterId = 0x00000402, \ - .attributes = ZAP_ATTRIBUTE_INDEX(156), \ + .attributes = ZAP_ATTRIBUTE_INDEX(157), \ .attributeCount = 5, \ .clusterSize = 12, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -901,7 +903,7 @@ { \ /* Endpoint: 2, Cluster: Relative Humidity Measurement (server) */ \ .clusterId = 0x00000405, \ - .attributes = ZAP_ATTRIBUTE_INDEX(161), \ + .attributes = ZAP_ATTRIBUTE_INDEX(162), \ .attributeCount = 5, \ .clusterSize = 12, \ .mask = ZAP_CLUSTER_MASK(SERVER), \ @@ -954,22 +956,22 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE, // Array of device types #define FIXED_DEVICE_TYPES \ { \ - { 0x00000016, 2 }, { 0x0000000E, 1 }, \ + { 0x00000012, 1 }, { 0x00000016, 3 }, { 0x0000000E, 2 }, \ { \ - 0x00000100, 2 \ + 0x00000100, 3 \ } \ } // Array of device type offsets #define FIXED_DEVICE_TYPE_OFFSETS \ { \ - 0, 1, 2 \ + 0, 2, 3 \ } // Array of device type lengths #define FIXED_DEVICE_TYPE_LENGTHS \ { \ - 1, 1, 1 \ + 2, 1, 1 \ } // Array of endpoint types supported on each endpoint diff --git a/applications/matter_bridge/src/default_zap/zap-generated/gen_config.h b/applications/matter_bridge/src/default_zap/zap-generated/gen_config.h index 0e4109bbfebf..97e428944f90 100644 --- a/applications/matter_bridge/src/default_zap/zap-generated/gen_config.h +++ b/applications/matter_bridge/src/default_zap/zap-generated/gen_config.h @@ -125,7 +125,7 @@ #define MATTER_DM_PLUGIN_SOFTWARE_DIAGNOSTICS_SERVER #define MATTER_DM_PLUGIN_SOFTWARE_DIAGNOSTICS -// Use this macro to check if the server side of the WiFi Network Diagnostics cluster is included +// Use this macro to check if the server side of the Wi-Fi Network Diagnostics cluster is included #define ZCL_USING_WIFI_NETWORK_DIAGNOSTICS_CLUSTER_SERVER #define MATTER_DM_PLUGIN_WI_FI_NETWORK_DIAGNOSTICS_SERVER #define MATTER_DM_PLUGIN_WI_FI_NETWORK_DIAGNOSTICS diff --git a/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.cpp b/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.cpp index 051912fe1263..e2e3a92beec6 100644 --- a/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.cpp +++ b/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.cpp @@ -28,8 +28,10 @@ CHIP_ERROR StoreDevice(Nrf::MatterBridgedDevice *device, Nrf::BridgedDeviceDataP bridgedDevice.mEndpointId = device->GetEndpointId(); bridgedDevice.mDeviceType = device->GetDeviceType(); + bridgedDevice.mUniqueIDLength = strlen(device->GetUniqueID()); + memcpy(bridgedDevice.mUniqueID, device->GetUniqueID(), bridgedDevice.mUniqueIDLength); bridgedDevice.mNodeLabelLength = strlen(device->GetNodeLabel()); - memcpy(bridgedDevice.mNodeLabel, device->GetNodeLabel(), strlen(device->GetNodeLabel())); + memcpy(bridgedDevice.mNodeLabel, device->GetNodeLabel(), bridgedDevice.mNodeLabelLength); if (!Nrf::BridgeStorageManager::Instance().StoreBridgedDevice(bridgedDevice, index)) { LOG_ERR("Failed to store bridged device"); @@ -62,6 +64,14 @@ CHIP_ERROR StoreDevice(Nrf::MatterBridgedDevice *device, Nrf::BridgedDeviceDataP SimulatedBridgedDeviceFactory::BridgedDeviceFactory &SimulatedBridgedDeviceFactory::GetBridgedDeviceFactory() { + auto checkUniqueID = [](const char *uniqueID) { + /* If node uniqueID is provided it must fit the maximum defined length */ + if (!uniqueID || (uniqueID && (strlen(uniqueID) < Nrf::MatterBridgedDevice::kUniqueIDSize))) { + return true; + } + return false; + }; + auto checkLabel = [](const char *nodeLabel) { /* If node label is provided it must fit the maximum defined length */ if (!nodeLabel || (nodeLabel && (strlen(nodeLabel) < Nrf::MatterBridgedDevice::kNodeLabelSize))) { @@ -73,47 +83,52 @@ SimulatedBridgedDeviceFactory::BridgedDeviceFactory &SimulatedBridgedDeviceFacto static BridgedDeviceFactory sBridgedDeviceFactory{ #ifdef CONFIG_BRIDGE_ONOFF_LIGHT_BRIDGED_DEVICE { Nrf::MatterBridgedDevice::DeviceType::OnOffLight, - [checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_GENERIC_SWITCH_BRIDGED_DEVICE { Nrf::MatterBridgedDevice::DeviceType::GenericSwitch, - [checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_ONOFF_LIGHT_SWITCH_BRIDGED_DEVICE { Nrf::MatterBridgedDevice::DeviceType::OnOffLightSwitch, - [checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_TEMPERATURE_SENSOR_BRIDGED_DEVICE { Nrf::MatterBridgedDevice::DeviceType::TemperatureSensor, - [checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif #ifdef CONFIG_BRIDGE_HUMIDITY_SENSOR_BRIDGED_DEVICE { Nrf::MatterBridgedDevice::DeviceType::HumiditySensor, - [checkLabel](const char *nodeLabel) -> Nrf::MatterBridgedDevice * { - if (!checkLabel(nodeLabel)) { + [checkUniqueID, checkLabel](const char *uniqueID, + const char *nodeLabel) -> Nrf::MatterBridgedDevice * { + if (!checkUniqueID(uniqueID) || !checkLabel(nodeLabel)) { return nullptr; } - return chip::Platform::New(nodeLabel); + return chip::Platform::New(uniqueID, nodeLabel); } }, #endif }; @@ -157,7 +172,7 @@ SimulatedBridgedDeviceFactory::SimulatedDataProviderFactory &SimulatedBridgedDev return sDeviceDataProvider; } -CHIP_ERROR SimulatedBridgedDeviceFactory::CreateDevice(int deviceType, const char *nodeLabel, +CHIP_ERROR SimulatedBridgedDeviceFactory::CreateDevice(int deviceType, const char *uniqueID, const char *nodeLabel, chip::Optional index, chip::Optional endpointId) { @@ -168,8 +183,8 @@ CHIP_ERROR SimulatedBridgedDeviceFactory::CreateDevice(int deviceType, const cha VerifyOrReturnError(provider != nullptr, CHIP_ERROR_INVALID_ARGUMENT, LOG_ERR("No valid data provider!")); - auto *newBridgedDevice = - GetBridgedDeviceFactory().Create(static_cast(deviceType), nodeLabel); + auto *newBridgedDevice = GetBridgedDeviceFactory().Create( + static_cast(deviceType), uniqueID, nodeLabel); Nrf::MatterBridgedDevice *newBridgedDevices[] = { newBridgedDevice }; diff --git a/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.h b/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.h index 0604a03e8944..fd98b7600b8e 100644 --- a/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.h +++ b/applications/matter_bridge/src/simulated_providers/simulated_bridged_device_factory.h @@ -41,8 +41,8 @@ namespace SimulatedBridgedDeviceFactory using UpdateAttributeCallback = Nrf::BridgedDeviceDataProvider::UpdateAttributeCallback; using InvokeCommandCallback = Nrf::BridgedDeviceDataProvider::InvokeCommandCallback; using DeviceType = uint16_t; -using BridgedDeviceFactory = Nrf::DeviceFactory; using SimulatedDataProviderFactory = Nrf::DeviceFactory; +using BridgedDeviceFactory = Nrf::DeviceFactory; BridgedDeviceFactory &GetBridgedDeviceFactory(); SimulatedDataProviderFactory &GetDataProviderFactory(); @@ -51,6 +51,7 @@ SimulatedDataProviderFactory &GetDataProviderFactory(); * @brief Create a bridged device. * * @param deviceType the Matter device type of a bridged device to be created + * @param uniqueID UniqueID of a Matter device to be created * @param nodeLabel node label of a Matter device to be created * @param index optional index object that shall have a valid value set if the value is meant * to be used to index assignment, or shall not have a value set if the default index assignment should be used. @@ -60,7 +61,7 @@ SimulatedDataProviderFactory &GetDataProviderFactory(); * @return CHIP_NO_ERROR on success * @return other error code on failure */ -CHIP_ERROR CreateDevice(int deviceType, const char *nodeLabel, +CHIP_ERROR CreateDevice(int deviceType, const char *uniqueID, const char *nodeLabel, chip::Optional index = chip::Optional(), chip::Optional endpointId = chip::Optional()); diff --git a/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.cpp b/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.cpp index f8b3570a768a..fe03092fe644 100644 --- a/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.cpp +++ b/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.cpp @@ -56,24 +56,23 @@ void SimulatedHumiditySensorDataProvider::TimerTimeoutCallback(k_timer *timer) return; } - SimulatedHumiditySensorDataProvider *provider = - reinterpret_cast(timer->user_data); - - /* Get some random data to emulate sensor measurements. */ - provider->mHumidity = - chip::Crypto::GetRandU16() % (kMaxRandomTemperature - kMinRandomTemperature) + kMinRandomTemperature; - - LOG_INF("SimulatedHumiditySensorDataProvider: Updated humidity value to %d", provider->mHumidity); - - DeviceLayer::PlatformMgr().ScheduleWork(NotifyAttributeChange, reinterpret_cast(provider)); -} - -void SimulatedHumiditySensorDataProvider::NotifyAttributeChange(intptr_t context) -{ - SimulatedHumiditySensorDataProvider *provider = - reinterpret_cast(context); - - provider->NotifyUpdateState(Clusters::RelativeHumidityMeasurement::Id, - Clusters::RelativeHumidityMeasurement::Attributes::MeasuredValue::Id, - &provider->mHumidity, sizeof(provider->mHumidity)); + DeviceLayer::PlatformMgr().ScheduleWork( + [](intptr_t p) { + SimulatedHumiditySensorDataProvider *provider = + reinterpret_cast(p); + + /* Get some random data to emulate sensor measurements. */ + provider->mHumidity = + chip::Crypto::GetRandU16() % (kMaxRandomTemperature - kMinRandomTemperature) + + kMinRandomTemperature; + + LOG_INF("SimulatedHumiditySensorDataProvider: Updated humidity value to %d", + provider->mHumidity); + + provider->NotifyUpdateState( + Clusters::RelativeHumidityMeasurement::Id, + Clusters::RelativeHumidityMeasurement::Attributes::MeasuredValue::Id, + &provider->mHumidity, sizeof(provider->mHumidity)); + }, + reinterpret_cast(timer->user_data)); } diff --git a/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.h b/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.h index 2402364a07ac..63f03154ba5b 100644 --- a/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.h +++ b/applications/matter_bridge/src/simulated_providers/simulated_humidity_sensor_data_provider.h @@ -17,8 +17,6 @@ class SimulatedHumiditySensorDataProvider : public Nrf::BridgedDeviceDataProvide size_t dataSize) override; CHIP_ERROR UpdateState(chip::ClusterId clusterId, chip::AttributeId attributeId, uint8_t *buffer) override; - static void NotifyAttributeChange(intptr_t context); - private: static void TimerTimeoutCallback(k_timer *timer); diff --git a/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.cpp b/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.cpp index 92deb8269bdd..a43235c482b4 100644 --- a/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.cpp +++ b/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.cpp @@ -56,24 +56,22 @@ void SimulatedTemperatureSensorDataProvider::TimerTimeoutCallback(k_timer *timer return; } - SimulatedTemperatureSensorDataProvider *provider = - reinterpret_cast(timer->user_data); - - /* Get some random data to emulate sensor measurements. */ - provider->mTemperature = - chip::Crypto::GetRandU16() % (kMaxRandomTemperature - kMinRandomTemperature) + kMinRandomTemperature; - - LOG_INF("SimulatedTemperatureSensorDataProvider: Updated temperature value to %d", provider->mTemperature); - - DeviceLayer::PlatformMgr().ScheduleWork(NotifyAttributeChange, reinterpret_cast(provider)); -} - -void SimulatedTemperatureSensorDataProvider::NotifyAttributeChange(intptr_t context) -{ - SimulatedTemperatureSensorDataProvider *provider = - reinterpret_cast(context); - - provider->NotifyUpdateState(Clusters::TemperatureMeasurement::Id, - Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Id, - &provider->mTemperature, sizeof(provider->mTemperature)); + DeviceLayer::PlatformMgr().ScheduleWork( + [](intptr_t p) { + SimulatedTemperatureSensorDataProvider *provider = + reinterpret_cast(p); + + /* Get some random data to emulate sensor measurements. */ + provider->mTemperature = + chip::Crypto::GetRandU16() % (kMaxRandomTemperature - kMinRandomTemperature) + + kMinRandomTemperature; + + LOG_INF("SimulatedTemperatureSensorDataProvider: Updated temperature value to %d", + provider->mTemperature); + + provider->NotifyUpdateState(Clusters::TemperatureMeasurement::Id, + Clusters::TemperatureMeasurement::Attributes::MeasuredValue::Id, + &provider->mTemperature, sizeof(provider->mTemperature)); + }, + reinterpret_cast(timer->user_data)); } diff --git a/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.h b/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.h index dab89ffb2901..bf007f42da40 100644 --- a/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.h +++ b/applications/matter_bridge/src/simulated_providers/simulated_temperature_sensor_data_provider.h @@ -12,7 +12,9 @@ class SimulatedTemperatureSensorDataProvider : public Nrf::BridgedDeviceDataProvider { public: - SimulatedTemperatureSensorDataProvider(UpdateAttributeCallback updateCallback, InvokeCommandCallback commandCallback) : Nrf::BridgedDeviceDataProvider(updateCallback, commandCallback) + SimulatedTemperatureSensorDataProvider(UpdateAttributeCallback updateCallback, + InvokeCommandCallback commandCallback) + : Nrf::BridgedDeviceDataProvider(updateCallback, commandCallback) { } ~SimulatedTemperatureSensorDataProvider() { k_timer_stop(&mTimer); } @@ -23,8 +25,6 @@ class SimulatedTemperatureSensorDataProvider : public Nrf::BridgedDeviceDataProv CHIP_ERROR UpdateState(chip::ClusterId clusterId, chip::AttributeId attributeId, uint8_t *buffer) override; private: - static void NotifyAttributeChange(intptr_t context); - static constexpr uint16_t kMeasurementsIntervalMs = 10000; static constexpr int16_t kMinRandomTemperature = -10; static constexpr int16_t kMaxRandomTemperature = 10; diff --git a/applications/matter_bridge/sysbuild/ipc_radio/boards/nrf5340dk_nrf5340_cpunet.conf b/applications/matter_bridge/sysbuild/ipc_radio/boards/nrf5340dk_nrf5340_cpunet.conf index f374982e3a69..4b4bc4779acc 100644 --- a/applications/matter_bridge/sysbuild/ipc_radio/boards/nrf5340dk_nrf5340_cpunet.conf +++ b/applications/matter_bridge/sysbuild/ipc_radio/boards/nrf5340dk_nrf5340_cpunet.conf @@ -7,9 +7,6 @@ # Set 10 BLE connections, as it is an upper limit supported caused by RAM usage due to using Thread and BLE at same time. CONFIG_BT_MAX_CONN=10 -# Set ACL RX count to CONFIG_BT_MAX_CONN + 1, as it is expected that CONFIG_BT_BUF_ACL_RX_COUNT > CONFIG_BT_MAX_CONN. -CONFIG_BT_BUF_ACL_RX_COUNT=11 - # Decrease stack and buffer sizes to free some RAM and support 10 BLE connections CONFIG_MAIN_STACK_SIZE=512 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512 diff --git a/applications/matter_bridge/sysbuild/ipc_radio/overlay-bt_max_connections_net.conf b/applications/matter_bridge/sysbuild/ipc_radio/overlay-bt_max_connections_net.conf index 52966d80e502..37aecb94e2cc 100644 --- a/applications/matter_bridge/sysbuild/ipc_radio/overlay-bt_max_connections_net.conf +++ b/applications/matter_bridge/sysbuild/ipc_radio/overlay-bt_max_connections_net.conf @@ -7,9 +7,6 @@ # Set 20 BLE connections, as it is an upper limit supported by the Soft Device Controller CONFIG_BT_MAX_CONN=20 -# Set ACL RX count to CONFIG_BT_MAX_CONN + 1, as it is expected that CONFIG_BT_BUF_ACL_RX_COUNT > CONFIG_BT_MAX_CONN. -CONFIG_BT_BUF_ACL_RX_COUNT=21 - # Decrease stack and buffer sizes to free some RAM and support 20 BLE connections CONFIG_MAIN_STACK_SIZE=512 CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512 diff --git a/applications/matter_bridge/sysbuild/ipc_radio/prj.conf b/applications/matter_bridge/sysbuild/ipc_radio/prj.conf index 24fa3a767efe..d2a5c115037a 100644 --- a/applications/matter_bridge/sysbuild/ipc_radio/prj.conf +++ b/applications/matter_bridge/sysbuild/ipc_radio/prj.conf @@ -27,13 +27,9 @@ CONFIG_BT_BUF_ACL_TX_SIZE=251 CONFIG_BT_CTLR_DATA_LENGTH_MAX=251 CONFIG_BT_CTLR_PHY_2M=n -# Set ACL RX count to CONFIG_BT_MAX_CONN + 1, as it is expected that CONFIG_BT_BUF_ACL_RX_COUNT > CONFIG_BT_MAX_CONN. -CONFIG_BT_BUF_ACL_RX_COUNT=11 - # Debug and assert configuration CONFIG_ASSERT=y CONFIG_DEBUG_INFO=y -CONFIG_EXCEPTION_STACK_TRACE=y CONFIG_RESET_ON_FATAL_ERROR=n CONFIG_REBOOT=n diff --git a/applications/matter_bridge/sysbuild/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay b/applications/matter_bridge/sysbuild/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay index 46485bd08db6..f0997a0c6911 100644 --- a/applications/matter_bridge/sysbuild/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay +++ b/applications/matter_bridge/sysbuild/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay @@ -10,3 +10,8 @@ zephyr,code-partition = &boot_partition; }; }; + +// Disable GPIO forwarder for nRF7002 EK compatibility +&gpio_fwd { + status = "disabled"; +}; diff --git a/applications/matter_weather_station/README.rst b/applications/matter_weather_station/README.rst index eb603dc18a12..cfa1d5d8b9f1 100644 --- a/applications/matter_weather_station/README.rst +++ b/applications/matter_weather_station/README.rst @@ -23,7 +23,7 @@ The application supports the following development kits: .. table-from-sample-yaml:: -To commission the weather station device and control it remotely through a Thread or Wi-Fi network, you also need a Matter controller device :ref:`configured on PC or smartphone `. +To commission the weather station device and control it remotely through a Thread or Wi-Fi® network, you also need a Matter controller device :ref:`configured on PC or smartphone `. This requires additional hardware depending on your setup. The recommended way of getting measurement values is using the mobile Matter controller application that comes with a graphical interface, performs measurements automatically and visualizes the data. @@ -223,7 +223,7 @@ To build this application to work with the nRF7002 Wi-Fi expansion board: Generating factory data ======================= -To enable factory data support, you need to select the ``overlay-factory_data`` configuration overlay from the available application :ref:`build configuration overlays `, set the ``SB_CONFIG_MATTER_FACTORY_DATA_GENERATE`` kconfig option to ``y``, and use the ``factory_data`` file suffix. +To enable factory data support, you need to select the ``overlay-factory_data`` configuration overlay from the available application :ref:`build configuration overlays `, set the ``SB_CONFIG_MATTER_FACTORY_DATA_GENERATE`` Kconfig option to ``y``, and use the ``factory_data`` file suffix. You can generate new factory data set when building for the given board target by invoking the following command: .. code-block:: console diff --git a/applications/matter_weather_station/VERSION b/applications/matter_weather_station/VERSION index b5c2c35ecc1a..9361645541a7 100644 --- a/applications/matter_weather_station/VERSION +++ b/applications/matter_weather_station/VERSION @@ -1,5 +1,5 @@ VERSION_MAJOR = 2 -VERSION_MINOR = 7 +VERSION_MINOR = 8 PATCHLEVEL = 99 VERSION_TWEAK = 0 EXTRAVERSION = diff --git a/applications/matter_weather_station/app.overlay b/applications/matter_weather_station/app.overlay index e144314bd497..6ad93e4cb38d 100644 --- a/applications/matter_weather_station/app.overlay +++ b/applications/matter_weather_station/app.overlay @@ -25,9 +25,9 @@ buzzer-pwm = &buzzer; }; - sram@2007EB40 { + sram@2007E340 { compatible = "zephyr,memory-region", "mmio-sram"; - reg = <0x2007EB40 0x14C0>; + reg = <0x2007E340 0x1CC0>; zephyr,memory-region = "DiagnosticLogMem"; status = "okay"; retainedmem { @@ -44,20 +44,20 @@ checksum = <2>; }; - /* Reserve 4 kB for the end user logs. */ - end_user_logs_retention: retention@c0 { + /* Reserve 6 kB for the network logs. */ + network_logs_retention: retention@c0 { compatible = "zephyr,retention"; status = "okay"; - reg = <0xC0 0x1000>; + reg = <0xC0 0x1800>; prefix = [06 03]; checksum = <2>; }; - /* Reserve 1 kB for the network logs. */ - network_logs_retention: retention@10c0 { + /* Reserve 1 kB for the end user logs. */ + end_user_logs_retention: retention@18c0 { compatible = "zephyr,retention"; status = "okay"; - reg = <0x10C0 0x400>; + reg = <0x18C0 0x400>; prefix = [05 02]; checksum = <2>; }; @@ -100,7 +100,7 @@ status = "disabled"; }; -/* Reduce SRAM0 usage by 5312B to account for non-init area */ +/* Reduce SRAM0 usage by 7360 B to account for non-init area */ &sram0 { - reg = <0x20000000 0x7EB40>; + reg = <0x20000000 0x7E340>; }; diff --git a/applications/matter_weather_station/prj.conf b/applications/matter_weather_station/prj.conf index 8e7c76d5043d..9cd00a582f84 100644 --- a/applications/matter_weather_station/prj.conf +++ b/applications/matter_weather_station/prj.conf @@ -75,9 +75,6 @@ CONFIG_USB_DEVICE_PID=0x530D CONFIG_UART_LINE_CTRL=y CONFIG_SHELL_BACKEND_SERIAL_INIT_PRIORITY=51 -# Use minimal C library instead of the Picolib -CONFIG_MINIMAL_LIBC=y - # Enable Diagnostic Logs feature CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS=y CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_CRASH_LOGS=y @@ -90,6 +87,3 @@ CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_TEST=y # Set the NVS sector count to match the settings partition size that is 64 kB for this application. CONFIG_SETTINGS_NVS_SECTOR_COUNT=16 - -# DAC Migration -CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY=y diff --git a/applications/matter_weather_station/prj_release.conf b/applications/matter_weather_station/prj_release.conf index e98884b0a596..7f25eb267cda 100644 --- a/applications/matter_weather_station/prj_release.conf +++ b/applications/matter_weather_station/prj_release.conf @@ -66,9 +66,6 @@ CONFIG_ASSERT_NO_FILE_INFO=y # Disable USB CDC ACM CONFIG_BOARD_SERIAL_BACKEND_CDC_ACM=n -# Use minimal C library instead of the Picolib -CONFIG_MINIMAL_LIBC=y - # Enable Watchdog CONFIG_NCS_SAMPLE_MATTER_WATCHDOG=y @@ -84,6 +81,3 @@ CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_TEST=y # Set the NVS sector count to match the settings partition size that is 64 kB for this application. CONFIG_SETTINGS_NVS_SECTOR_COUNT=16 - -# DAC Migration -CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY=y diff --git a/applications/matter_weather_station/sample.yaml b/applications/matter_weather_station/sample.yaml index 816ff21cdfdd..7ab54a873b38 100644 --- a/applications/matter_weather_station/sample.yaml +++ b/applications/matter_weather_station/sample.yaml @@ -11,48 +11,69 @@ tests: platform_exclude: thingy53/nrf5340/cpuapp/ns integration_platforms: - thingy53/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_weather_station.debug: sysbuild: true build_only: true - extra_args: OVERLAY_CONFIG=overlay-factory_data.conf - FILE_SUFFIX=factory_data - CONFIG_CHIP_FACTORY_DATA=y SB_CONFIG_MATTER_FACTORY_DATA_GENERATE=y + extra_args: + - OVERLAY_CONFIG=overlay-factory_data.conf + - FILE_SUFFIX=factory_data + - CONFIG_CHIP_FACTORY_DATA=y + - SB_CONFIG_MATTER_FACTORY_DATA_GENERATE=y platform_allow: thingy53/nrf5340/cpuapp platform_exclude: thingy53/nrf5340/cpuapp/ns integration_platforms: - thingy53/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_weather_station.release: sysbuild: true build_only: true - extra_args: OVERLAY_CONFIG=overlay-factory_data.conf CONF_FILE=prj_release.conf - FILE_SUFFIX=factory_data CONFIG_CHIP_FACTORY_DATA=y - SB_CONFIG_MATTER_FACTORY_DATA_GENERATE=y + extra_args: + - OVERLAY_CONFIG=overlay-factory_data.conf + - CONF_FILE=prj_release.conf + - FILE_SUFFIX=factory_data + - CONFIG_CHIP_FACTORY_DATA=y + - SB_CONFIG_MATTER_FACTORY_DATA_GENERATE=y platform_allow: thingy53/nrf5340/cpuapp platform_exclude: thingy53/nrf5340/cpuapp/ns integration_platforms: - thingy53/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_weather_station.lto: sysbuild: true build_only: true - extra_args: OVERLAY_CONFIG=overlay-factory_data.conf - FILE_SUFFIX=factory_data CONFIG_CHIP_FACTORY_DATA=y - SB_CONFIG_MATTER_FACTORY_DATA_GENERATE=y - CONFIG_LTO=y CONFIG_ISR_TABLES_LOCAL_DECLARATION=y + extra_args: + - OVERLAY_CONFIG=overlay-factory_data.conf + - FILE_SUFFIX=factory_data + - CONFIG_CHIP_FACTORY_DATA=y + - SB_CONFIG_MATTER_FACTORY_DATA_GENERATE=y + - CONFIG_LTO=y + - CONFIG_ISR_TABLES_LOCAL_DECLARATION=y platform_allow: thingy53/nrf5340/cpuapp platform_exclude: thingy53/nrf5340/cpuapp/ns integration_platforms: - thingy53/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter applications.matter_weather_station.nrf7002eb: sysbuild: true build_only: true - extra_args: matter_weather_station_SHIELD=nrf7002eb FILE_SUFFIX=release - SB_CONFIG_WIFI_NRF70=y CONFIG_CHIP_WIFI=y + extra_args: + - matter_weather_station_SHIELD=nrf7002eb + - FILE_SUFFIX=release + - SB_CONFIG_WIFI_NRF70=y + - CONFIG_CHIP_WIFI=y platform_allow: thingy53/nrf5340/cpuapp platform_exclude: thingy53/nrf5340/cpuapp/ns integration_platforms: - thingy53/nrf5340/cpuapp - tags: sysbuild ci_applications_matter + tags: + - sysbuild + - ci_applications_matter diff --git a/applications/matter_weather_station/src/app_task.cpp b/applications/matter_weather_station/src/app_task.cpp index a6d2b6a88b20..8dd9f1f39ed1 100644 --- a/applications/matter_weather_station/src/app_task.cpp +++ b/applications/matter_weather_station/src/app_task.cpp @@ -14,10 +14,6 @@ #include "board/board.h" #include "board/led_widget.h" -#ifdef CONFIG_CHIP_OTA_REQUESTOR -#include "dfu/ota/ota_util.h" -#endif - #ifdef CONFIG_MCUMGR_TRANSPORT_BT #include "dfu/smp/dfu_over_smp.h" #endif diff --git a/applications/matter_weather_station/src/default_zap/weather-station.zap b/applications/matter_weather_station/src/default_zap/weather-station.zap index b804f43017b1..b22bcbf26509 100644 --- a/applications/matter_weather_station/src/default_zap/weather-station.zap +++ b/applications/matter_weather_station/src/default_zap/weather-station.zap @@ -1,6 +1,6 @@ { "fileFormat": 2, - "featureLevel": 100, + "featureLevel": 103, "creator": "zap", "keyValuePairs": [ { @@ -19,17 +19,18 @@ "package": [ { "pathRelativity": "relativeToZap", - "path": "../../../../modules/lib/matter/src/app/zap-templates/app-templates.json", - "type": "gen-templates-json", - "version": "chip-v1" - }, - { - "pathRelativity": "relativeToZap", - "path": "../../../../modules/lib/matter/src/app/zap-templates/zcl/zcl.json", + "path": "../../../../../modules/lib/matter/src/app/zap-templates/zcl/zcl.json", "type": "zcl-properties", "category": "matter", "version": 1, "description": "Matter SDK ZCL data" + }, + { + "pathRelativity": "relativeToZap", + "path": "../../../../../modules/lib/matter/src/app/zap-templates/app-templates.json", + "type": "gen-templates-json", + "category": "matter", + "version": "chip-v1" } ], "endpointTypes": [ @@ -37,12 +38,18 @@ "id": 1, "name": "MA-rootdevice", "deviceTypeRef": { - "code": 22, + "code": 18, "profileId": 259, - "label": "MA-rootdevice", - "name": "MA-rootdevice" + "label": "MA-otarequestor", + "name": "MA-otarequestor" }, "deviceTypes": [ + { + "code": 18, + "profileId": 259, + "label": "MA-otarequestor", + "name": "MA-otarequestor" + }, { "code": 22, "profileId": 259, @@ -51,13 +58,15 @@ } ], "deviceVersions": [ - 2 + 1, + 3 ], "deviceIdentifiers": [ + 18, 22 ], - "deviceTypeName": "MA-rootdevice", - "deviceTypeCode": 22, + "deviceTypeName": "MA-otarequestor", + "deviceTypeCode": 18, "deviceTypeProfileId": 259, "clusters": [ { @@ -164,6 +173,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -334,6 +359,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -360,7 +401,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0", + "defaultValue": "1", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -696,6 +737,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 1, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -738,7 +795,7 @@ "storageOption": "RAM", "singleton": 1, "bounded": 0, - "defaultValue": "3", + "defaultValue": "4", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -794,40 +851,6 @@ "isIncoming": 0, "isEnabled": 1 } - ], - "attributes": [ - { - "name": "FeatureMap", - "code": 65532, - "mfgCode": null, - "side": "client", - "type": "bitmap32", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "0", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - }, - { - "name": "ClusterRevision", - "code": 65533, - "mfgCode": null, - "side": "client", - "type": "int16u", - "included": 1, - "storageOption": "RAM", - "singleton": 0, - "bounded": 0, - "defaultValue": "1", - "reportable": 1, - "minInterval": 1, - "maxInterval": 65534, - "reportableChange": 0 - } ] }, { @@ -944,6 +967,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1268,7 +1307,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "3", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1446,6 +1485,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1488,7 +1543,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "0x0001", + "defaultValue": "2", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -1778,6 +1833,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -1864,7 +1935,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1880,7 +1951,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1896,7 +1967,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -1912,7 +1983,7 @@ "storageOption": "External", "singleton": 0, "bounded": 0, - "defaultValue": "", + "defaultValue": null, "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -2114,6 +2185,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -3386,7 +3473,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "3", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -3508,6 +3595,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -3792,6 +3895,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -3996,6 +4115,22 @@ "maxInterval": 65534, "reportableChange": 0 }, + { + "name": "EventList", + "code": 65530, + "mfgCode": null, + "side": "server", + "type": "array", + "included": 1, + "storageOption": "External", + "singleton": 0, + "bounded": 0, + "defaultValue": null, + "reportable": 1, + "minInterval": 1, + "maxInterval": 65534, + "reportableChange": 0 + }, { "name": "AttributeList", "code": 65531, @@ -4192,7 +4327,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "2", + "defaultValue": "3", "reportable": 1, "minInterval": 1, "maxInterval": 65534, @@ -4353,7 +4488,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -4806,7 +4941,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, @@ -5259,7 +5394,7 @@ "storageOption": "RAM", "singleton": 0, "bounded": 0, - "defaultValue": "4", + "defaultValue": "5", "reportable": 1, "minInterval": 0, "maxInterval": 65344, diff --git a/applications/matter_weather_station/src/default_zap/zap-generated/access.h b/applications/matter_weather_station/src/default_zap/zap-generated/access.h index 90c4fbdc89f6..ee60f775cd7b 100644 --- a/applications/matter_weather_station/src/default_zap/zap-generated/access.h +++ b/applications/matter_weather_station/src/default_zap/zap-generated/access.h @@ -31,9 +31,6 @@ #define GENERATED_ACCESS_READ_ATTRIBUTE__CLUSTER { \ 0x0000001F, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ 0x0000001F, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -52,9 +49,6 @@ #define GENERATED_ACCESS_READ_ATTRIBUTE__ATTRIBUTE { \ 0x00000000, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ 0x00000001, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -73,9 +67,6 @@ #define GENERATED_ACCESS_READ_ATTRIBUTE__PRIVILEGE { \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Attribute: ACL, Privilege: administer */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Attribute: Extension, Privilege: administer */ \ - /* Cluster: Access Control, Attribute: SubjectsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: TargetsPerAccessControlEntry, Privilege: view */ \ - /* Cluster: Access Control, Attribute: AccessControlEntriesPerFabric, Privilege: view */ \ /* Cluster: Basic Information, Attribute: NodeLabel, Privilege: view */ \ /* Cluster: Basic Information, Attribute: Location, Privilege: view */ \ /* Cluster: OTA Software Update Requestor, Attribute: DefaultOTAProviders, Privilege: view */ \ @@ -226,18 +217,21 @@ #define GENERATED_ACCESS_READ_EVENT__CLUSTER { \ 0x0000001F, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ 0x0000001F, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + 0x0000001F, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } // Parallel array data (cluster, *event*, privilege) for read event #define GENERATED_ACCESS_READ_EVENT__EVENT { \ 0x00000000, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ 0x00000001, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + 0x00000002, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } // Parallel array data (cluster, event, *privilege*) for read event #define GENERATED_ACCESS_READ_EVENT__PRIVILEGE { \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: AccessControlEntryChanged, Privilege: administer */ \ chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: AccessControlExtensionChanged, Privilege: administer */ \ + chip::Access::Privilege::kAdminister, /* Cluster: Access Control, Event: FabricRestrictionReviewUpdate, Privilege: administer */ \ } //////////////////////////////////////////////////////////////////////////////// diff --git a/applications/matter_weather_station/src/default_zap/zap-generated/endpoint_config.h b/applications/matter_weather_station/src/default_zap/zap-generated/endpoint_config.h index c8809f534114..670da35ff9a4 100644 --- a/applications/matter_weather_station/src/default_zap/zap-generated/endpoint_config.h +++ b/applications/matter_weather_station/src/default_zap/zap-generated/endpoint_config.h @@ -103,7 +103,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* TargetsPerAccessControlEntry */ \ { ZAP_EMPTY_DEFAULT(), 0x00000004, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* AccessControlEntriesPerFabric */ \ - { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ + { ZAP_SIMPLE_DEFAULT(1), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ { ZAP_EMPTY_DEFAULT(), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */ \ \ @@ -153,7 +153,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) | ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* MaxPathsPerInvoke \ */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ + { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(SINGLETON) }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: OTA Software Update Requestor (server) */ \ @@ -185,7 +185,7 @@ { ZAP_SIMPLE_DEFAULT(1), 0x0000001C, 1, ZAP_TYPE(BOOLEAN), 0 }, /* BatFunctionalWhileCharging \ */ \ { ZAP_SIMPLE_DEFAULT(6), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: General Commissioning (server) */ \ { ZAP_LONG_DEFAULTS_INDEX(16), 0x00000000, 8, ZAP_TYPE(INT64U), \ @@ -199,7 +199,7 @@ { ZAP_EMPTY_DEFAULT(), 0x00000004, 1, ZAP_TYPE(BOOLEAN), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* SupportsConcurrentConnection */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(0x0001), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: Network Commissioning (server) */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00000000, 1, ZAP_TYPE(INT8U), 0 }, /* MaxNetworks */ \ @@ -385,7 +385,7 @@ { ZAP_EMPTY_DEFAULT(), 0x0000003E, 0, ZAP_TYPE(ARRAY), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ActiveNetworkFaultsList */ \ { ZAP_SIMPLE_DEFAULT(0x000F), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 0, Cluster: Administrator Commissioning (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 1, ZAP_TYPE(ENUM8), \ @@ -436,14 +436,14 @@ { ZAP_EMPTY_DEFAULT(), 0x00000002, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ActiveModeThreshold */ \ { ZAP_SIMPLE_DEFAULT(0x0000), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(2), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(3), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Identify (server) */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00000000, 2, ZAP_TYPE(INT16U), \ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), \ @@ -460,7 +460,7 @@ ZAP_ATTRIBUTE_MASK(EXTERNAL_STORAGE) }, /* ClusterRevision */ \ \ /* Endpoint: 1, Cluster: Temperature Measurement (server) */ \ - { ZAP_SIMPLE_DEFAULT(0xFFFF), 0x00000000, 2, ZAP_TYPE(TEMPERATURE), \ + { ZAP_SIMPLE_DEFAULT(0x8000), 0x00000000, 2, ZAP_TYPE(TEMPERATURE), \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* MeasuredValue */ \ { ZAP_SIMPLE_DEFAULT(-4000), 0x00000001, 2, ZAP_TYPE(TEMPERATURE), \ ZAP_ATTRIBUTE_MASK(NULLABLE) }, /* MinMeasuredValue */ \ @@ -474,7 +474,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 2, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), \ @@ -505,7 +505,7 @@ ZAP_ATTRIBUTE_MASK(WRITABLE) }, /* IdentifyTime */ \ { ZAP_SIMPLE_DEFAULT(0), 0x00000001, 1, ZAP_TYPE(ENUM8), 0 }, /* IdentifyType */ \ { ZAP_SIMPLE_DEFAULT(0), 0x0000FFFC, 4, ZAP_TYPE(BITMAP32), 0 }, /* FeatureMap */ \ - { ZAP_SIMPLE_DEFAULT(4), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ + { ZAP_SIMPLE_DEFAULT(5), 0x0000FFFD, 2, ZAP_TYPE(INT16U), 0 }, /* ClusterRevision */ \ \ /* Endpoint: 3, Cluster: Descriptor (server) */ \ { ZAP_EMPTY_DEFAULT(), 0x00000000, 0, ZAP_TYPE(ARRAY), \ @@ -1018,7 +1018,7 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE, // Array of device types #define FIXED_DEVICE_TYPES \ { \ - { 0x00000016, 2 }, { 0x00000302, 2 }, { 0x00000307, 2 }, \ + { 0x00000012, 1 }, { 0x00000016, 3 }, { 0x00000302, 2 }, { 0x00000307, 2 }, \ { \ 0x00000305, 2 \ } \ @@ -1027,13 +1027,13 @@ static_assert(ATTRIBUTE_LARGEST <= CHIP_CONFIG_MAX_ATTRIBUTE_STORE_ELEMENT_SIZE, // Array of device type offsets #define FIXED_DEVICE_TYPE_OFFSETS \ { \ - 0, 1, 2, 3 \ + 0, 2, 3, 4 \ } // Array of device type lengths #define FIXED_DEVICE_TYPE_LENGTHS \ { \ - 1, 1, 1, 1 \ + 2, 1, 1, 1 \ } // Array of endpoint types supported on each endpoint diff --git a/applications/matter_weather_station/sysbuild/ipc_radio/prj.conf b/applications/matter_weather_station/sysbuild/ipc_radio/prj.conf index b9c70688824b..5ccda89ef6aa 100644 --- a/applications/matter_weather_station/sysbuild/ipc_radio/prj.conf +++ b/applications/matter_weather_station/sysbuild/ipc_radio/prj.conf @@ -26,13 +26,16 @@ CONFIG_BT_PERIPHERAL=y CONFIG_BT_CENTRAL=n CONFIG_BT_BUF_ACL_RX_SIZE=502 CONFIG_BT_BUF_ACL_TX_SIZE=251 + +# It is set based on BT_BUF_ACL_RX_COUNT_EXTRA = 6 - (BT_MAX_CONN + 1) +CONFIG_BT_BUF_ACL_RX_COUNT_EXTRA=4 + CONFIG_BT_CTLR_DATA_LENGTH_MAX=251 CONFIG_BT_CTLR_PHY_2M=n # Debug and assert configuration CONFIG_ASSERT=y CONFIG_DEBUG_INFO=y -CONFIG_EXCEPTION_STACK_TRACE=y CONFIG_RESET_ON_FATAL_ERROR=n CONFIG_REBOOT=n diff --git a/applications/nrf5340_audio/Kconfig.defaults b/applications/nrf5340_audio/Kconfig.defaults index 3216e06f1bcd..3e98206f9ad7 100644 --- a/applications/nrf5340_audio/Kconfig.defaults +++ b/applications/nrf5340_audio/Kconfig.defaults @@ -21,9 +21,6 @@ config SYSTEM_WORKQUEUE_STACK_SIZE config THREAD_NAME default y -config NCS_INCLUDE_RPMSG_CHILD_IMAGE - default y - # Workaround to not use fatal_error.c in NCS. Note that the system may still # reset on error depending on the build configuraion config RESET_ON_FATAL_ERROR @@ -124,10 +121,6 @@ endchoice config FS_FATFS_EXFAT default y -# Set the maximum file name length to 255 -config FS_FATFS_MAX_LFN - default 255 - config WATCHDOG default y diff --git a/applications/nrf5340_audio/broadcast_sink/Kconfig.defaults b/applications/nrf5340_audio/broadcast_sink/Kconfig.defaults index aeeafb5c6b81..3dcf65b596b3 100644 --- a/applications/nrf5340_audio/broadcast_sink/Kconfig.defaults +++ b/applications/nrf5340_audio/broadcast_sink/Kconfig.defaults @@ -11,6 +11,28 @@ config BT_OBSERVER config BT_PERIPHERAL default y +config BT_BUF_ACL_TX_COUNT + default 18 + +config BT_CAP_ACCEPTOR + default y if BT_AUDIO_SCAN_DELEGATOR + select BT_CSIP_SET_MEMBER + select BT_CAP_ACCEPTOR_SET_MEMBER + select BT_GAP_PERIPHERAL_PREF_PARAMS + select BT_VCP_VOL_REND + +config BT_PERIPHERAL_PREF_MIN_INT + default 64 + +config BT_PERIPHERAL_PREF_MAX_INT + default 69 + +config BT_PERIPHERAL_PREF_LATENCY + default 0 + +config BT_PERIPHERAL_PREF_TIMEOUT + default 200 + # Generic Audio Sink - 0x0840 config BT_DEVICE_APPEARANCE default 2112 @@ -48,7 +70,7 @@ config BT_AUDIO_RX default y config BT_PER_ADV_SYNC_TRANSFER_RECEIVER - depends on BT_AUDIO_SCAN_DELEGATOR + default y if BT_AUDIO_SCAN_DELEGATOR select SETTINGS select BT_SETTINGS select FLASH diff --git a/applications/nrf5340_audio/broadcast_sink/main.c b/applications/nrf5340_audio/broadcast_sink/main.c index 97490088254e..f1d826648082 100644 --- a/applications/nrf5340_audio/broadcast_sink/main.c +++ b/applications/nrf5340_audio/broadcast_sink/main.c @@ -61,12 +61,6 @@ K_THREAD_STACK_DEFINE(bt_mgmt_msg_sub_thread_stack, CONFIG_BT_MGMT_MSG_SUB_STACK static enum stream_state strm_state = STATE_PAUSED; -static const struct bt_data ad[] = { - BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), - BT_DATA_BYTES(BT_DATA_UUID16_ALL, BT_UUID_16_ENCODE(BT_UUID_BASS_VAL)), - BT_DATA_BYTES(BT_DATA_UUID16_ALL, BT_UUID_16_ENCODE(BT_UUID_PACS_VAL)), -}; - /* Function for handling all stream state changes */ static void stream_state_set(enum stream_state stream_state_new) { @@ -253,7 +247,6 @@ static void le_audio_msg_sub_thread(void) ret = audio_datapath_pres_delay_us_set(pres_delay_us); if (ret) { - LOG_ERR("Failed to set presentation delay to %d", pres_delay_us); break; } @@ -493,6 +486,66 @@ static int zbus_link_producers_observers(void) return 0; } +/* + * @brief The following configures the data for the extended advertising. + * + * @param ext_adv_buf Pointer to the bt_data used for extended advertising. + * @param ext_adv_buf_size Size of @p ext_adv_buf. + * @param ext_adv_count Pointer to the number of elements added to @p adv_buf. + * + * @return 0 for success, error otherwise. + */ +static int ext_adv_populate(struct bt_data *ext_adv_buf, size_t ext_adv_buf_size, + size_t *ext_adv_count) +{ + int ret; + size_t ext_adv_buf_cnt = 0; + + NET_BUF_SIMPLE_DEFINE_STATIC(uuid_buf, CONFIG_EXT_ADV_UUID_BUF_MAX); + + ext_adv_buf[ext_adv_buf_cnt].type = BT_DATA_UUID16_ALL; + ext_adv_buf[ext_adv_buf_cnt].data = uuid_buf.data; + ext_adv_buf_cnt++; + + ret = bt_mgmt_manufacturer_uuid_populate(&uuid_buf, CONFIG_BT_DEVICE_MANUFACTURER_ID); + if (ret) { + LOG_ERR("Failed to add adv data with manufacturer ID: %d", ret); + return ret; + } + + ret = broadcast_sink_uuid_populate(&uuid_buf); + if (ret < 0) { + LOG_ERR("Failed to add UUID with broadcast sink: %d", ret); + return ret; + } + + ret = bt_r_and_c_uuid_populate(&uuid_buf); + if (ret) { + LOG_ERR("Failed to add adv data from renderer: %d", ret); + return ret; + } + + ret = broadcast_sink_adv_populate(&ext_adv_buf[ext_adv_buf_cnt], + ext_adv_buf_size - ext_adv_buf_cnt); + + if (ret < 0) { + LOG_ERR("Failed to add adv data from broadcast sink: %d", ret); + return ret; + } + + ext_adv_buf_cnt += ret; + + /* Add the number of UUIDs */ + ext_adv_buf[0].data_len = uuid_buf.len; + + LOG_DBG("Size of adv data: %d, num_elements: %d", sizeof(struct bt_data) * ext_adv_buf_cnt, + ext_adv_buf_cnt); + + *ext_adv_count = ext_adv_buf_cnt; + + return 0; +} + uint8_t stream_state_get(void) { return strm_state; @@ -538,9 +591,18 @@ int main(void) ERR_CHK_MSG(ret, "Failed to enable broadcast sink"); if (IS_ENABLED(CONFIG_BT_AUDIO_SCAN_DELEGATOR)) { + static struct bt_data ext_adv_buf[CONFIG_EXT_ADV_BUF_MAX]; + size_t ext_adv_buf_cnt = 0; + bt_mgmt_scan_delegator_init(); - ret = bt_mgmt_adv_start(0, ad, ARRAY_SIZE(ad), NULL, 0, true); + ret = bt_r_and_c_init(); + ERR_CHK(ret); + + ret = ext_adv_populate(ext_adv_buf, ARRAY_SIZE(ext_adv_buf), &ext_adv_buf_cnt); + ERR_CHK(ret); + + ret = bt_mgmt_adv_start(0, ext_adv_buf, ext_adv_buf_cnt, NULL, 0, true); ERR_CHK(ret); } else { ret = bt_mgmt_scan_start(0, 0, BT_MGMT_SCAN_TYPE_BROADCAST, diff --git a/applications/nrf5340_audio/broadcast_source/main.c b/applications/nrf5340_audio/broadcast_source/main.c index 2a82ba33e465..a9202574bf18 100644 --- a/applications/nrf5340_audio/broadcast_source/main.c +++ b/applications/nrf5340_audio/broadcast_source/main.c @@ -395,7 +395,7 @@ static int ext_adv_populate(uint8_t big_index, struct broadcast_source_ext_adv_d brdcst_name_size); } - ext_adv_buf[ext_adv_buf_cnt].type = BT_DATA_UUID16_SOME; + ext_adv_buf[ext_adv_buf_cnt].type = BT_DATA_UUID16_ALL; ext_adv_buf[ext_adv_buf_cnt].data = ext_adv_data->uuid_buf->data; ext_adv_buf_cnt++; diff --git a/applications/nrf5340_audio/doc/building.rst b/applications/nrf5340_audio/doc/building.rst index 1efd1408ee49..a946005b02f0 100644 --- a/applications/nrf5340_audio/doc/building.rst +++ b/applications/nrf5340_audio/doc/building.rst @@ -42,19 +42,27 @@ You can now program the development kit. Building and programming using script ************************************* -The suggested method for building each of the applications and programming it to the development kit is running the :file:`buildprog.py` Python script, which is located in the :file:`applications/nrf5340_audio/tools/buildprog` directory. +The suggested method for building each of the applications and programming it to the development kit is running the :file:`buildprog.py` Python script. The script automates the process of selecting :ref:`configuration files ` and building different applications. This eases the process of building and programming images for multiple development kits. +The script is located in the :file:`applications/nrf5340_audio/tools/buildprog` directory. + Preparing the JSON file ======================= The script depends on the settings defined in the :file:`nrf5340_audio_dk_devices.json` file. -Before using the script, make sure to update this file with the following information for each development kit you want to use: +Before using the script, make sure to update this file with the following information for each development kit you want to use. +This is how the file looks by default: + +.. literalinclude:: ../tools/buildprog/nrf5340_audio_dk_devices.json + :language: json + +When preparing the JSON file, update the following fields: * ``nrf5340_audio_dk_snr`` -- This field lists the SEGGER serial number. - You can check this number on the sticker on the nRF5340 Audio development kit. - Alternatively, connect the development kit to your PC and run ``nrfjprog -i`` in a command window to print the SEGGER serial number of the kit. + You can check this ten-digit number on the sticker on the nRF5340 Audio development kit. + Alternatively, connect the development kit to your PC and run ``nrfjprog -i`` in a command window to print the SEGGER serial number of all connected kits. * ``nrf5340_audio_dk_dev`` -- This field assigns the specific nRF5340 Audio development kit to be ``headset`` or ``gateway``. * ``channel`` -- This field is valid only for headsets. It sets the channels on which the headset is meant to work. @@ -65,121 +73,137 @@ Before using the script, make sure to update this file with the following inform Running the script ================== -After editing the :file:`nrf5340_audio_dk_devices.json` file, run :file:`buildprog.py` to build the firmware for the development kits. -The building command for running the script requires providing the following parameters: - -* Core type (``-c`` parameter): ``app``, ``net``, or ``both`` -* Application version (``-b`` parameter): either ``release`` or ``debug`` -* Device type (``-d`` parameter): ``headset``, ``gateway``, or ``both`` - -See the following examples of the parameter usage with the command run from the :file:`buildprog` directory: +The script handles building and parallel programming of multiple kits. +The following sections explain these two steps separately. -* Example 1: The following command builds headset and gateway applications using the script for the application core with the ``debug`` application version: +Script parameters for building +------------------------------ - .. code-block:: console - - python buildprog.py -c app -b debug -d both - -* Example 2: The following command builds headset and gateway applications using the script for both the application and the network core (``both``). - It builds with the ``release`` application version, with the DFU external flash memory layout enabled, and using the minimal size of the network core bootloader: +After editing the :file:`nrf5340_audio_dk_devices.json` file, run :file:`buildprog.py` to build the firmware for the development kits. +The building command for running the script requires providing the following parameters: - .. code-block:: console +.. list-table:: Parameters for the script + :header-rows: 1 - python buildprog.py -c both -b release -d both -m external -M + * - Parameter + - Description + - Options + - More information + * - Core type (``-c``) + - Specifies the core type. + - ``app``, ``net``, ``both`` + - :ref:`nrf53_audio_app_overview_architecture` + * - Application version (``-b``) + - Specifies the application version. + - ``release``, ``debug`` + - | :ref:`nrf53_audio_app_configuration_files` + | **Note:** For FOTA DFU, you must use :ref:`nrf53_audio_app_building_standard`. + * - Device type (``-d``) + - Specifies the device type. + - ``headset``, ``gateway``, ``both`` + - :ref:`nrf53_audio_app_overview_gateway_headsets` + +For example, the following command builds headset and gateway applications using the script for the application core with the ``debug`` application version: + +.. code-block:: console + + python buildprog.py -c app -b debug -d both The command can be run from any location, as long as the correct path to :file:`buildprog.py` is given. -The build files are saved in the :file:`applications/nrf5340_audio/build` directory. +The build files are saved in separate subdirectories in the :file:`applications/nrf5340_audio/build` directory. The script creates a directory for each application version and device type combination. For example, when running the command above, the script creates the :file:`dev_gateway/build_debug` and :file:`dev_headset/build_debug` directories. -Programming with the script - The development kits are programmed according to the serial numbers set in the JSON file. - Make sure to connect the development kits to your PC using USB and turn them on using the **POWER** switch before you run the command. - - The following parameters are available for programming: +Script parameters for programming +--------------------------------- - * Programming (``-p`` parameter) -- If you run the building script with this parameter, you can program one or both of the cores after building the files. - * Sequential programming (``-s`` parameter) -- If you encounter problems while programming, include this parameter alongside other parameters to program sequentially. +The script can program the build files as part of the same `python buildprog.py` command used for building. +Use one of the following programming parameters: - The command for programming can look as follows: +* Programming (``-p`` parameter) -- If you run the ``buildprog`` script with this parameter, you can program one or both of the cores after building the files. +* Sequential programming (``-s`` parameter) -- If you encounter problems while programming, include this parameter alongside other parameters to program sequentially. - .. code-block:: console - - python buildprog.py -c both -b debug -d both -p +.. note:: + The development kits are programmed according to the serial numbers set in the JSON file. + Make sure to connect the development kits to your PC using USB and turn them on using the **POWER** switch before you run the script with the programming parameter. - This command builds the headset and the gateway applications with ``debug`` version of both the application core binary and the network core binary - and programs each to its respective core. +The command for programming can look as follows: - .. note:: - If the programming command fails because of a :ref:`readback protection error `, run :file:`buildprog.py` with the ``--recover_on_fail`` or ``-f`` parameter to recover and re-program automatically when programming fails. - For example, using the programming command example above: +.. code-block:: console - .. code-block:: console + python buildprog.py -c both -b debug -d both -p - python buildprog.py -c both -b debug -d both -p --recover_on_fail +This command builds the headset and the gateway applications with ``debug`` version of both the application core binary and the network core binary - and programs each to its respective core. +If you want to rebuild from scratch, you can add the ``--pristine`` parameter to the command (west's ``-p`` for cannot be used for a pristine build with the script). - If you want to program firmware that has DFU enabled, you must include the DFU parameters in the command. - The command for programming with DFU enabled can look as follows: +.. note:: + If the programming command fails because of a :ref:`readback protection error `, run :file:`buildprog.py` with the ``--recover_on_fail`` or ``-f`` parameter to recover and re-program automatically when programming fails. + For example, using the programming command example above: .. code-block:: console - python buildprog.py -c both -b release -d both -m external -M -p + python buildprog.py -c both -b debug -d both -p --recover_on_fail Getting help - Run ``python buildprog.py -h`` for information about all available script parameters. +------------ -Configuration table overview - When running the script command, a table similar to the following one is displayed to provide an overview of the selected options and parameter values: - - .. code-block:: console +Run ``python buildprog.py -h`` for information about all available script parameters. - +------------+----------+---------+--------------+---------------------+---------------------+ - | snr | snr conn | device | only reboot | core app programmed | core net programmed | - +------------+----------+---------+--------------+---------------------+---------------------+ - | 1010101010 | True | headset | Not selected | Selected TBD | Not selected | - | 2020202020 | True | gateway | Not selected | Selected TBD | Not selected | - | 3030303030 | True | headset | Not selected | Selected TBD | Not selected | - +------------+----------+---------+--------------+---------------------+---------------------+ - - See the following table for the meaning of each column and the list of possible values: - - +-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ - | Column | Indication | Possible values | - +=======================+=====================================================================================================+=================================================+ - | ``snr`` | Serial number of the device, as provided in the :file:`nrf5340_audio_dk_devices.json` file. | Serial number. | - +-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ - | ``snr conn`` | Whether the device with the provided serial number is connected to the PC with a serial connection. | ``True`` - Connected. | - | | +-------------------------------------------------+ - | | | ``False`` - Not connected. | - +-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ - | ``device`` | Device type, as provided in the :file:`nrf5340_audio_dk_devices.json` file. | ``headset`` - Headset. | - | | +-------------------------------------------------+ - | | | ``gateway`` - Gateway. | - +-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ - | ``only reboot`` | Whether the device is to be only reset and not programmed. | ``Not selected`` - No reset. | - | | This depends on the ``-r`` parameter in the command, which overrides other parameters. +-------------------------------------------------+ - | | | ``Selected TBD`` - Only reset requested. | - | | +-------------------------------------------------+ - | | | ``Done`` - Reset done. | - | | +-------------------------------------------------+ - | | | ``Failed`` - Reset failed. | - +-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ - |``core app programmed``| Whether the application core is to be programmed. | ``Not selected`` - Core will not be programmed. | - | | This depends on the value provided to the ``-c`` parameter (see above). +-------------------------------------------------+ - | | | ``Selected TBD`` - Programming requested. | - | | +-------------------------------------------------+ - | | | ``Done`` - Programming done. | - | | +-------------------------------------------------+ - | | | ``Failed`` - Programming failed. | - +-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ - |``core net programmed``| Whether the network core is to be programmed. | ``Not selected`` - Core will not be programmed. | - | | This depends on the value provided to the ``-c`` parameter (see above). +-------------------------------------------------+ - | | | ``Selected TBD`` - Programming requested. | - | | +-------------------------------------------------+ - | | | ``Done`` - Programming done. | - | | +-------------------------------------------------+ - | | | ``Failed`` - Programming failed. | - +-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ +Configuration table overview +---------------------------- + +When running the script command, a table similar to the following one is displayed to provide an overview of the selected options and parameter values: + +.. code-block:: console + + +------------+----------+---------+--------------+---------------------+---------------------+ + | snr | snr conn | device | only reboot | core app programmed | core net programmed | + +------------+----------+---------+--------------+---------------------+---------------------+ + | 1010101010 | True | headset | Not selected | Selected TBD | Not selected | + | 2020202020 | True | gateway | Not selected | Selected TBD | Not selected | + | 3030303030 | True | headset | Not selected | Selected TBD | Not selected | + +------------+----------+---------+--------------+---------------------+---------------------+ + +See the following table for the meaning of each column and the list of possible values: + ++-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ +| Column | Indication | Possible values | ++=======================+=====================================================================================================+=================================================+ +| ``snr`` | Serial number of the device, as provided in the :file:`nrf5340_audio_dk_devices.json` file. | Serial number. | ++-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ +| ``snr conn`` | Whether the device with the provided serial number is connected to the PC with a serial connection. | ``True`` - Connected. | +| | +-------------------------------------------------+ +| | | ``False`` - Not connected. | ++-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ +| ``device`` | Device type, as provided in the :file:`nrf5340_audio_dk_devices.json` file. | ``headset`` - Headset. | +| | +-------------------------------------------------+ +| | | ``gateway`` - Gateway. | ++-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ +| ``only reboot`` | Whether the device is to be only reset and not programmed. | ``Not selected`` - No reset. | +| | This depends on the ``-r`` parameter in the command, which overrides other parameters. +-------------------------------------------------+ +| | | ``Selected TBD`` - Only reset requested. | +| | +-------------------------------------------------+ +| | | ``Done`` - Reset done. | +| | +-------------------------------------------------+ +| | | ``Failed`` - Reset failed. | ++-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ +|``core app programmed``| Whether the application core is to be programmed. | ``Not selected`` - Core will not be programmed. | +| | This depends on the value provided to the ``-c`` parameter (see above). +-------------------------------------------------+ +| | | ``Selected TBD`` - Programming requested. | +| | +-------------------------------------------------+ +| | | ``Done`` - Programming done. | +| | +-------------------------------------------------+ +| | | ``Failed`` - Programming failed. | ++-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ +|``core net programmed``| Whether the network core is to be programmed. | ``Not selected`` - Core will not be programmed. | +| | This depends on the value provided to the ``-c`` parameter (see above). +-------------------------------------------------+ +| | | ``Selected TBD`` - Programming requested. | +| | +-------------------------------------------------+ +| | | ``Done`` - Programming done. | +| | +-------------------------------------------------+ +| | | ``Failed`` - Programming failed. | ++-----------------------+-----------------------------------------------------------------------------------------------------+-------------------------------------------------+ .. _nrf53_audio_app_building_standard: @@ -235,7 +259,7 @@ Complete the following steps to build the application: * For headset device: ``-DCONFIG_AUDIO_DEV=1`` * For gateway device: ``-DCONFIG_AUDIO_DEV=2`` - #. Choose the application version by using one of the following options: + #. Choose the application version (:ref:`nrf53_audio_app_building_config_files`) by using one of the following options: * For the debug version: No build flag needed. * For the release version: ``-DFILE_SUFFIX=release`` @@ -247,10 +271,24 @@ Complete the following steps to build the application: west build -b nrf5340_audio_dk/nrf5340/cpuapp --pristine -- -DCONFIG_AUDIO_DEV=1 -DFILE_SUFFIX=release - Unlike when :ref:`nrf53_audio_app_building_script`, this command creates the build files directly in the :file:`build` directory. - This means that you first need to program the headset development kits before you build and program gateway development kits. - Alternatively, you can add the ``-d`` parameter to the ``west`` command to specify a custom build folder. This lets you build firmware for both - headset and gateway before programming any development kits. + This command creates the build files for headset device directly in the :file:`build` directory. + What this means is that you cannot create build files for all devices you want to program, because the subsequent commands will overwrite the files in the :file:`build` directory. + + To work around this standard west behavior, you can add the ``-d`` parameter to the ``west`` command to specify a custom build folder for each device. + This way, you can build firmware for headset and gateway to separate directories before programming the development kits. + Alternatively, you can use the :ref:`nrf53_audio_app_building_script`, which handles this automatically. + +Building the application for FOTA +--------------------------------- + +The following command example builds the application for :ref:`nrf53_audio_app_fota`: + +.. code-block:: console + + west build -b nrf5340_audio_dk/nrf5340/cpuapp --pristine -- -DCONFIG_AUDIO_DEV=1 -DFILE_SUFFIX=fota + +The command uses ``-DFILE_SUFFIX=fota`` to pick :file:`prj_fota.conf` instead of the default :file:`prj.conf`. +It also uses the ``--pristine`` to clean the existing directory before starting the build process. Programming the application =========================== @@ -260,19 +298,21 @@ After building the files for the development kit you want to program, follow the When using the default CIS configuration, if you want to use two headset devices, you must also populate the UICR with the desired channel for each headset. Use the following commands, depending on which headset you want to populate: -* Left headset: +* Left headset (``--val 0``): .. code-block:: console nrfjprog --memwr 0x00FF80F4 --val 0 -* Right headset: +* Right headset (``--val 1``): .. code-block:: console nrfjprog --memwr 0x00FF80F4 --val 1 -Select the correct board when prompted with the popup or add the ``--snr`` parameter followed by the SEGGER serial number of the correct board at the end of the ``nrfjprog`` command. +Select the correct board when prompted with the popup. +Alternatively, you can add the ``--snr`` parameter followed by the SEGGER serial number of the correct board at the end of the ``nrfjprog`` command. +You can check the serial numbers of the connected devices with the ``nrfjprog -i`` command. .. note:: |usb_known_issues| diff --git a/applications/nrf5340_audio/doc/configuration.rst b/applications/nrf5340_audio/doc/configuration.rst index 2ce5bc23f7b1..3e99a992a336 100644 --- a/applications/nrf5340_audio/doc/configuration.rst +++ b/applications/nrf5340_audio/doc/configuration.rst @@ -88,12 +88,12 @@ Adding FEM support happens when :ref:`nrf53_audio_app_building`. You can use one of the following options, depending on how you decide to build the application: * If you opt for :ref:`nrf53_audio_app_building_script`, add the ``--nrf21540`` to the script's building command. -* If you opt for :ref:`nrf53_audio_app_building_standard`, add the ``-Dnrf5340_audio_SHIELD=nrf21540ek_fwd -Dipc_radio_SHIELD=nrf21540ek`` to the ``west build`` command. +* If you opt for :ref:`nrf53_audio_app_building_standard`, add the ``-Dnrf5340_audio_SHIELD=nrf21540ek -Dipc_radio_SHIELD=nrf21540ek`` to the ``west build`` command. For example: .. code-block:: console - west build -b nrf5340_audio_dk/nrf5340/cpuapp --pristine -- -DCONFIG_AUDIO_DEV=1 -Dnrf5340_audio_SHIELD=nrf21540ek_fwd -Dipc_radio_SHIELD=nrf21540ek + west build -b nrf5340_audio_dk/nrf5340/cpuapp --pristine -- -DCONFIG_AUDIO_DEV=1 -Dnrf5340_audio_SHIELD=nrf21540ek -Dipc_radio_SHIELD=nrf21540ek To set the TX power output, use the ``CONFIG_BT_CTLR_TX_PWR_ANTENNA`` and ``CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB`` Kconfig options in :file:`applications/nrf5340_audio/sysbuild/ipc_radio/prj.conf`. diff --git a/applications/nrf5340_audio/doc/fota.rst b/applications/nrf5340_audio/doc/fota.rst index f0b98463bc2f..b03e6453bd5a 100644 --- a/applications/nrf5340_audio/doc/fota.rst +++ b/applications/nrf5340_audio/doc/fota.rst @@ -68,9 +68,17 @@ The first part of these names is based on :kconfig:option:`CONFIG_BT_DEVICE_NAME This is due to restrictions in the DFU system, and the error print is expected. The DFU process should still complete successfully. +Building the FOTA configuration +******************************* + +Use the :ref:`nrf53_audio_app_building_standard` procedure to build the nRF5340 Audio applications with the FOTA configuration. +Make sure to provide the :ref:`correct configuration file ` :file:`prj_fota.conf` when running the build command. + +The :ref:`script-based method ` does not support building and programming the FOTA upgrades. + .. _nrf53_audio_unicast_client_app_testing_steps_fota: Testing FOTA upgrades -===================== +********************* To test FOTA for the nRF5340 Audio application, ensure the application is in the DFU mode, and then follow the testing steps in the FOTA over Bluetooth Low Energy section of :ref:`ug_nrf53_developing_ble_fota` (you can skip the configuration steps). diff --git a/applications/nrf5340_audio/doc/requirements.rst b/applications/nrf5340_audio/doc/requirements.rst index cf1ecc6d1a48..00f79e41f6b8 100644 --- a/applications/nrf5340_audio/doc/requirements.rst +++ b/applications/nrf5340_audio/doc/requirements.rst @@ -60,6 +60,8 @@ For each application, only one of the following :file:`.conf` files is included No debug features are enabled in the release application version. When building using the command line, you must explicitly specify if :file:`prj_release.conf` is going to be included instead of :file:`prj.conf`. See :ref:`nrf53_audio_app_building` for details. - -In addition, the application features the :file:`child_image` directory with :file:`hci_ipc.conf`. -This file contains the necessary configurations for nRF5340 Audio applications to run the :zephyr:code-sample:`bluetooth_hci_ipc` sample with :ref:`SoftDevice Controller for LE Isochronous Channels ` support. +* :file:`prj_fota.conf` is the optional configuration file used for FOTA DFU. + When used, the build system builds the debug version of the application (:file:`prj.conf`), but with the features needed to perform DFU over Bluetooth LE. + It also includes bootloaders so that the applications on both the application core and network core can be updated. + When building using the command line, you must explicitly specify if :file:`prj_fota.conf` is going to be included instead of :file:`prj.conf`. + See :ref:`nrf53_audio_app_fota` for more information. diff --git a/applications/nrf5340_audio/sample.yaml b/applications/nrf5340_audio/sample.yaml index 3a01e1029ee1..d00781c62251 100644 --- a/applications/nrf5340_audio/sample.yaml +++ b/applications/nrf5340_audio/sample.yaml @@ -5,20 +5,39 @@ common: integration_platforms: - nrf5340_audio_dk/nrf5340/cpuapp platform_allow: nrf5340_audio_dk/nrf5340/cpuapp - platform_exclude: nrf5340_audio_dk/nrf5340/cpuapp_ns sysbuild: true build_only: true - tags: ci_build sysbuild + tags: + - ci_build + - sysbuild tests: applications.nrf5340_audio.default: extra_args: [] applications.nrf5340_audio.headset_unicast: - extra_args: FILE_SUFFIX=release CONFIG_AUDIO_DEV=1 + extra_args: + - FILE_SUFFIX=release + - CONFIG_AUDIO_DEV=1 applications.nrf5340_audio.gateway_unicast: - extra_args: FILE_SUFFIX=release CONFIG_AUDIO_DEV=2 + extra_args: + - FILE_SUFFIX=release + - CONFIG_AUDIO_DEV=2 applications.nrf5340_audio.headset_broadcast: - extra_args: FILE_SUFFIX=release CONFIG_AUDIO_DEV=1 CONFIG_TRANSPORT_BIS=y + extra_args: + - FILE_SUFFIX=release + - CONFIG_AUDIO_DEV=1 + - CONFIG_TRANSPORT_BIS=y applications.nrf5340_audio.gateway_broadcast: - extra_args: FILE_SUFFIX=release CONFIG_AUDIO_DEV=2 CONFIG_TRANSPORT_BIS=y + extra_args: + - FILE_SUFFIX=release + - CONFIG_AUDIO_DEV=2 + - CONFIG_TRANSPORT_BIS=y applications.nrf5340_audio.headset_unicast_sd_card: - extra_args: FILE_SUFFIX=release CONFIG_AUDIO_DEV=1 CONFIG_SD_CARD_PLAYBACK=y + extra_args: + - FILE_SUFFIX=release + - CONFIG_AUDIO_DEV=1 + - CONFIG_SD_CARD_PLAYBACK=y + applications.nrf5340_audio.headset_dfu: + extra_args: + - FILE_SUFFIX=release + - CONFIG_AUDIO_DEV=1 + - FILE_SUFFIX=fota diff --git a/applications/nrf5340_audio/src/audio/Kconfig b/applications/nrf5340_audio/src/audio/Kconfig index 8206efd3843c..9c9096190b52 100644 --- a/applications/nrf5340_audio/src/audio/Kconfig +++ b/applications/nrf5340_audio/src/audio/Kconfig @@ -192,6 +192,11 @@ config SW_CODEC_LC3 help LC3 is the mandatory codec for LE Audio. +config SW_CODEC_NONE + bool "None" + help + Choose this if no software (SW) codec is needed. + # Leave room for other codecs endchoice diff --git a/applications/nrf5340_audio/src/audio/audio_datapath.c b/applications/nrf5340_audio/src/audio/audio_datapath.c index 96d9f7311475..349ce52e62eb 100644 --- a/applications/nrf5340_audio/src/audio/audio_datapath.c +++ b/applications/nrf5340_audio/src/audio/audio_datapath.c @@ -161,6 +161,20 @@ static struct { } pres_comp; } ctrl_blk; +/** + * @brief Get the current number of blocks in the output buffer. + */ +static int filled_blocks_get(void) +{ + if (ctrl_blk.out.cons_blk_idx < ctrl_blk.out.prod_blk_idx) { + return ctrl_blk.out.prod_blk_idx - ctrl_blk.out.cons_blk_idx; + } else if (ctrl_blk.out.cons_blk_idx > ctrl_blk.out.prod_blk_idx) { + return (FIFO_NUM_BLKS - ctrl_blk.out.cons_blk_idx) + ctrl_blk.out.prod_blk_idx; + } else { + return 0; + } +} + static bool tone_active; /* Buffer which can hold max 1 period test tone at 100 Hz */ static uint16_t test_tone_buf[CONFIG_AUDIO_SAMPLE_RATE_HZ / 100]; @@ -433,6 +447,7 @@ static void audio_datapath_presentation_compensation(uint32_t recv_frame_ts_us, return; } + /* Operation to obtain nearest whole number in subsequent operations */ if (pres_adj_us >= 0) { pres_adj_us += (BLK_PERIOD_US / 2); } else { @@ -866,7 +881,8 @@ ZBUS_LISTENER_DEFINE(sdu_ref_msg_listen, audio_datapath_sdu_ref_update); int audio_datapath_pres_delay_us_set(uint32_t delay_us) { if (!IN_RANGE(delay_us, CONFIG_AUDIO_MIN_PRES_DLY_US, CONFIG_AUDIO_MAX_PRES_DLY_US)) { - LOG_WRN("Presentation delay not supported: %d", delay_us); + LOG_WRN("Presentation delay not supported: %d us", delay_us); + LOG_WRN("Keeping current value: %d us", ctrl_blk.pres_comp.pres_delay_us); return -EINVAL; } @@ -960,8 +976,7 @@ void audio_datapath_stream_out(const uint8_t *buf, size_t size, uint32_t sdu_ref } /*** Add audio data to FIFO buffer ***/ - - int32_t num_blks_in_fifo = ctrl_blk.out.prod_blk_idx - ctrl_blk.out.cons_blk_idx; + uint32_t num_blks_in_fifo = filled_blocks_get(); if ((num_blks_in_fifo + NUM_BLKS_IN_FRAME) > FIFO_NUM_BLKS) { LOG_WRN("Output audio stream overrun - Discarding audio frame"); diff --git a/applications/nrf5340_audio/src/audio/audio_system.c b/applications/nrf5340_audio/src/audio/audio_system.c index 32abf6ae41c6..664067ec4675 100644 --- a/applications/nrf5340_audio/src/audio/audio_system.c +++ b/applications/nrf5340_audio/src/audio/audio_system.c @@ -68,6 +68,7 @@ static void audio_gateway_configure(void) } #if (CONFIG_STREAM_BIDIRECTIONAL) + sw_codec_cfg.decoder.audio_ch = AUDIO_CHANNEL_DEFAULT; sw_codec_cfg.decoder.num_ch = 1; sw_codec_cfg.decoder.channel_mode = SW_CODEC_MONO; #endif /* (CONFIG_STREAM_BIDIRECTIONAL) */ @@ -91,10 +92,13 @@ static void audio_headset_configure(void) } #if (CONFIG_STREAM_BIDIRECTIONAL) + sw_codec_cfg.decoder.audio_ch = AUDIO_CHANNEL_DEFAULT; sw_codec_cfg.encoder.num_ch = 1; sw_codec_cfg.encoder.channel_mode = SW_CODEC_MONO; #endif /* (CONFIG_STREAM_BIDIRECTIONAL) */ + channel_assignment_get(&sw_codec_cfg.decoder.audio_ch); + sw_codec_cfg.decoder.num_ch = 1; sw_codec_cfg.decoder.channel_mode = SW_CODEC_MONO; diff --git a/applications/nrf5340_audio/src/bluetooth/Kconfig b/applications/nrf5340_audio/src/bluetooth/Kconfig index 74f2822867ef..2bb2d8d20624 100644 --- a/applications/nrf5340_audio/src/bluetooth/Kconfig +++ b/applications/nrf5340_audio/src/bluetooth/Kconfig @@ -107,6 +107,10 @@ module = BLE module-str = ble source "subsys/logging/Kconfig.template.log_config" +module = BT_LE_AUDIO_TX +module-str = bt_le_audio_tx +source "subsys/logging/Kconfig.template.log_config" + endmenu # Log levels #----------------------------------------------------------------------------# diff --git a/applications/nrf5340_audio/src/bluetooth/bt_content_control/media/bt_content_ctrl_media.c b/applications/nrf5340_audio/src/bluetooth/bt_content_control/media/bt_content_ctrl_media.c index de090822bf25..18e6e2cd0e19 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_content_control/media/bt_content_ctrl_media.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_content_control/media/bt_content_ctrl_media.c @@ -137,11 +137,19 @@ static void mcc_discover_mcs_cb(struct bt_conn *conn, int err) */ static void mcc_send_command_cb(struct bt_conn *conn, int err, const struct mpl_cmd *cmd) { + int ret; + LOG_DBG("mcc_send_command_cb"); if (err) { - LOG_ERR("MCC: cmd send failed (%d) - opcode: %u, param: %d", err, cmd->opcode, - cmd->param); + struct bt_conn_info info; + + /* Check that we are actually in a connected state before printing an error */ + ret = bt_conn_get_info(conn, &info); + if (!ret && info.state == (BT_CONN_STATE_CONNECTED)) { + LOG_ERR("MCC: cmd send failed (%d) - opcode: %u, param: %d", err, + cmd->opcode, cmd->param); + } } } #endif /* defined(CONFIG_BT_MCC_SET_MEDIA_CONTROL_POINT) */ diff --git a/applications/nrf5340_audio/src/bluetooth/bt_management/bt_mgmt.c b/applications/nrf5340_audio/src/bluetooth/bt_management/bt_mgmt.c index 3b004c4ef714..115ee9d32c38 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_management/bt_mgmt.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_management/bt_mgmt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "macros_common.h" #include "zbus_common.h" diff --git a/applications/nrf5340_audio/src/bluetooth/bt_management/controller_config/Kconfig b/applications/nrf5340_audio/src/bluetooth/bt_management/controller_config/Kconfig index 987ca4b0d7a7..24166a1e29ff 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_management/controller_config/Kconfig +++ b/applications/nrf5340_audio/src/bluetooth/bt_management/controller_config/Kconfig @@ -10,7 +10,7 @@ menu "Controller config" menu "nRF21540" config NRF_21540_ACTIVE - def_bool $(shields_list_contains,nrf21540ek_fwd) + def_bool $(shields_list_contains,nrf21540ek) select EXPERIMENTAL help The front end module can help boost the TX power as high as 20 dBm. diff --git a/applications/nrf5340_audio/src/bluetooth/bt_management/dfu/bt_mgmt_dfu.c b/applications/nrf5340_audio/src/bluetooth/bt_management/dfu/bt_mgmt_dfu.c index 388c6db0ab4d..a6bece89c988 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_management/dfu/bt_mgmt_dfu.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_management/dfu/bt_mgmt_dfu.c @@ -23,19 +23,21 @@ LOG_MODULE_REGISTER(bt_mgmt_dfu, CONFIG_BT_MGMT_DFU_LOG_LEVEL); #define DEVICE_NAME_DFU CONFIG_BT_DFU_DEVICE_NAME #define DEVICE_NAME_DFU_LEN (sizeof(DEVICE_NAME_DFU) - 1) -/* Advertising data for SMP_SVR UUID */ -static struct bt_le_adv_param adv_param; static const struct bt_data ad_peer[] = { BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), BT_DATA_BYTES(BT_DATA_UUID128_ALL, 0x84, 0xaa, 0x60, 0x74, 0x52, 0x8a, 0x8b, 0x86, 0xd3, 0x4c, 0xb7, 0x1d, 0x1d, 0xdc, 0x53, 0x8d), }; +/* Set aside space for name to be in scan response */ +static struct bt_data sd_peer[1]; + static void smp_adv(void) { int ret; - ret = bt_le_adv_start(&adv_param, ad_peer, ARRAY_SIZE(ad_peer), NULL, 0); + ret = bt_le_adv_start(BT_LE_ADV_CONN, ad_peer, ARRAY_SIZE(ad_peer), sd_peer, + ARRAY_SIZE(sd_peer)); if (ret) { LOG_ERR("SMP_SVR Advertising failed to start (ret %d)", ret); return; @@ -63,26 +65,46 @@ static struct bt_conn_cb dfu_conn_callbacks = { static void dfu_set_bt_name(void) { - char name[CONFIG_BT_DEVICE_NAME_MAX] = {0}; + int ret; + static char name[CONFIG_BT_DEVICE_NAME_MAX]; strlcpy(name, CONFIG_BT_DEVICE_NAME, CONFIG_BT_DEVICE_NAME_MAX); - strlcat(name, "_", CONFIG_BT_DEVICE_NAME_MAX); + ret = strlcat(name, "_", CONFIG_BT_DEVICE_NAME_MAX); + if (ret >= CONFIG_BT_DEVICE_NAME_MAX) { + LOG_ERR("Failed to set full BT name, will truncate"); + } + #if (CONFIG_AUDIO_DEV == GATEWAY) - strlcat(name, GW_TAG, CONFIG_BT_DEVICE_NAME_MAX); + ret = strlcat(name, GW_TAG, CONFIG_BT_DEVICE_NAME_MAX); + if (ret >= CONFIG_BT_DEVICE_NAME_MAX) { + LOG_ERR("Failed to set full BT name, will truncate"); + } #else enum audio_channel channel; channel_assignment_get(&channel); if (channel == AUDIO_CH_L) { - strlcat(name, CH_L_TAG, CONFIG_BT_DEVICE_NAME_MAX); + ret = strlcat(name, CH_L_TAG, CONFIG_BT_DEVICE_NAME_MAX); + if (ret >= CONFIG_BT_DEVICE_NAME_MAX) { + LOG_ERR("Failed to set full BT name, will truncate"); + } } else { - strlcat(name, CH_R_TAG, CONFIG_BT_DEVICE_NAME_MAX); + ret = strlcat(name, CH_R_TAG, CONFIG_BT_DEVICE_NAME_MAX); + if (ret >= CONFIG_BT_DEVICE_NAME_MAX) { + LOG_ERR("Failed to set full BT name, will truncate"); + } } #endif - strlcat(name, "_DFU", CONFIG_BT_DEVICE_NAME_MAX); - bt_set_name(name); + ret = strlcat(name, "_DFU", CONFIG_BT_DEVICE_NAME_MAX); + if (ret >= CONFIG_BT_DEVICE_NAME_MAX) { + LOG_ERR("Failed to set full BT name, will truncate"); + } + + sd_peer[0].type = BT_DATA_NAME_COMPLETE; + sd_peer[0].data_len = strlen(name); + sd_peer[0].data = name; } void bt_mgmt_dfu_start(void) @@ -90,7 +112,6 @@ void bt_mgmt_dfu_start(void) LOG_INF("Entering SMP server mode"); bt_conn_cb_register(&dfu_conn_callbacks); - adv_param = *BT_LE_ADV_CONN_NAME; dfu_set_bt_name(); smp_adv(); diff --git a/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_broadcast.c b/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_broadcast.c index 307c15d5653b..351162269e57 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_broadcast.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_broadcast.c @@ -41,7 +41,7 @@ static char const *srch_name; static uint32_t srch_brdcast_id = BRDCAST_ID_NOT_USED; static struct bt_le_per_adv_sync *pa_sync; static const struct bt_bap_scan_delegator_recv_state *req_recv_state; -static uint8_t bt_mgmt_broadcast_code[BT_AUDIO_BROADCAST_CODE_SIZE]; +static uint8_t bt_mgmt_broadcast_code[BT_ISO_BROADCAST_CODE_SIZE]; struct broadcast_source { char name[BLE_SEARCH_NAME_MAX_LEN]; @@ -183,6 +183,7 @@ static bool scan_check_broadcast_source(struct bt_data *data, void *user_data) static void scan_recv_cb(const struct bt_le_scan_recv_info *info, struct net_buf_simple *ad) { struct broadcast_source source = {.id = INVALID_BROADCAST_ID}; + static bool id_change_printed; /* We are only interested in non-connectable periodic advertisers */ if ((info->adv_props & BT_GAP_ADV_PROP_CONNECTABLE) || info->interval == 0) { @@ -191,22 +192,32 @@ static void scan_recv_cb(const struct bt_le_scan_recv_info *info, struct net_buf bt_data_parse(ad, scan_check_broadcast_source, (void *)&source); - if (source.id != INVALID_BROADCAST_ID) { - if (srch_brdcast_id < BRDCAST_ID_NOT_USED) { - /* Valid srch_brdcast_id supplied */ - if (source.id != srch_brdcast_id) { - /* Broadcaster does not match src_brdcast_id */ - return; - } + if (source.id == INVALID_BROADCAST_ID) { + return; + } - } else if (strncmp(source.name, srch_name, BLE_SEARCH_NAME_MAX_LEN) != 0) { - /* Broadcaster does not match src_name */ + if (srch_brdcast_id < BRDCAST_ID_NOT_USED) { + /* Valid srch_brdcast_id supplied */ + if (source.id != srch_brdcast_id) { + /* Broadcaster does not match src_brdcast_id */ + if (!id_change_printed && + strncmp(source.name, srch_name, BLE_SEARCH_NAME_MAX_LEN) == 0) { + LOG_INF("%s found with ID: 0x%06x\r\n" + "Looking for ID: 0x%06x. Broadcaster may have changed ID", + source.name, source.id, srch_brdcast_id); + id_change_printed = true; + } return; } - LOG_DBG("Broadcast source %s found, id: 0x%06x", source.name, source.id); - periodic_adv_sync(info, source); + } else if (strncmp(source.name, srch_name, BLE_SEARCH_NAME_MAX_LEN) != 0) { + /* Broadcaster does not match src_name */ + return; } + + LOG_DBG("Broadcast source %s found, id: 0x%06x", source.name, source.id); + id_change_printed = false; + periodic_adv_sync(info, source); } static void pa_synced_cb(struct bt_le_per_adv_sync *sync, @@ -363,13 +374,13 @@ static int pa_sync_term_req_cb(struct bt_conn *conn, static void broadcast_code_cb(struct bt_conn *conn, const struct bt_bap_scan_delegator_recv_state *recv_state, - const uint8_t broadcast_code[BT_AUDIO_BROADCAST_CODE_SIZE]) + const uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE]) { int ret; struct bt_mgmt_msg msg; LOG_DBG("Broadcast code received for %p", (void *)recv_state); - memcpy(bt_mgmt_broadcast_code, broadcast_code, BT_AUDIO_BROADCAST_CODE_SIZE); + memcpy(bt_mgmt_broadcast_code, broadcast_code, BT_ISO_BROADCAST_CODE_SIZE); msg.event = BT_MGMT_BROADCAST_CODE_RECEIVED; ret = zbus_chan_pub(&bt_mgmt_chan, &msg, K_NO_WAIT); diff --git a/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_conn.c b/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_conn.c index 2363cd844ca6..425e0730859e 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_conn.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_management/scanning/bt_mgmt_scan_for_conn.c @@ -43,7 +43,7 @@ static void bond_connect(const struct bt_bond_info *bond_info, void *user_data) { int ret; const bt_addr_le_t *adv_addr = user_data; - struct bt_conn *conn; + struct bt_conn *conn = NULL; char addr_string[BT_ADDR_LE_STR_LEN]; if (!bt_addr_le_cmp(&bond_info->addr, adv_addr)) { @@ -137,14 +137,14 @@ static bool device_name_check(struct bt_data *data, void *user_data) { int ret; bt_addr_le_t *addr = user_data; - struct bt_conn *conn; + struct bt_conn *conn = NULL; char addr_string[BT_ADDR_LE_STR_LEN]; /* We only care about LTVs with name */ if (data->type == BT_DATA_NAME_COMPLETE || data->type == BT_DATA_NAME_SHORTENED) { size_t srch_name_size = strlen(srch_name); if ((data->data_len == srch_name_size) && - (strncmp(srch_name, data->data, srch_name_size) == 0)) { + (memcmp(srch_name, data->data, srch_name_size) == 0)) { /* Check if the device is still connected due to waiting for ACL timeout */ if (conn_exist_check(addr)) { /* Device is already connected, stop parsing the adv data */ @@ -197,7 +197,7 @@ static bool csip_found(struct bt_data *data, void *user_data) { int ret; bt_addr_le_t *addr = user_data; - struct bt_conn *conn; + struct bt_conn *conn = NULL; char addr_string[BT_ADDR_LE_STR_LEN]; if (!bt_csip_set_coordinator_is_set_member(server_sirk, data)) { diff --git a/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_ctlr.c b/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_ctlr.c index 9c816176423f..a04db8c14f7a 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_ctlr.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_ctlr.c @@ -11,8 +11,6 @@ #include #include -#include "macros_common.h" - #include LOG_MODULE_REGISTER(bt_vol_ctlr, CONFIG_BT_VOL_LOG_LEVEL); diff --git a/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_rend.c b/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_rend.c index f2e4491eb0af..32f1f9e355dd 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_rend.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_rendering_and_capture/volume/bt_vol_rend.c @@ -11,7 +11,6 @@ #include #include -#include "macros_common.h" #include "bt_rendering_and_capture.h" #include diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/Kconfig b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/Kconfig index e3a235b658ad..84646ff6a89d 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/Kconfig +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/Kconfig @@ -217,6 +217,21 @@ config BT_AUDIO_SCAN_DELEGATOR search for a predefined broadcast source. Instead, it will wait for a broadcast assistant to connect and control. +config BT_SET_IDENTITY_RESOLVING_KEY_DEFAULT + string + default "NRF5340_BIS_DEMO" + help + Default string to configure the Set Identify Resolving Key (SIRK), must + be changed before production uniquely for each coordinated set. + +config BT_SET_IDENTITY_RESOLVING_KEY + string "String used to configure the SIRK" + default BT_SET_IDENTITY_RESOLVING_KEY_DEFAULT + help + Defines a string to configure the Set Identify Resolving Key (SIRK), must + be changed before production uniquely for each coordinated set. The SIRK + must be 16 characters (16 bytes). + config BT_AUDIO_BROADCAST_ZBUS_EVT_STREAM_SENT bool "Enable Zephyr bus event for stream sent" help diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.c b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.c index db58972140cb..ff1a05f5ba7d 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.c @@ -10,11 +10,14 @@ #include #include #include +#include +#include #include /* TODO: Remove when a get_info function is implemented in host */ #include <../subsys/bluetooth/audio/bap_endpoint.h> +#include "bt_mgmt.h" #include "macros_common.h" #include "zbus_common.h" #include "channel_assignment.h" @@ -30,7 +33,6 @@ ZBUS_CHAN_DEFINE(le_audio_chan, struct le_audio_msg, NULL, NULL, ZBUS_OBSERVERS_ static uint8_t bis_encryption_key[BT_ISO_BROADCAST_CODE_SIZE] = {0}; static bool broadcast_code_received; - struct audio_codec_info { uint8_t id; uint16_t cid; @@ -42,7 +44,6 @@ struct audio_codec_info { int bitrate; int blocks_per_sdu; }; - struct active_audio_stream { struct bt_bap_stream *stream; struct audio_codec_info *codec; @@ -53,9 +54,7 @@ static struct bt_bap_broadcast_sink *broadcast_sink; static struct bt_bap_stream audio_streams[CONFIG_BT_BAP_BROADCAST_SNK_STREAM_COUNT]; static struct audio_codec_info audio_codec_info[CONFIG_BT_BAP_BROADCAST_SNK_STREAM_COUNT]; static uint32_t bis_index_bitfields[CONFIG_BT_BAP_BROADCAST_SNK_STREAM_COUNT]; - static struct bt_le_per_adv_sync *pa_sync_stored; - static struct active_audio_stream active_stream; /* The values of sync_stream_cnt and active_stream_index must never become larger @@ -81,6 +80,104 @@ static le_audio_receive_cb receive_cb; static bool init_routine_completed; static bool paused; +static struct bt_csip_set_member_svc_inst *csip; + +static uint8_t flags_adv_data; +static uint8_t bass_service_uuid[BT_UUID_SIZE_16]; +static uint8_t gap_appear_adv_data[BT_UUID_SIZE_16]; +static uint8_t csip_rsi_adv_data[BT_CSIP_RSI_SIZE]; + +#define CSIP_SET_SIZE 2 +enum csip_set_rank { + CSIP_HL_RANK = 1, + CSIP_HR_RANK = 2 +}; + +/* Callback for locking state change from server side */ +static void csip_lock_changed_cb(struct bt_conn *conn, struct bt_csip_set_member_svc_inst *csip, + bool locked) +{ + LOG_DBG("Client %p %s the lock", (void *)conn, locked ? "locked" : "released"); +} + +/* Callback for SIRK read request from peer side */ +static uint8_t sirk_read_req_cb(struct bt_conn *conn, struct bt_csip_set_member_svc_inst *csip) +{ + /* Accept the request to read the SIRK, but return encrypted SIRK instead of plaintext */ + return BT_CSIP_READ_SIRK_REQ_RSP_ACCEPT_ENC; +} + +static struct bt_csip_set_member_cb csip_callbacks = { + .lock_changed = csip_lock_changed_cb, + .sirk_read_req = sirk_read_req_cb, +}; + +struct bt_csip_set_member_register_param csip_param = { + .set_size = CSIP_SET_SIZE, + .lockable = true, + .cb = &csip_callbacks, +}; + +int broadcast_sink_uuid_populate(struct net_buf_simple *uuid_buf) +{ + if (net_buf_simple_tailroom(uuid_buf) >= (BT_UUID_SIZE_16 * 3)) { + net_buf_simple_add_le16(uuid_buf, BT_UUID_BASS_VAL); + net_buf_simple_add_le16(uuid_buf, BT_UUID_PACS_VAL); + } else { + LOG_ERR("Not enough space for UUIDS"); + return -ENOMEM; + } + + return 0; +} + +int broadcast_sink_adv_populate(struct bt_data *adv_buf, uint8_t adv_buf_vacant) +{ + int ret; + uint32_t adv_buf_cnt = 0; + + if (IS_ENABLED(CONFIG_BT_CSIP_SET_MEMBER)) { + ret = bt_mgmt_adv_buffer_put(adv_buf, &adv_buf_cnt, adv_buf_vacant, + sizeof(csip_rsi_adv_data), BT_DATA_CSIS_RSI, + (void *)csip_rsi_adv_data); + if (ret) { + return ret; + } + } + + /* + * AD format required for broadcast sink with scan delegator. + * Details can be found in Basic Audio Profile Section 3.9.2. + */ + sys_put_le16(BT_UUID_BASS_VAL, &bass_service_uuid[0]); + + ret = bt_mgmt_adv_buffer_put(adv_buf, &adv_buf_cnt, adv_buf_vacant, + sizeof(bass_service_uuid), BT_DATA_SVC_DATA16, + (void *)bass_service_uuid); + if (ret) { + return ret; + } + + sys_put_le16(CONFIG_BT_DEVICE_APPEARANCE, &gap_appear_adv_data[0]); + + ret = bt_mgmt_adv_buffer_put(adv_buf, &adv_buf_cnt, adv_buf_vacant, + sizeof(gap_appear_adv_data), BT_DATA_GAP_APPEARANCE, + (void *)gap_appear_adv_data); + if (ret) { + return ret; + } + + flags_adv_data = BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR; + + ret = bt_mgmt_adv_buffer_put(adv_buf, &adv_buf_cnt, adv_buf_vacant, sizeof(uint8_t), + BT_DATA_FLAGS, (void *)&flags_adv_data); + if (ret) { + return ret; + } + + return adv_buf_cnt; +} + static int broadcast_sink_cleanup(void) { int ret; @@ -363,7 +460,15 @@ static void base_recv_cb(struct bt_bap_broadcast_sink *sink, const struct bt_bap if (suitable_stream_found) { /* Set the initial active stream based on the defined channel of the device */ - channel_assignment_get((enum audio_channel *)&active_stream_index); + enum audio_channel audio_channel_temp; + + channel_assignment_get(&audio_channel_temp); + if (audio_channel_temp > AUDIO_CH_NUM) { + LOG_ERR("Invalid channel assignment"); + return; + } + + active_stream_index = (uint8_t)audio_channel_temp; /** If the stream matching channel is not present, revert back to first BIS, e.g. * mono stream but channel assignment is RIGHT @@ -674,8 +779,10 @@ int broadcast_sink_enable(le_audio_receive_cb recv_cb) if (channel == AUDIO_CH_L) { ret = bt_pacs_set_location(BT_AUDIO_DIR_SINK, BT_AUDIO_LOCATION_FRONT_LEFT); + csip_param.rank = CSIP_HL_RANK; } else { ret = bt_pacs_set_location(BT_AUDIO_DIR_SINK, BT_AUDIO_LOCATION_FRONT_RIGHT); + csip_param.rank = CSIP_HR_RANK; } if (ret) { @@ -701,6 +808,33 @@ int broadcast_sink_enable(le_audio_receive_cb recv_cb) return ret; } + if (IS_ENABLED(CONFIG_BT_AUDIO_SCAN_DELEGATOR)) { + if (IS_ENABLED(CONFIG_BT_CSIP_SET_MEMBER_TEST_SAMPLE_DATA)) { + LOG_WRN("CSIP test sample data is used, must be changed " + "before production"); + } else { + if (strcmp(CONFIG_BT_SET_IDENTITY_RESOLVING_KEY_DEFAULT, + CONFIG_BT_SET_IDENTITY_RESOLVING_KEY) == 0) { + LOG_WRN("CSIP using the default SIRK, must be changed " + "before production"); + } + memcpy(csip_param.sirk, CONFIG_BT_SET_IDENTITY_RESOLVING_KEY, + BT_CSIP_SIRK_SIZE); + } + + ret = bt_cap_acceptor_register(&csip_param, &csip); + if (ret) { + LOG_ERR("Failed to register CAP acceptor. Err: %d", ret); + return ret; + } + + ret = bt_csip_set_member_generate_rsi(csip, csip_rsi_adv_data); + if (ret) { + LOG_ERR("Failed to generate RSI. Err: %d", ret); + return ret; + } + } + bt_bap_broadcast_sink_register_cb(&broadcast_sink_cbs); for (int i = 0; i < ARRAY_SIZE(audio_streams); i++) { diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.h b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.h index 814ba01f8e22..29129df5c0c1 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.h +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_sink.h @@ -9,6 +9,29 @@ #include "bt_le_audio_tx.h" +/** + * @brief Put the UUIDs from this module into the buffer. + * + * @note This partial data is used to build a complete extended advertising packet. + * + * @param[out] uuid_buf Buffer being populated with UUIDs. + * + * @return 0 for success, error otherwise. + */ +int broadcast_sink_uuid_populate(struct net_buf_simple *uuid_buf); + +/** + * @brief Put the advertising data from this module into the buffer. + * + * @note This partial data is used to build a complete extended advertising packet. + * + * @param[out] adv_buf Buffer being populated with ext adv elements. + * @param[in] adv_buf_vacant Number of vacant elements in @p adv_buf. + * + * @return Negative values for errors or number of elements added to @p adv_buf. + */ +int broadcast_sink_adv_populate(struct bt_data *adv_buf, uint8_t adv_buf_vacant); + /** * @brief Change the active audio stream if the broadcast isochronous group (BIG) contains * more than one broadcast isochronous stream (BIS). diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.c b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.c index 86d5f85a73e3..1dd9d7d50594 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.c @@ -135,6 +135,27 @@ static void stream_started_cb(struct bt_bap_stream *stream) le_audio_print_codec(stream->codec_cfg, BT_AUDIO_DIR_SOURCE); } +/** + * @brief Check if there are any streaming streams in a broadcast source (BIG). + * + * @param big_index BIG index. + * + * @return true if there are streaming streams, false otherwise. + */ +static bool source_has_streaming_streams(uint8_t big_index) +{ + for (int i = 0; i < CONFIG_BT_BAP_BROADCAST_SRC_SUBGROUP_COUNT; i++) { + for (int j = 0; j < CONFIG_BT_BAP_BROADCAST_SRC_STREAM_COUNT; j++) { + if (le_audio_ep_state_check(cap_streams[big_index][i][j].bap_stream.ep, + BT_BAP_EP_STATE_STREAMING)) { + return true; + } + } + } + + return false; +} + static void stream_stopped_cb(struct bt_bap_stream *stream, uint8_t reason) { int ret; @@ -149,10 +170,12 @@ static void stream_stopped_cb(struct bt_bap_stream *stream, uint8_t reason) LOG_INF("Broadcast source %p stopped. Reason: %d", (void *)stream, reason); - if (delete_broadcast_src[idx.lvl1] && broadcast_sources[idx.lvl1] != NULL) { + if (delete_broadcast_src[idx.lvl1] && broadcast_sources[idx.lvl1] != NULL && + !source_has_streaming_streams(idx.lvl1)) { ret = bt_cap_initiator_broadcast_audio_delete(broadcast_sources[idx.lvl1]); if (ret) { - LOG_ERR("Unable to delete broadcast source %p", (void *)stream); + LOG_ERR("Unable to delete broadcast source %p, ret: %d", (void *)stream, + ret); delete_broadcast_src[idx.lvl1] = false; return; } diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.h b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.h index a0228be1987c..d13a04fc11e9 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.h +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/broadcast/broadcast_source.h @@ -100,7 +100,7 @@ struct broadcast_source_big { uint8_t num_subgroups; uint8_t packing; bool encryption; - uint8_t broadcast_code[BT_AUDIO_BROADCAST_CODE_SIZE + 1]; + uint8_t broadcast_code[BT_ISO_BROADCAST_CODE_SIZE]; char broadcast_name[BROADCAST_SOURCE_ADV_NAME_MAX + 1]; char adv_name[CONFIG_BT_DEVICE_NAME_MAX + 1]; bool fixed_id; diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/bt_le_audio_tx/bt_le_audio_tx.c b/applications/nrf5340_audio/src/bluetooth/bt_stream/bt_le_audio_tx/bt_le_audio_tx.c index f590c9128147..41608e608493 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/bt_le_audio_tx/bt_le_audio_tx.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/bt_le_audio_tx/bt_le_audio_tx.c @@ -16,7 +16,7 @@ #include "audio_sync_timer.h" #include -LOG_MODULE_REGISTER(bt_le_audio_tx, CONFIG_BLE_LOG_LEVEL); +LOG_MODULE_REGISTER(bt_le_audio_tx, CONFIG_BT_LE_AUDIO_TX_LOG_LEVEL); ZBUS_CHAN_DEFINE(sdu_ref_chan, struct sdu_ref_msg, NULL, NULL, ZBUS_OBSERVERS_EMPTY, ZBUS_MSG_INIT(0)); diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.c b/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.c index c12a23af983b..26aabe4b25fb 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.c +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.c @@ -93,20 +93,20 @@ static struct bt_bap_unicast_group *unicast_group; static bool unicast_group_created; static struct bt_bap_lc3_preset lc3_preset_sink = BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SINK; -static struct bt_bap_lc3_preset lc3_preset_sink_48_4_1 = - BT_BAP_LC3_UNICAST_PRESET_48_4_1(BT_AUDIO_LOCATION_ANY, (BT_AUDIO_CONTEXT_TYPE_ANY)); -static struct bt_bap_lc3_preset lc3_preset_sink_24_2_1 = - BT_BAP_LC3_UNICAST_PRESET_24_2_1(BT_AUDIO_LOCATION_ANY, (BT_AUDIO_CONTEXT_TYPE_ANY)); -static struct bt_bap_lc3_preset lc3_preset_sink_16_2_1 = - BT_BAP_LC3_UNICAST_PRESET_16_2_1(BT_AUDIO_LOCATION_ANY, (BT_AUDIO_CONTEXT_TYPE_ANY)); +static struct bt_bap_lc3_preset lc3_preset_sink_48_4_1 = BT_BAP_LC3_UNICAST_PRESET_48_4_1( + BT_AUDIO_LOCATION_ANY, (BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED)); +static struct bt_bap_lc3_preset lc3_preset_sink_24_2_1 = BT_BAP_LC3_UNICAST_PRESET_24_2_1( + BT_AUDIO_LOCATION_ANY, (BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED)); +static struct bt_bap_lc3_preset lc3_preset_sink_16_2_1 = BT_BAP_LC3_UNICAST_PRESET_16_2_1( + BT_AUDIO_LOCATION_ANY, (BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED)); static struct bt_bap_lc3_preset lc3_preset_source = BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SOURCE; static struct bt_bap_lc3_preset lc3_preset_source_48_4_1 = - BT_BAP_LC3_UNICAST_PRESET_48_4_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_ANY); + BT_BAP_LC3_UNICAST_PRESET_48_4_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED); static struct bt_bap_lc3_preset lc3_preset_source_24_2_1 = - BT_BAP_LC3_UNICAST_PRESET_24_2_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_ANY); + BT_BAP_LC3_UNICAST_PRESET_24_2_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED); static struct bt_bap_lc3_preset lc3_preset_source_16_2_1 = - BT_BAP_LC3_UNICAST_PRESET_16_2_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_ANY); + BT_BAP_LC3_UNICAST_PRESET_16_2_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED); static bool playing_state = true; @@ -757,6 +757,7 @@ static int update_cap_sink_stream_qos(struct le_audio_unicast_server *unicast_se param.streams = streams; param.count = 0; param.type = BT_CAP_SET_TYPE_AD_HOC; + param.release = true; if (playing_state && le_audio_ep_state_check(unicast_server->cap_sink_stream.bap_stream.ep, @@ -1680,6 +1681,7 @@ int unicast_client_stop(uint8_t cig_index) param.streams = streams; param.count = 0; param.type = BT_CAP_SET_TYPE_AD_HOC; + param.release = true; le_audio_event_publish(LE_AUDIO_EVT_NOT_STREAMING, NULL, 0); diff --git a/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.h b/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.h index 3327578cfd96..834d19cd4d65 100644 --- a/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.h +++ b/applications/nrf5340_audio/src/bluetooth/bt_stream/unicast/unicast_client.h @@ -20,32 +20,38 @@ enum unicast_discover_dir { #if CONFIG_BT_BAP_UNICAST_CONFIGURABLE #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SINK \ - BT_BAP_LC3_PRESET_CONFIGURABLE(BT_AUDIO_LOCATION_FRONT_LEFT, BT_AUDIO_CONTEXT_TYPE_MEDIA, \ + BT_BAP_LC3_PRESET_CONFIGURABLE(BT_AUDIO_LOCATION_FRONT_LEFT, \ + BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED, \ CONFIG_BT_AUDIO_BITRATE_UNICAST_SINK) #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SOURCE \ - BT_BAP_LC3_PRESET_CONFIGURABLE(BT_AUDIO_LOCATION_FRONT_LEFT, BT_AUDIO_CONTEXT_TYPE_MEDIA, \ + BT_BAP_LC3_PRESET_CONFIGURABLE(BT_AUDIO_LOCATION_FRONT_LEFT, \ + BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED, \ CONFIG_BT_AUDIO_BITRATE_UNICAST_SRC) #elif CONFIG_BT_BAP_UNICAST_16_2_1 #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SINK \ - BT_BAP_LC3_UNICAST_PRESET_16_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, BT_AUDIO_CONTEXT_TYPE_MEDIA) + BT_BAP_LC3_UNICAST_PRESET_16_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, \ + BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED) #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SOURCE \ - BT_BAP_LC3_UNICAST_PRESET_16_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, BT_AUDIO_CONTEXT_TYPE_MEDIA) + BT_BAP_LC3_UNICAST_PRESET_16_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, \ + BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED) #elif CONFIG_BT_BAP_UNICAST_24_2_1 #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SINK \ - BT_BAP_LC3_UNICAST_PRESET_24_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, BT_AUDIO_CONTEXT_TYPE_MEDIA) + BT_BAP_LC3_UNICAST_PRESET_24_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, \ + BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED) #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SOURCE \ - BT_BAP_LC3_UNICAST_PRESET_24_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, BT_AUDIO_CONTEXT_TYPE_MEDIA) + BT_BAP_LC3_UNICAST_PRESET_24_2_1(BT_AUDIO_LOCATION_FRONT_LEFT, \ + BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED) #elif CONFIG_BT_BAP_UNICAST_48_4_1 #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SINK \ - BT_BAP_LC3_UNICAST_PRESET_48_4_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_MEDIA) + BT_BAP_LC3_UNICAST_PRESET_48_4_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED) #define BT_BAP_LC3_UNICAST_PRESET_NRF5340_AUDIO_SOURCE \ - BT_BAP_LC3_UNICAST_PRESET_48_4_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_MEDIA) + BT_BAP_LC3_UNICAST_PRESET_48_4_1(BT_AUDIO_LOCATION_ANY, BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED) #else #error Unsupported LC3 codec preset for unicast #endif /* CONFIG_BT_BAP_UNICAST_CONFIGURABLE */ diff --git a/applications/nrf5340_audio/src/modules/audio_i2s.h b/applications/nrf5340_audio/src/modules/audio_i2s.h index e7171320e53c..76339f76f20a 100644 --- a/applications/nrf5340_audio/src/modules/audio_i2s.h +++ b/applications/nrf5340_audio/src/modules/audio_i2s.h @@ -10,11 +10,6 @@ #include #include -/* - * Calculate the number of bytes of one frame, as per now, this frame can either - * be 10 or 7.5 ms. Since we can't have floats in a define we use 15/2 instead - */ - /** * Calculation: * FREQ_VALUE = 2^16 * ((12 * f_out / 32M) - 4) @@ -26,6 +21,10 @@ #define HFCLKAUDIO_12_165_MHZ 0x8FD8 #define HFCLKAUDIO_12_411_MHZ 0xA774 +/* + * Calculate the number of bytes of one frame, as per now, this frame can either + * be 10 or 7.5 ms. Since we can't have floats in a define we use 15/2 instead + */ #if ((CONFIG_AUDIO_FRAME_DURATION_US == 7500) && CONFIG_SW_CODEC_LC3) #define FRAME_SIZE_BYTES \ diff --git a/applications/nrf5340_audio/src/modules/audio_sync_timer.c b/applications/nrf5340_audio/src/modules/audio_sync_timer.c index 6b2ef7b8fafc..090cf9cb3045 100644 --- a/applications/nrf5340_audio/src/modules/audio_sync_timer.c +++ b/applications/nrf5340_audio/src/modules/audio_sync_timer.c @@ -144,6 +144,7 @@ static void rtc_isr_handler(nrfx_rtc_int_type_t int_type) static int audio_sync_timer_init(void) { nrfx_err_t ret; + nrfx_dppi_t dppi = NRFX_DPPI_INSTANCE(0); ret = nrfx_timer_init(&audio_sync_hf_timer_instance, &cfg, unused_timer_isr_handler); if (ret - NRFX_ERROR_BASE_NUM) { @@ -157,11 +158,11 @@ static int audio_sync_timer_init(void) return -ENODEV; } - IRQ_CONNECT(RTC0_IRQn, IRQ_PRIO_LOWEST, nrfx_rtc_0_irq_handler, NULL, 0); + IRQ_CONNECT(RTC0_IRQn, IRQ_PRIO_LOWEST, nrfx_isr, nrfx_rtc_0_irq_handler, 0); nrfx_rtc_overflow_enable(&audio_sync_lf_timer_instance, true); /* Initialize capturing of I2S frame start event timestamps */ - ret = nrfx_dppi_channel_alloc(&dppi_channel_i2s_frame_start); + ret = nrfx_dppi_channel_alloc(&dppi, &dppi_channel_i2s_frame_start); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel alloc error (I2S frame start): %d", ret); return -ENOMEM; @@ -177,14 +178,14 @@ static int audio_sync_timer_init(void) dppi_channel_i2s_frame_start); nrf_i2s_publish_set(NRF_I2S0, NRF_I2S_EVENT_FRAMESTART, dppi_channel_i2s_frame_start); - ret = nrfx_dppi_channel_enable(dppi_channel_i2s_frame_start); + ret = nrfx_dppi_channel_enable(&dppi, dppi_channel_i2s_frame_start); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel enable error (I2S frame start): %d", ret); return -EIO; } /* Initialize capturing of current timestamps */ - ret = nrfx_dppi_channel_alloc(&dppi_channel_curr_time_capture); + ret = nrfx_dppi_channel_alloc(&dppi, &dppi_channel_curr_time_capture); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel alloc error (I2S frame start) - Return value: %d", ret); return -ENOMEM; @@ -200,14 +201,14 @@ static int audio_sync_timer_init(void) nrf_egu_publish_set(NRF_EGU0, NRF_EGU_EVENT_TRIGGERED0, dppi_channel_curr_time_capture); - ret = nrfx_dppi_channel_enable(dppi_channel_curr_time_capture); + ret = nrfx_dppi_channel_enable(&dppi, dppi_channel_curr_time_capture); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel enable error (I2S frame start) - Return value: %d", ret); return -EIO; } /* Initialize functionality for synchronization between APP and NET core */ - ret = nrfx_dppi_channel_alloc(&dppi_channel_rtc_start); + ret = nrfx_dppi_channel_alloc(&dppi, &dppi_channel_rtc_start); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel alloc error (timer clear): %d", ret); return -ENOMEM; @@ -222,14 +223,14 @@ static int audio_sync_timer_init(void) NRF_IPC_CHANNEL_4); nrf_ipc_publish_set(NRF_IPC, AUDIO_SYNC_TIMER_NET_APP_IPC_EVT, dppi_channel_rtc_start); - ret = nrfx_dppi_channel_enable(dppi_channel_rtc_start); + ret = nrfx_dppi_channel_enable(&dppi, dppi_channel_rtc_start); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel enable error (timer clear): %d", ret); return -EIO; } /* Initialize functionality for synchronization between RTC and TIMER */ - ret = nrfx_dppi_channel_alloc(&dppi_channel_timer_sync_with_rtc); + ret = nrfx_dppi_channel_alloc(&dppi, &dppi_channel_timer_sync_with_rtc); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel alloc error (timer clear): %d", ret); return -ENOMEM; @@ -242,7 +243,7 @@ static int audio_sync_timer_init(void) nrfx_rtc_tick_enable(&audio_sync_lf_timer_instance, false); - ret = nrfx_dppi_channel_enable(dppi_channel_timer_sync_with_rtc); + ret = nrfx_dppi_channel_enable(&dppi, dppi_channel_timer_sync_with_rtc); if (ret - NRFX_ERROR_BASE_NUM) { LOG_ERR("nrfx DPPI channel enable error (timer clear): %d", ret); return -EIO; diff --git a/applications/nrf5340_audio/src/modules/lc3_streamer.c b/applications/nrf5340_audio/src/modules/lc3_streamer.c index 32784e099d06..347f633edb31 100644 --- a/applications/nrf5340_audio/src/modules/lc3_streamer.c +++ b/applications/nrf5340_audio/src/modules/lc3_streamer.c @@ -20,6 +20,10 @@ struct k_work_q lc3_streamer_work_q; #define LC3_STREAMER_BUFFER_NUM_FRAMES 2 +#if CONFIG_SD_CARD_LC3_STREAMER_MAX_NUM_STREAMS > UINT8_MAX +#error "CONFIG_SD_CARD_LC3_STREAMER_MAX_NUM_STREAMS must be less than or equal to UINT8_MAX" +#endif + enum lc3_stream_states { /* Stream ready to load file and start streaming */ STREAM_IDLE = 0, @@ -63,6 +67,9 @@ struct lc3_stream { }; static struct lc3_stream streams[CONFIG_SD_CARD_LC3_STREAMER_MAX_NUM_STREAMS]; +#if (CONFIG_SD_CARD_LC3_STREAMER_MAX_NUM_STREAMS > UINT8_MAX) +#error "CONFIG_SD_CARD_LC3_STREAMER_MAX_NUM_STREAMS is larger than UINT8_MAX" +#endif static bool initialized; @@ -163,7 +170,7 @@ static int stream_loop(struct lc3_stream *stream) ret = lc3_file_open(&stream->file, stream->filename); if (ret) { - LOG_ERR("Failed to open file %d", ret); + LOG_ERR("Failed to open file %s: %d", stream->filename, ret); return ret; } @@ -342,14 +349,14 @@ int lc3_streamer_stream_register(const char *const filename, uint8_t *const stre } /* Check that there's room for the filename and a NULL terminating char */ - if (strlen(filename) > CONFIG_FS_FATFS_MAX_LFN - 1) { + if (strlen(filename) > (ARRAY_SIZE(streams[*streamer_idx].filename) - 1)) { LOG_ERR("Filename too long"); return -EINVAL; } bool free_slot_found = false; - for (int i = 0; i < ARRAY_SIZE(streams); i++) { + for (uint8_t i = 0; i < ARRAY_SIZE(streams); i++) { if (streams[i].state == STREAM_IDLE) { LOG_DBG("Found free stream slot %d", i); *streamer_idx = i; @@ -369,8 +376,7 @@ int lc3_streamer_stream_register(const char *const filename, uint8_t *const stre return ret; } - strncpy(streams[*streamer_idx].filename, filename, - ARRAY_SIZE(streams[*streamer_idx].filename)); + strcpy(streams[*streamer_idx].filename, filename); ret = data_fifo_init(&streams[*streamer_idx].fifo); if (ret) { diff --git a/applications/nrf5340_audio/src/modules/lc3_streamer.h b/applications/nrf5340_audio/src/modules/lc3_streamer.h index 3add5e592c65..d84177281590 100644 --- a/applications/nrf5340_audio/src/modules/lc3_streamer.h +++ b/applications/nrf5340_audio/src/modules/lc3_streamer.h @@ -65,7 +65,7 @@ bool lc3_streamer_file_compatible_check(const char *const filename, * * @retval 0 Success. * @retval -EINVAL Invalid filename or streamer_idx. - * @retval -EAGAIN No stream slot is available + * @retval -EAGAIN No stream slot is available. * @retval -EFAULT Module has not been initialized. */ int lc3_streamer_stream_register(const char *const filename, uint8_t *const streamer_idx, diff --git a/applications/nrf5340_audio/src/modules/sd_card.c b/applications/nrf5340_audio/src/modules/sd_card.c index 5e973449c388..dee80d7e3eb5 100644 --- a/applications/nrf5340_audio/src/modules/sd_card.c +++ b/applications/nrf5340_audio/src/modules/sd_card.c @@ -14,13 +14,20 @@ #include #include #include +#include #include LOG_MODULE_REGISTER(sd_card, CONFIG_MODULE_SD_CARD_LOG_LEVEL); -#define SD_ROOT_PATH "/SD:/" -/* Maximum length for path support by Windows file system */ -#define PATH_MAX_LEN 260 +#define SD_ROOT_PATH "/SD:/" +/* Round down to closest 4-byte boundary */ +#define PATH_MAX_LEN ROUND_DOWN(CONFIG_FS_FATFS_MAX_LFN, 4) +#define SD_CARD_LEVELS_MAX 8 +#define SD_CARD_BUF_SIZE 700 + +static uint32_t num_files_added; +static struct k_mem_slab slab_A; +static struct k_mem_slab slab_B; static const char *sd_root_path = "/SD:"; static FATFS fat_fs; @@ -31,7 +38,165 @@ static struct fs_mount_t mnt_pt = { .fs_data = &fat_fs, }; -int sd_card_list_files(char const *const path, char *buf, size_t *buf_size) +/** + * @brief Replaces first carriage return or line feed with null terminator. + */ +static void cr_lf_remove(char *str) +{ + char *p = str; + + while (*p != '\0') { + if (*p == '\r' || *p == '\n') { + *p = '\0'; + break; + } + p++; + } +} + +/** + * @brief Recursively traverse the SD card tree. + */ +static int traverse_down(char const *const path, uint8_t curr_depth, uint16_t result_file_num_max, + uint16_t result_path_len_max, char result[][result_path_len_max], + char const *const search_pattern) +{ + int ret = 0; + + if (curr_depth > SD_CARD_LEVELS_MAX) { + LOG_WRN("At tree curr_depth %u, greater than %u", curr_depth, SD_CARD_LEVELS_MAX); + return 0; + } + + char *slab_A_ptr; + + ret = k_mem_slab_alloc(&slab_A, (void **)&slab_A_ptr, K_NO_WAIT); + if (ret) { + LOG_ERR("Failed to alloc slab A: %d", ret); + return ret; + } + + char *slab_A_ptr_origin = slab_A_ptr; + char *slab_B_ptr; + + ret = k_mem_slab_alloc(&slab_B, (void **)&slab_B_ptr, K_NO_WAIT); + if (ret) { + k_mem_slab_free(&slab_A, (void *)slab_A_ptr_origin); + LOG_ERR("Failed to alloc slab B: %d", ret); + return ret; + } + + char *slab_B_ptr_origin = slab_B_ptr; + size_t slab_A_ptr_size = SD_CARD_BUF_SIZE; + + /* Search for folders */ + ret = sd_card_list_files(path, slab_A_ptr, &slab_A_ptr_size, false); + if (ret == -ENOENT) { + /* Not able to open, hence likely not a folder */ + ret = 0; + goto cleanup; + } else if (ret) { + goto cleanup; + } + + LOG_DBG("At curr_depth %d tmp_buf is: %s", curr_depth, slab_A_ptr); + + char *token = strtok_r(slab_A_ptr, "\r\n", &slab_A_ptr); + + while (token != NULL) { + if (strstr(token, "System Volume Information") != NULL) { + /* Skipping System Volume Information */ + token = strtok_r(NULL, "\n", &slab_A_ptr); + continue; + } + + cr_lf_remove(token); + memset(slab_B_ptr, '\0', PATH_MAX_LEN); + + if (path != NULL) { + strcat(slab_B_ptr, path); + cr_lf_remove(slab_B_ptr); + strcat(slab_B_ptr, "/"); + } + + strcat(slab_B_ptr, token); + + if (strstr(token, search_pattern) != NULL) { + if (num_files_added >= result_file_num_max) { + LOG_WRN("Max file count reached %u", result_file_num_max); + ret = -ENOMEM; + goto cleanup; + } + strcpy(result[num_files_added], slab_B_ptr); + num_files_added++; + LOG_DBG("Added file num: %d at: %s", num_files_added, slab_B_ptr); + + } else { + ret = traverse_down(slab_B_ptr, curr_depth + 1, result_file_num_max, + result_path_len_max, result, search_pattern); + if (ret) { + LOG_ERR("Failed to traverse down: %d", ret); + } + } + + token = strtok_r(NULL, "\n", &slab_A_ptr); + } + +cleanup: + k_mem_slab_free(&slab_A, (void *)slab_A_ptr_origin); + k_mem_slab_free(&slab_B, (void *)slab_B_ptr_origin); + return ret; +} + +int sd_card_list_files_match(uint16_t result_file_num_max, uint16_t result_path_len_max, + char result[][result_path_len_max], char *path, + char const *const search_pattern) +{ + int ret; + + num_files_added = 0; + + if (result == NULL) { + return -EINVAL; + } + + if (result_file_num_max == 0) { + return -EINVAL; + } + + if (result_path_len_max == 0 || (result_path_len_max > PATH_MAX_LEN)) { + return -EINVAL; + } + + if (search_pattern == NULL) { + return -EINVAL; + } + + char __aligned(4) buf_A[SD_CARD_BUF_SIZE * SD_CARD_LEVELS_MAX] = {'\0'}; + char __aligned(4) buf_B[PATH_MAX_LEN * SD_CARD_LEVELS_MAX] = {'\0'}; + + ret = k_mem_slab_init(&slab_A, buf_A, SD_CARD_BUF_SIZE, SD_CARD_LEVELS_MAX); + if (ret) { + LOG_ERR("Failed to init slab: %d", ret); + return ret; + } + + ret = k_mem_slab_init(&slab_B, buf_B, PATH_MAX_LEN, SD_CARD_LEVELS_MAX); + if (ret) { + LOG_ERR("Failed to init slab: %d", ret); + return ret; + } + + ret = traverse_down(path, 0, result_file_num_max, result_path_len_max, result, + search_pattern); + if (ret) { + return ret; + } + + return num_files_added; +} + +int sd_card_list_files(char const *const path, char *buf, size_t *buf_size, bool extra_info) { int ret; struct fs_dir_t dirp; @@ -44,7 +209,6 @@ int sd_card_list_files(char const *const path, char *buf, size_t *buf_size) } fs_dir_t_init(&dirp); - if (path == NULL) { ret = fs_opendir(&dirp, sd_root_path); if (ret) { @@ -52,16 +216,21 @@ int sd_card_list_files(char const *const path, char *buf, size_t *buf_size) return ret; } } else { - if (strlen(path) > CONFIG_FS_FATFS_MAX_LFN) { + if (strlen(path) > PATH_MAX_LEN) { LOG_ERR("Path is too long"); return -FR_INVALID_NAME; } strcat(abs_path_name, path); + if (strchr(abs_path_name, '.')) { + /* Path contains a dot. Regarded as not a folder*/ + return -ENOENT; + } + ret = fs_opendir(&dirp, abs_path_name); if (ret) { - LOG_ERR("Open assigned path failed"); + LOG_ERR("Open assigned path failed %d. %s", ret, abs_path_name); return ret; } } @@ -78,9 +247,17 @@ int sd_card_list_files(char const *const path, char *buf, size_t *buf_size) if (buf != NULL) { size_t remaining_buf_size = *buf_size - used_buf_size; - ssize_t len = snprintk( - &buf[used_buf_size], remaining_buf_size, "[%s]\t%s\n", - entry.type == FS_DIR_ENTRY_DIR ? "DIR " : "FILE", entry.name); + ssize_t len; + + if (extra_info) { + len = snprintk(&buf[used_buf_size], remaining_buf_size, + "[%s]\t%s\r\n", + entry.type == FS_DIR_ENTRY_DIR ? "DIR " : "FILE", + entry.name); + } else { + len = snprintk(&buf[used_buf_size], remaining_buf_size, "%s\r\n", + entry.name); + } if (len >= remaining_buf_size) { LOG_ERR("Failed to append to buffer, error: %d", len); @@ -113,7 +290,7 @@ int sd_card_open_write_close(char const *const filename, char const *const data, return -ENODEV; } - if (strlen(filename) > CONFIG_FS_FATFS_MAX_LFN) { + if (strlen(filename) > PATH_MAX_LEN) { LOG_ERR("Filename is too long"); return -ENAMETOOLONG; } @@ -161,7 +338,7 @@ int sd_card_open_read_close(char const *const filename, char *const buf, size_t return -ENODEV; } - if (strlen(filename) > CONFIG_FS_FATFS_MAX_LFN) { + if (strlen(filename) > PATH_MAX_LEN) { LOG_ERR("Filename is too long"); return -FR_INVALID_NAME; } @@ -199,7 +376,7 @@ int sd_card_open(char const *const filename, struct fs_file_t *f_seg_read_entry) { int ret; char abs_path_name[PATH_MAX_LEN + 1] = SD_ROOT_PATH; - size_t avilable_path_space = PATH_MAX_LEN - strlen(SD_ROOT_PATH); + size_t available_path_space = PATH_MAX_LEN - strlen(SD_ROOT_PATH); if (!sd_init_success) { return -ENODEV; @@ -215,7 +392,7 @@ int sd_card_open(char const *const filename, struct fs_file_t *f_seg_read_entry) return -EINVAL; } - strncat(abs_path_name, filename, avilable_path_space); + strncat(abs_path_name, filename, available_path_space); LOG_INF("abs path name:\t%s", abs_path_name); @@ -290,7 +467,7 @@ int sd_card_init(void) sd_card_size_bytes = (uint64_t)sector_count * sector_size; - LOG_INF("SD card volume size: %d MB", (uint32_t)(sd_card_size_bytes >> 20)); + LOG_INF("SD card volume size: %lld B", sd_card_size_bytes); mnt_pt.mnt_point = sd_root_path; diff --git a/applications/nrf5340_audio/src/modules/sd_card.h b/applications/nrf5340_audio/src/modules/sd_card.h index a51bd37fcee2..989f122352de 100644 --- a/applications/nrf5340_audio/src/modules/sd_card.h +++ b/applications/nrf5340_audio/src/modules/sd_card.h @@ -10,16 +10,40 @@ #include #include +/** + * @brief Finds all files on SD card that match the given pattern. + * + * @note The function uses a recursive approach with internal buffers. Memory intensive. + * + * @param[in] result_file_num_max Maximum number of files to be found. + * @param[in] result_file_len_max Maximum length of each file name including total path length + * @param[out] result Pointer to the result array of dimension result_file_num_max + * * result_file_len_max. + * @param[in] path NULL, search from root, otherwise search from the given path. + * Note not to add an ending "/" + * @param[in] pattern Null terminated pattern to find, e.g. *.lc3 or *.wav + * @retval Number of files found. + * @retval -EINVAL invalid parameters. + * @retval -ENOMEM out of memory. + * @retval -ENODEV SD init failed. SD likely not inserted. + * @retval -EPERM SD card operation is ongoing somewhere else. + * @retval -Other, error from underlying drivers. + */ +int sd_card_list_files_match(uint16_t result_file_num_max, uint16_t result_file_len_max, + char result[][result_file_len_max], char *path, + char const *const pattern); + /** * @brief Print out the contents under SD card root path and write the content to buffer. * * @param[in] path Path of the folder which is going to be listed. - * If assigned path is null, then listing the contents under + * If assigned path is NULL, then listing the contents under * root. If assigned path doesn't exist, an error will be * returned. * @param[out] buf Buffer where data is written. If set to NULL, it will be * ignored. * @param[in, out] buf_size Buffer size. + * @param[in] extra_info Will append DIR/FILE info to string. * * @retval 0 on success. * @retval -EPERM SD card operation is ongoing somewhere else. @@ -28,7 +52,7 @@ * @retval -FR_INVALID_NAME Path is too long. * @retval Otherwise, error from underlying drivers. */ -int sd_card_list_files(char const *const path, char *buf, size_t *buf_size); +int sd_card_list_files(char const *const path, char *buf, size_t *buf_size, bool extra_info); /** * @brief Write data from buffer into the file. diff --git a/applications/nrf5340_audio/src/modules/sd_card_playback.c b/applications/nrf5340_audio/src/modules/sd_card_playback.c index f3725c218699..406c7cb7347e 100644 --- a/applications/nrf5340_audio/src/modules/sd_card_playback.c +++ b/applications/nrf5340_audio/src/modules/sd_card_playback.c @@ -564,7 +564,7 @@ static int cmd_list_files(const struct shell *shell, size_t argc, char **argv) char buf[LIST_FILES_BUF_SIZE]; size_t buf_size = LIST_FILES_BUF_SIZE; - ret = sd_card_list_files(playback_file_path, buf, &buf_size); + ret = sd_card_list_files(playback_file_path, buf, &buf_size, true); if (ret) { shell_error(shell, "List files err: %d", ret); return ret; diff --git a/applications/nrf5340_audio/tools/buildprog/buildprog.py b/applications/nrf5340_audio/tools/buildprog/buildprog.py index 401a394b3eb4..5b954aff1a23 100644 --- a/applications/nrf5340_audio/tools/buildprog/buildprog.py +++ b/applications/nrf5340_audio/tools/buildprog/buildprog.py @@ -84,68 +84,56 @@ def __print_dev_conf(device_list): print(table) -def __build_cmd_get(core: Core, device: AudioDevice, build: BuildType, - pristine, child_image, options): - if core == Core.app: - build_cmd = (f"west build {TARGET_CORE_APP_FOLDER} " - f"-b {TARGET_BOARD_NRF5340_AUDIO_DK_APP_NAME} " - f"--sysbuild") - if device == AudioDevice.headset: - device_flag = "-DCONFIG_AUDIO_DEV=1" - dest_folder = TARGET_DEV_HEADSET_FOLDER - elif device == AudioDevice.gateway: - device_flag = "-DCONFIG_AUDIO_DEV=2" - dest_folder = TARGET_DEV_GATEWAY_FOLDER - else: - raise Exception("Invalid device!") - - if build == BuildType.debug: - release_flag = "" - dest_folder /= TARGET_DEBUG_FOLDER - elif build == BuildType.release: - release_flag = " -DFILE_SUFFIX=release" - dest_folder /= TARGET_RELEASE_FOLDER - else: - raise Exception("Invalid build type!") - - if not child_image: - device_flag += " -DCONFIG_NCS_INCLUDE_RPMSG_CHILD_IMAGE=n" - - if options.nrf21540: - device_flag += " -Dnrf5340_audio_SHIELD=nrf21540ek_fwd" - device_flag += " -Dipc_radio_SHIELD=nrf21540ek" - - if options.custom_bt_name is not None and options.user_bt_name: - raise Exception( - "User BT name option is invalid when custom BT name is set") - - if options.custom_bt_name is not None: - custom_bt_name = "_".join(options.custom_bt_name)[ - :MAX_USER_NAME_LEN].upper() - device_flag += " -DCONFIG_BT_DEVICE_NAME=\\\"" + custom_bt_name + "\\\"" - - if options.user_bt_name: - user_specific_bt_name = ( - "AUDIO_DEV_" + getpass.getuser())[:MAX_USER_NAME_LEN].upper() - device_flag += " -DCONFIG_BT_DEVICE_NAME=\\\"" + user_specific_bt_name + "\\\"" - - if os.name == 'nt': - release_flag = release_flag.replace('\\', '/') - - if pristine: - build_cmd += " -p" - - elif core == Core.net: - if build == BuildType.debug: - dest_folder /= TARGET_DEBUG_FOLDER - elif build == BuildType.release: - dest_folder /= TARGET_RELEASE_FOLDER - else: - raise Exception("Invalid build type!") - - build_cmd = "" - device_flag = "" +def __build_cmd_get(cores: Core, device: AudioDevice, build: BuildType, + pristine, options): + + build_cmd = (f"west build {TARGET_CORE_APP_FOLDER} " + f"-b {TARGET_BOARD_NRF5340_AUDIO_DK_APP_NAME} " + f"--sysbuild") + if Core.app in cores and Core.net in cores: + # No changes to build command, build both cores + pass + elif Core.app in cores: + build_cmd += " --domain nrf5340_audio" + elif Core.net in cores: + build_cmd += " --domain ipc_radio" + else: + raise Exception("Invalid core!") + + if device == AudioDevice.headset: + device_flag = "-DCONFIG_AUDIO_DEV=1" + dest_folder = TARGET_DEV_HEADSET_FOLDER + elif device == AudioDevice.gateway: + device_flag = "-DCONFIG_AUDIO_DEV=2" + dest_folder = TARGET_DEV_GATEWAY_FOLDER + else: + raise Exception("Invalid device!") + if build == BuildType.debug: release_flag = "" + dest_folder /= TARGET_DEBUG_FOLDER + elif build == BuildType.release: + release_flag = " -DFILE_SUFFIX=release" + dest_folder /= TARGET_RELEASE_FOLDER + else: + raise Exception("Invalid build type!") + if options.nrf21540: + device_flag += " -Dnrf5340_audio_SHIELD=nrf21540ek" + device_flag += " -Dipc_radio_SHIELD=nrf21540ek" + if options.custom_bt_name is not None and options.user_bt_name: + raise Exception( + "User BT name option is invalid when custom BT name is set") + if options.custom_bt_name is not None: + custom_bt_name = "_".join(options.custom_bt_name)[ + :MAX_USER_NAME_LEN].upper() + device_flag += " -DCONFIG_BT_DEVICE_NAME=\\\"" + custom_bt_name + "\\\"" + if options.user_bt_name: + user_specific_bt_name = ( + "AUDIO_DEV_" + getpass.getuser())[:MAX_USER_NAME_LEN].upper() + device_flag += " -DCONFIG_BT_DEVICE_NAME=\\\"" + user_specific_bt_name + "\\\"" + if os.name == 'nt': + release_flag = release_flag.replace('\\', '/') + if pristine: + build_cmd += " -p" return build_cmd, dest_folder, device_flag, release_flag @@ -156,7 +144,6 @@ def __build_module(build_config, options): build_config.device, build_config.build, build_config.pristine, - build_config.child_image, options, ) west_str = f"{build_cmd} -d {dest_folder} " @@ -190,11 +177,11 @@ def __find_snr(): return list(map(int, snrs)) -def __populate_hex_paths(dev, options, child_image): +def __populate_hex_paths(dev, options): """Poplulate hex paths where relevant""" _, temp_dest_folder, _, _ = __build_cmd_get( - Core.app, dev.nrf5340_audio_dk_dev, options.build, options.pristine, child_image, options + Core.app, dev.nrf5340_audio_dk_dev, options.build, options.pristine, options ) dev.hex_path_app = temp_dest_folder / "merged.hex" @@ -364,38 +351,29 @@ def __main(): # Reboot step finished # Build step start - child_image = True if options.build is not None: print("Invoking build step") build_configs = [] - if Core.app in cores: - if not Core.net in cores: - child_image = False - - if AudioDevice.headset in devices: - build_configs.append( - BuildConf( - core=Core.app, - device=AudioDevice.headset, - pristine=options.pristine, - build=options.build, - child_image=child_image, - ) + + if AudioDevice.headset in devices: + build_configs.append( + BuildConf( + core=cores, + device=AudioDevice.headset, + pristine=options.pristine, + build=options.build, ) - if AudioDevice.gateway in devices: - build_configs.append( - BuildConf( - core=Core.app, - device=AudioDevice.gateway, - pristine=options.pristine, - build=options.build, - child_image=child_image, - ) + ) + if AudioDevice.gateway in devices: + build_configs.append( + BuildConf( + core=cores, + device=AudioDevice.gateway, + pristine=options.pristine, + build=options.build, ) - - if Core.net in cores: - print("Net core uses precompiled hex or child image") + ) for build_cfg in build_configs: __build_module(build_cfg, options) @@ -406,7 +384,7 @@ def __main(): if options.program: for dev in device_list: if dev.snr_connected: - __populate_hex_paths(dev, options, child_image) + __populate_hex_paths(dev, options) program_threads_run(device_list, sequential=options.sequential_prog) # Program step finished diff --git a/applications/nrf5340_audio/tools/buildprog/nrf5340_audio_dk_devices.py b/applications/nrf5340_audio/tools/buildprog/nrf5340_audio_dk_devices.py index 3da7ec4c0248..d550292c3ab7 100644 --- a/applications/nrf5340_audio/tools/buildprog/nrf5340_audio_dk_devices.py +++ b/applications/nrf5340_audio/tools/buildprog/nrf5340_audio_dk_devices.py @@ -100,4 +100,3 @@ class BuildConf: device: AudioDevice build: BuildType pristine: bool - child_image: bool diff --git a/applications/nrf_desktop/CMakeLists.txt b/applications/nrf_desktop/CMakeLists.txt index 24a87d4fe9bb..5c8f5f931031 100644 --- a/applications/nrf_desktop/CMakeLists.txt +++ b/applications/nrf_desktop/CMakeLists.txt @@ -8,6 +8,9 @@ cmake_minimum_required(VERSION 3.20.0) ################################################################################ +# The application uses the configuration/ scheme for configuration files. +set(APPLICATION_CONFIG_DIR "${CMAKE_CURRENT_LIST_DIR}/configuration/\${NORMALIZED_BOARD_TARGET}") + find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project("nRF52 Desktop" VERSION 0.1) @@ -40,19 +43,7 @@ add_subdirectory(src/hw_interface) add_subdirectory(src/modules) add_subdirectory(src/util) -if(NOT SYSBUILD AND NOT CONFIG_NCS_IS_VARIANT_IMAGE) - if(CONFIG_BOOTLOADER_MCUBOOT) - assert_exists(mcuboot_CONF_FILE) - endif() - if(CONFIG_SECURE_BOOT) - assert_exists(b0_CONF_FILE) - endif() - if(CONFIG_BT_HCI_IPC) - assert_exists(hci_ipc_CONF_FILE) - endif() -endif() - -if (CONFIG_IMG_MANAGER) +if(CONFIG_IMG_MANAGER) zephyr_library_link_libraries(MCUBOOT_BOOTUTIL) endif() diff --git a/applications/nrf_desktop/Kconfig.ble b/applications/nrf_desktop/Kconfig.ble index 70d036c0b3a2..91db0c6b10ad 100644 --- a/applications/nrf_desktop/Kconfig.ble +++ b/applications/nrf_desktop/Kconfig.ble @@ -15,6 +15,7 @@ config DESKTOP_BT select BT_SETTINGS select BT_SIGNING select BT_SMP + imply BT_CONN_TX_NOTIFY_WQ if SOC_FLASH_NRF_RADIO_SYNC_MPSL help Enable support for Bluetooth connectivity in the nRF Desktop application. Specific Bluetooth configurations and application @@ -22,6 +23,10 @@ config DESKTOP_BT that, the defaults of Bluetooth-related Kconfigs are aligned with the nRF Desktop use case. + nRF Desktop conditionally implies using a separate workqueue for + connection TX notify processing. This is done to work around the MPSL + flash synchronization timeout known issue (NCSDK-29354). + if DESKTOP_BT config DESKTOP_BT_PERIPHERAL diff --git a/applications/nrf_desktop/VERSION b/applications/nrf_desktop/VERSION index b5c2c35ecc1a..9361645541a7 100644 --- a/applications/nrf_desktop/VERSION +++ b/applications/nrf_desktop/VERSION @@ -1,5 +1,5 @@ VERSION_MAJOR = 2 -VERSION_MINOR = 7 +VERSION_MINOR = 8 PATCHLEVEL = 99 VERSION_TWEAK = 0 EXTRAVERSION = diff --git a/applications/nrf_desktop/application_kconfig.rst b/applications/nrf_desktop/application_kconfig.rst index b0babf5aa63a..6055fd2b4ffe 100644 --- a/applications/nrf_desktop/application_kconfig.rst +++ b/applications/nrf_desktop/application_kconfig.rst @@ -98,8 +98,8 @@ See the :file:`Kconfig.defaults` file for details related to the default common .. _nrf_desktop_bluetooth_configuration: -Bluetooth configuration -*********************** +Bluetooth® configuration +************************ The nRF Desktop application introduces application-specific configuration options related to Bluetooth connectivity configuration. These options are defined in :file:`Kconfig.ble` file. diff --git a/applications/nrf_desktop/bluetooth.rst b/applications/nrf_desktop/bluetooth.rst index 6568d5df34c1..2e51eeb4424c 100644 --- a/applications/nrf_desktop/bluetooth.rst +++ b/applications/nrf_desktop/bluetooth.rst @@ -7,14 +7,14 @@ nRF Desktop: Bluetooth :local: :depth: 2 -The nRF Desktop devices use :ref:`Zephyr's Bluetooth API ` to handle the Bluetooth LE connections. +The nRF Desktop devices use :ref:`Zephyr's Bluetooth API ` to handle the Bluetooth® LE connections. This API is used only by the application modules that handle such connections. The information about peer and connection state is propagated to other application modules using :ref:`app_event_manager` events. The :ref:`CONFIG_DESKTOP_BT ` Kconfig option enables support for Bluetooth connectivity in the nRF Desktop. Specific Bluetooth configurations and application modules are selected or implied according to the HID device role. -Apart from that, the defaults of Bluetooth-related Kconfigs are aligned with the nRF Desktop use case. +Apart from that, the defaults of Bluetooth-related Kconfig options are aligned with the nRF Desktop use case. The nRF Desktop devices come in the following roles: diff --git a/applications/nrf_desktop/board_configuration.rst b/applications/nrf_desktop/board_configuration.rst index d14018837e8c..c8faf87c6c5f 100644 --- a/applications/nrf_desktop/board_configuration.rst +++ b/applications/nrf_desktop/board_configuration.rst @@ -40,7 +40,7 @@ nRF52840 Gaming Mouse (``nrf52840gmouse``) * The reference design is defined in :file:`nrf/boards/nordic/nrf52840gmouse` for the project-specific hardware. * To achieve gaming-grade performance: - * The application is configured to act as a gaming mouse, with both Bluetooth LE and USB transports enabled. + * The application is configured to act as a gaming mouse, with both Bluetooth® LE and USB transports enabled. * Bluetooth is configured to use Nordic's SoftDevice link layer. * The configuration with the B0 bootloader is set as default. @@ -103,8 +103,48 @@ Sample dongle (``nrf5340dk/nrf5340``) Input data comes from Bluetooth and is retransmitted to USB. * The configuration with the B0 bootloader is set as default. +Sample mouse or keyboard (``nrf54l15dk/nrf54l05/cpuapp``) + * The configuration emulates the nRF54L05 SoC on the nRF54L15 Development Kit. + * The build types allow to build the application as a mouse or a keyboard. + * Inputs are simulated based on the hardware button presses. + * On the nRF54L05 SoC, you can only use the **GPIO1** port for PWM hardware peripheral output. + Because of that, on the DK PCA10156 revision v0.8.1, **LED 0** and **LED 2** cannot be used for PWM output. + You can still use these LEDs with the PWM LED driver, but you must set the LED color to ``LED_COLOR(255, 255, 255)`` or ``LED_COLOR(0, 0, 0)``. + This ensures the PWM peripheral is not used for the mentioned LEDs. + * Only Bluetooth LE transport is enabled. + Bluetooth LE is configured to use Nordic Semiconductor's SoftDevice Link Layer and Low Latency Packet Mode (LLPM). + * The preconfigured ``debug`` configuration does not use the bootloader due to memory size limits. + In the ``debug`` configuration, logs are provided through the UART. + For detailed information on working with the nRF54L15 DK, see the :ref:`ug_nrf54l15_gs` documentation. + * The preconfigured ``release`` configurations use the MCUboot bootloader built in the direct-xip mode (``MCUBOOT+XIP``) and support firmware updates using the :ref:`nrf_desktop_dfu`. + All of the ``release`` configurations enable hardware cryptography for the MCUboot bootloader. + The application image is verified using a pure ED25519 signature. + The public key that MCUboot uses for validating the application image is securely stored in the hardware Key Management Unit (KMU). + For more details on nRF54L Series cryptography, see :ref:`ug_nrf54l_cryptography`. + * The board supports the ``release`` :ref:`nrf_desktop_bluetooth_guide_fast_pair` configuration that acts as a mouse (``release_fast_pair`` file suffix). + +Sample mouse or keyboard (``nrf54l15dk/nrf54l10/cpuapp``) + * The configuration emulates the nRF54L10 SoC on the nRF54L15 Development Kit. + * The build types allow to build the application as a mouse or a keyboard. + * Inputs are simulated based on the hardware button presses. + * On the nRF54L10 SoC, you can only use the **GPIO1** port for PWM hardware peripheral output. + Because of that, on the DK PCA10156 revision v0.8.1, **LED 0** and **LED 2** cannot be used for PWM output. + You can still use these LEDs with the PWM LED driver, but you must set the LED color to ``LED_COLOR(255, 255, 255)`` or ``LED_COLOR(0, 0, 0)``. + This ensures the PWM peripheral is not used for the mentioned LEDs. + * Only Bluetooth LE transport is enabled. + Bluetooth LE is configured to use Nordic Semiconductor's SoftDevice Link Layer and Low Latency Packet Mode (LLPM). + * In ``debug`` configurations, logs are provided through the UART. + For detailed information on working with the nRF54L15 DK, see the :ref:`ug_nrf54l15_gs` documentation. + * The configurations use the MCUboot bootloader built in the direct-xip mode (``MCUBOOT+XIP``) and support firmware updates using the :ref:`nrf_desktop_dfu`. + All of the configurations enable hardware cryptography for the MCUboot bootloader. + The application image is verified using a pure ED25519 signature. + The public key that MCUboot uses for validating the application image is securely stored in the hardware Key Management Unit (KMU). + For more details on nRF54L Series cryptography, see :ref:`ug_nrf54l_cryptography`. + * The board supports the ``debug`` :ref:`nrf_desktop_bluetooth_guide_fast_pair` configuration that acts as a mouse (``fast_pair`` file suffix). + The configuration uses the MCUboot bootloader built in the direct-xip mode (``MCUBOOT+XIP``), and supports firmware updates using the :ref:`nrf_desktop_dfu` and :ref:`nrf_desktop_dfu_mcumgr`. + Sample mouse or keyboard (``nrf54l15dk/nrf54l15/cpuapp``) - * The configuration uses the nRF54L15 Development Kit (DK). + * The configuration uses the nRF54L15 Development Kit. * The build types allow to build the application as a mouse or a keyboard. * Inputs are simulated based on the hardware button presses. * On the nRF54L15 SoC, you can only use the **GPIO1** port for PWM hardware peripheral output. @@ -113,9 +153,13 @@ Sample mouse or keyboard (``nrf54l15dk/nrf54l15/cpuapp``) This ensures the PWM peripheral is not used for the mentioned LEDs. * Only Bluetooth LE transport is enabled. Bluetooth LE is configured to use Nordic Semiconductor's SoftDevice Link Layer and Low Latency Packet Mode (LLPM). - * In debug configurations, logs are provided through the UART. + * In ``debug`` configurations, logs are provided through the UART. For detailed information on working with the nRF54L15 DK, see the :ref:`ug_nrf54l15_gs` documentation. * The configurations use the MCUboot bootloader built in the direct-xip mode (``MCUBOOT+XIP``) and support firmware updates using the :ref:`nrf_desktop_dfu`. + All of the configurations enable hardware cryptography for the MCUboot bootloader. + The application image is verified using a pure ED25519 signature. + The public key that MCUboot uses for validating the application image is securely stored in the hardware Key Management Unit (KMU). + For more details on nRF54L Series cryptography, see :ref:`ug_nrf54l_cryptography`. * The board supports the ``debug`` :ref:`nrf_desktop_bluetooth_guide_fast_pair` configuration that acts as a mouse (``fast_pair`` file suffix). The configuration uses the MCUboot bootloader built in the direct-xip mode (``MCUBOOT+XIP``), and supports firmware updates using the :ref:`nrf_desktop_dfu` and :ref:`nrf_desktop_dfu_mcumgr`. @@ -126,6 +170,6 @@ Sample mouse (``nrf54h20dk/nrf54h20/cpuapp``) * Bluetooth LE and USB High-Speed transports are enabled. Bluetooth LE is configured to use Nordic Semiconductor's SoftDevice Link Layer and Low Latency Packet Mode (LLPM). USB High-Speed is configured to use the USB next stack (:kconfig:option:`CONFIG_USB_DEVICE_STACK_NEXT`). - * In debug configurations, logs are provided through the UART. + * In ``debug`` configurations, logs are provided through the UART. For detailed information on working with the nRF54H20 DK, see the :ref:`ug_nrf54h20_gs` documentation. * The configurations use the Software Updates for Internet of Things (SUIT) and supports firmware updates using the :ref:`nrf_desktop_dfu` and :ref:`nrf_desktop_smp`. diff --git a/applications/nrf_desktop/bootloader_dfu.rst b/applications/nrf_desktop/bootloader_dfu.rst index f15f79b1e432..02d9227044c5 100644 --- a/applications/nrf_desktop/bootloader_dfu.rst +++ b/applications/nrf_desktop/bootloader_dfu.rst @@ -35,6 +35,7 @@ The nRF Desktop application can use one of the following bootloaders: * nRF52 Series * nRF53 Series + * nRF54L Series The MCUboot bootloader can be used in the following scenarios: @@ -110,16 +111,14 @@ By default, this change propagates to the :kconfig:option:`CONFIG_MCUBOOT_IMGTOO If the nRF Desktop application is configured with the MCUboot in the direct-xip mode, the build system builds two application images: one for the primary slot and the other for the secondary slot, named ``mcuboot_secondary_app``. You need to update this configuration only in the main application image, as the ``mcuboot_secondary_app`` image mirrors it. -.. note:: - When the MCUboot bootloader is in the direct-xip mode, the update image must have a higher version number than the application currently running on the device. - This ensures that the update image will be booted after a successful DFU image transfer. - Otherwise, the update image can be rejected by the bootloader. +MCUboot bootloader mode +----------------------- The MCUboot bootloader configuration depends on the selected way of performing image upgrade. For detailed information about the available MCUboot bootloader modes, see the following sections. Swap mode ---------- +~~~~~~~~~ In the swap mode, the MCUboot bootloader moves the image to the primary slot before booting it. The swap mode is the image upgrade mode used by default for the :ref:`background DFU `. @@ -133,7 +132,7 @@ These options allow the :ref:`nrf_desktop_dfu`, :ref:`nrf_desktop_ble_smp`, and For details on using external non-volatile memory for the secondary image slot, see the :ref:`nrf_desktop_pm_external_flash` section. Direct-xip mode ---------------- +~~~~~~~~~~~~~~~ The direct-xip mode is used for the :ref:`background DFU `. In this mode, the MCUboot bootloader boots an image directly from a given slot, so the swap operation is not needed. @@ -153,8 +152,13 @@ To apply the same option for the :ref:`nrf_desktop_ble_smp` or :ref:`nrf_desktop It is recommended to also enable the :kconfig:option:`CONFIG_MCUMGR_GRP_IMG_REJECT_DIRECT_XIP_MISMATCHED_SLOT` Kconfig option in the application configuration to make sure that MCUmgr rejects application image updates with invalid start address. This prevents uploading an update image build for improper slot through the MCUmgr's Simple Management Protocol (SMP). +.. note:: + When the MCUboot bootloader is in the direct-xip mode, the update image must have a higher version number than the application currently running on the device. + This ensures that the update image will be booted after a successful DFU image transfer. + Otherwise, the update image can be rejected by the bootloader. + Serial recovery mode --------------------- +~~~~~~~~~~~~~~~~~~~~ In the :ref:`USB serial recovery ` mode, the MCUboot bootloader uses a built-in foreground DFU transport over serial interface through USB. The application is not involved in the foreground DFU transport, therefore it can be directly overwritten by the bootloader. @@ -185,6 +189,20 @@ For an example of a bootloader Kconfig configuration file defined by the applica Both mentioned firmware upgrade methods are not used simultaneously by any of the configurations. For example, the ``nrf52840dk/nrf52840`` board in ``mcuboot_smp`` file suffix uses only the background DFU and does not enable the serial recovery feature. +MCUboot bootloader on nRF54L +---------------------------- + +The nRF54L SoC Series enhances security and reduces boot times by using hardware cryptography in the MCUboot immutable bootloader. +The |NCS| allows using hardware cryptography for ED25519 signature (``SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519``) on the nRF54L SoC Series. + +You can enhance security further by enabling the following sysbuild Kconfig options: + +* ``SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE`` - This option enables using a pure signature of the image, verifying signature directly on image, rather than on its hash. + However, you cannot use this option if the secondary image slot uses external memory. +* ``SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU`` - This option enables using Key Management Unit (KMU) to store keys for signature verification instead of compiling key data into the MCUboot bootloader image. + Using KMU requires provisioning the public key manually. + See the :ref:`ug_nrf54l_developing_provision_kmu` documentation for details. + .. _nrf_desktop_suit: Software Update for Internet of Things (SUIT) diff --git a/applications/nrf_desktop/configuration/common/hid_report_desc.h b/applications/nrf_desktop/configuration/common/hid_report_desc.h index 455f3fab811b..c891f8759103 100644 --- a/applications/nrf_desktop/configuration/common/hid_report_desc.h +++ b/applications/nrf_desktop/configuration/common/hid_report_desc.h @@ -84,35 +84,38 @@ static const uint8_t output_reports[] = { REPORT_ID_KEYBOARD_LEDS, }; -/* Internal definitions used to calculate size of the biggest supported HID input report. */ -#define _REPORT_BUFFER_SIZE_MOUSE \ - (IS_ENABLED(CONFIG_DESKTOP_HID_REPORT_MOUSE_SUPPORT) ? (REPORT_SIZE_MOUSE) : (0)) -#define _REPORT_BUFFER_SIZE_KEYBOARD_KEYS \ - (IS_ENABLED(CONFIG_DESKTOP_HID_REPORT_KEYBOARD_SUPPORT) ? (REPORT_SIZE_KEYBOARD_KEYS) : (0)) -#define _REPORT_BUFFER_SIZE_SYSTEM_CTRL \ - (IS_ENABLED(CONFIG_DESKTOP_HID_REPORT_SYSTEM_CTRL_SUPPORT) ? \ - (REPORT_SIZE_SYSTEM_CTRL) : (0)) -#define _REPORT_BUFFER_SIZE_CONSUMER_CTRL \ - (IS_ENABLED(CONFIG_DESKTOP_HID_REPORT_CONSUMER_CTRL_SUPPORT) ? \ - (REPORT_SIZE_CONSUMER_CTRL) : (0)) -#define _REPORT_BUFFER_SIZE_BOOT_MOUSE \ - (IS_ENABLED(CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE) ? (REPORT_SIZE_MOUSE_BOOT) : (0)) -#define _REPORT_BUFFER_SIZE_BOOT_KEYBOARD \ - (IS_ENABLED(CONFIG_DESKTOP_HID_BOOT_INTERFACE_KEYBOARD) ? (REPORT_SIZE_KEYBOARD_BOOT) : (0)) -#define _MAX6(a, b, c, d, e, f) MAX(MAX(a, b), MAX(MAX(c, d), MAX(e, f))) +union _input_report_size_max { +#if CONFIG_DESKTOP_HID_REPORT_MOUSE_SUPPORT || CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE + uint8_t _mouse_report[REPORT_SIZE_MOUSE]; +#endif +#if CONFIG_DESKTOP_HID_REPORT_KEYBOARD_SUPPORT || CONFIG_DESKTOP_HID_BOOT_INTERFACE_KEYBOARD + uint8_t _keyboard_report[REPORT_SIZE_KEYBOARD_KEYS]; +#endif +#if CONFIG_DESKTOP_HID_REPORT_SYSTEM_CTRL_SUPPORT + uint8_t _sysctrl_report[REPORT_SIZE_SYSTEM_CTRL]; +#endif +#if CONFIG_DESKTOP_HID_REPORT_CONSUMER_CTRL_SUPPORT + uint8_t _consumerctrl_report[REPORT_SIZE_CONSUMER_CTRL]; +#endif +#if CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE + uint8_t _boot_mouse_report[REPORT_SIZE_MOUSE_BOOT]; +#endif +#if CONFIG_DESKTOP_HID_BOOT_INTERFACE_KEYBOARD + uint8_t _boot_keyboard_report[REPORT_SIZE_KEYBOARD_BOOT]; +#endif +}; -/* Size of the biggest supported HID input report that is part of input reports map. */ -#define REPORT_BUFFER_SIZE_INPUT_REPORT \ - _MAX6(_REPORT_BUFFER_SIZE_MOUSE, _REPORT_BUFFER_SIZE_KEYBOARD_KEYS, \ - _REPORT_BUFFER_SIZE_SYSTEM_CTRL, _REPORT_BUFFER_SIZE_CONSUMER_CTRL, \ - _REPORT_BUFFER_SIZE_BOOT_MOUSE, _REPORT_BUFFER_SIZE_BOOT_KEYBOARD) +union _output_report_size_max { +#if CONFIG_DESKTOP_HID_REPORT_KEYBOARD_SUPPORT + uint8_t _keyboard_report[REPORT_SIZE_KEYBOARD_LEDS]; +#endif +}; -/* Internal definitions used to calculate size of the biggest supported HID output report. */ -#define _REPORT_BUFFER_SIZE_KEYBOARD_LEDS \ - (IS_ENABLED(CONFIG_DESKTOP_HID_REPORT_KEYBOARD_SUPPORT) ? (REPORT_SIZE_KEYBOARD_LEDS) : (0)) +/* Size of the biggest supported HID input report that is part of input reports map. */ +#define REPORT_BUFFER_SIZE_INPUT_REPORT sizeof(union _input_report_size_max) /* Size of the biggest supported HID output report that is part of output reports map. */ -#define REPORT_BUFFER_SIZE_OUTPUT_REPORT _REPORT_BUFFER_SIZE_KEYBOARD_LEDS +#define REPORT_BUFFER_SIZE_OUTPUT_REPORT sizeof(union _output_report_size_max) extern const uint8_t hid_report_desc[]; extern const size_t hid_report_desc_size; diff --git a/applications/nrf_desktop/configuration/nrf52810dmouse_nrf52810/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52810dmouse_nrf52810/click_detector_def.h index ffee923c272a..3398fe99017e 100644 --- a/applications/nrf_desktop/configuration/nrf52810dmouse_nrf52810/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52810dmouse_nrf52810/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = false, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/click_detector_def.h index 2126eaf0e314..fcfe88af1f7d 100644 --- a/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/images/mcuboot/prj_release.conf b/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/images/mcuboot/prj_release.conf index 3d4d6013afa4..a85aeb41b73b 100644 --- a/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/images/mcuboot/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf52820dongle_nrf52820/images/mcuboot/prj_release.conf @@ -6,9 +6,6 @@ CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n - CONFIG_SYSTEM_CLOCK_NO_WAIT=y CONFIG_MAIN_STACK_SIZE=4096 @@ -17,6 +14,7 @@ CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_BOOT_ERASE_PROGRESSIVELY=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y @@ -54,6 +52,7 @@ CONFIG_BOOT_BANNER=n CONFIG_NCS_BOOT_BANNER=n CONFIG_ERRNO=n CONFIG_ARM_MPU=n +CONFIG_HW_STACK_PROTECTION=n CONFIG_BOOT_SERIAL_IMG_GRP_HASH=n # Use minimal C library instead of the Picolib diff --git a/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/click_detector_def.h index 05720d394ef9..c8670f1a2f4e 100644 --- a/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/images/mcuboot/prj_release.conf b/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/images/mcuboot/prj_release.conf index c460d8a605c5..fdf034b51961 100644 --- a/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/images/mcuboot/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf52833dk_nrf52820/images/mcuboot/prj_release.conf @@ -6,9 +6,6 @@ CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n - CONFIG_SYSTEM_CLOCK_NO_WAIT=y CONFIG_MAIN_STACK_SIZE=4096 @@ -17,6 +14,7 @@ CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_BOOT_ERASE_PROGRESSIVELY=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y @@ -58,6 +56,7 @@ CONFIG_BOOT_BANNER=n CONFIG_NCS_BOOT_BANNER=n CONFIG_ERRNO=n CONFIG_ARM_MPU=n +CONFIG_HW_STACK_PROTECTION=n CONFIG_BOOT_SERIAL_IMG_GRP_HASH=n # Use minimal C library instead of the Picolib diff --git a/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/click_detector_def.h index 2126eaf0e314..fcfe88af1f7d 100644 --- a/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj.conf b/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj.conf index 818ac998758d..074190fbaeac 100644 --- a/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj.conf +++ b/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj.conf @@ -6,8 +6,7 @@ CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -17,6 +16,7 @@ CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_BOOT_ERASE_PROGRESSIVELY=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y diff --git a/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj_release.conf b/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj_release.conf index cba272527d85..9813da02e7fb 100644 --- a/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf52833dk_nrf52833/images/mcuboot/prj_release.conf @@ -6,8 +6,7 @@ CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -17,6 +16,7 @@ CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_BOOT_ERASE_PROGRESSIVELY=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y diff --git a/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/click_detector_def.h index 2126eaf0e314..fcfe88af1f7d 100644 --- a/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj.conf b/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj.conf index 818ac998758d..074190fbaeac 100644 --- a/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj.conf +++ b/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj.conf @@ -6,8 +6,7 @@ CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -17,6 +16,7 @@ CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_BOOT_ERASE_PROGRESSIVELY=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y diff --git a/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj_release.conf b/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj_release.conf index fcf9eff674fa..d4f00e861d22 100644 --- a/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf52833dongle_nrf52833/images/mcuboot/prj_release.conf @@ -6,8 +6,7 @@ CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -17,6 +16,7 @@ CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_BOOT_ERASE_PROGRESSIVELY=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app.overlay b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app.overlay index 472963d9248c..ef06923755da 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app.overlay @@ -1,15 +1,12 @@ -/ { - chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; - }; +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" +/ { /* Configure DTS nodes used for USB next HID support. */ hid_dev_0: hid_dev_0 { compatible = "zephyr,hid-device"; @@ -18,129 +15,4 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_1 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Conn State"; - }; - }; - - pwmleds2 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led2: led_pwm_2 { - status = "okay"; - pwms = <&pwm2 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Num Lock"; - }; - }; - - pwmleds3 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led3: led_pwm_3 { - status = "okay"; - pwms = <&pwm3 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Caps Lock"; - }; - }; -}; - -&pwm0 { - status = "okay"; - pinctrl-0 = <&pwm0_default_alt>; - pinctrl-1 = <&pwm0_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm2 { - status = "okay"; - pinctrl-0 = <&pwm2_default_alt>; - pinctrl-1 = <&pwm2_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm3 { - status = "okay"; - pinctrl-0 = <&pwm3_default_alt>; - pinctrl-1 = <&pwm3_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm_led0 { - status = "okay"; - pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; -}; - -&pinctrl { - pwm0_default_alt: pwm0_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm0_sleep_alt: pwm0_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm2_default_alt: pwm2_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm2_sleep_alt: pwm2_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm3_default_alt: pwm3_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm3_sleep_alt: pwm3_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; }; diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_common.dtsi b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_common.dtsi new file mode 100644 index 000000000000..2f1cb5df3a50 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_common.dtsi @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/ { + chosen { + /* + * In some default configurations within the nRF Connect SDK, + * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node + * is &cryptocell. This devicetree overlay ensures that default + * is overridden wherever it is set, as this application uses + * the RNG node for entropy exclusively. + */ + zephyr,entropy = &rng; + }; + + pwmleds1 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led1: led_pwm_1 { + status = "okay"; + pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; + label = "LED Conn State"; + }; + }; + + pwmleds2 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led2: led_pwm_2 { + status = "okay"; + pwms = <&pwm2 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; + label = "LED Num Lock"; + }; + }; + + pwmleds3 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led3: led_pwm_3 { + status = "okay"; + pwms = <&pwm3 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; + label = "LED Caps Lock"; + }; + }; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default_alt>; + pinctrl-1 = <&pwm0_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm1 { + status = "okay"; + pinctrl-0 = <&pwm1_default_alt>; + pinctrl-1 = <&pwm1_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm2 { + status = "okay"; + pinctrl-0 = <&pwm2_default_alt>; + pinctrl-1 = <&pwm2_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm3 { + status = "okay"; + pinctrl-0 = <&pwm3_default_alt>; + pinctrl-1 = <&pwm3_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm_led0 { + status = "okay"; + pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; + label = "LED System State"; +}; + +&pinctrl { + pwm0_default_alt: pwm0_default_alt { + group1 { + psels = ; + nordic,invert; + }; + }; + + pwm0_sleep_alt: pwm0_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm1_default_alt: pwm1_default_alt { + group1 { + psels = ; + nordic,invert; + }; + }; + + pwm1_sleep_alt: pwm1_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm2_default_alt: pwm2_default_alt { + group1 { + psels = ; + nordic,invert; + }; + }; + + pwm2_sleep_alt: pwm2_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm3_default_alt: pwm3_default_alt { + group1 { + psels = ; + nordic,invert; + }; + }; + + pwm3_sleep_alt: pwm3_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; +}; diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_dongle.overlay b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_dongle.overlay index bc0d63e8e8c1..2e14b99149b9 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_dongle.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_dongle.overlay @@ -1,15 +1,12 @@ -/ { - chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; - }; +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" +/ { /* Configure DTS nodes used for USB next HID support. */ hid_dev_0: hid_dev_0 { compatible = "zephyr,hid-device"; @@ -25,129 +22,4 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_1 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Conn State"; - }; - }; - - pwmleds2 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led2: led_pwm_2 { - status = "okay"; - pwms = <&pwm2 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Num Lock"; - }; - }; - - pwmleds3 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led3: led_pwm_3 { - status = "okay"; - pwms = <&pwm3 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Caps Lock"; - }; - }; -}; - -&pwm0 { - status = "okay"; - pinctrl-0 = <&pwm0_default_alt>; - pinctrl-1 = <&pwm0_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm2 { - status = "okay"; - pinctrl-0 = <&pwm2_default_alt>; - pinctrl-1 = <&pwm2_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm3 { - status = "okay"; - pinctrl-0 = <&pwm3_default_alt>; - pinctrl-1 = <&pwm3_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm_led0 { - status = "okay"; - pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; -}; - -&pinctrl { - pwm0_default_alt: pwm0_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm0_sleep_alt: pwm0_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm2_default_alt: pwm2_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm2_sleep_alt: pwm2_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm3_default_alt: pwm3_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm3_sleep_alt: pwm3_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; }; diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_keyboard.overlay b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_keyboard.overlay index 2c71c9afa1cd..5bf5cbb6ab44 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_keyboard.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_keyboard.overlay @@ -1,15 +1,12 @@ -/ { - chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; - }; +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" +/ { /* Configure DTS nodes used for USB next HID support. */ hid_dev_0: hid_dev_0 { compatible = "zephyr,hid-device"; @@ -18,129 +15,4 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_1 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Conn State"; - }; - }; - - pwmleds2 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led2: led_pwm_2 { - status = "okay"; - pwms = <&pwm2 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Num Lock"; - }; - }; - - pwmleds3 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led3: led_pwm_3 { - status = "okay"; - pwms = <&pwm3 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Caps Lock"; - }; - }; -}; - -&pwm0 { - status = "okay"; - pinctrl-0 = <&pwm0_default_alt>; - pinctrl-1 = <&pwm0_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm2 { - status = "okay"; - pinctrl-0 = <&pwm2_default_alt>; - pinctrl-1 = <&pwm2_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm3 { - status = "okay"; - pinctrl-0 = <&pwm3_default_alt>; - pinctrl-1 = <&pwm3_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm_led0 { - status = "okay"; - pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; -}; - -&pinctrl { - pwm0_default_alt: pwm0_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm0_sleep_alt: pwm0_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm2_default_alt: pwm2_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm2_sleep_alt: pwm2_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm3_default_alt: pwm3_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm3_sleep_alt: pwm3_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; }; diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_mcuboot_qspi.overlay b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_mcuboot_qspi.overlay index 8b22ad455860..9846c556ea74 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_mcuboot_qspi.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/app_mcuboot_qspi.overlay @@ -1,19 +1,14 @@ -/ { - chosen { - nordic,pm-ext-flash = &mx25r64; - }; -}; +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" / { chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; + nordic,pm-ext-flash = &mx25r64; }; /* Configure DTS nodes used for USB next HID support. */ @@ -24,133 +19,8 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_1 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Conn State"; - }; - }; - - pwmleds2 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led2: led_pwm_2 { - status = "okay"; - pwms = <&pwm2 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Num Lock"; - }; - }; - - pwmleds3 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led3: led_pwm_3 { - status = "okay"; - pwms = <&pwm3 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED Caps Lock"; - }; - }; -}; - -&pwm0 { - status = "okay"; - pinctrl-0 = <&pwm0_default_alt>; - pinctrl-1 = <&pwm0_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm2 { - status = "okay"; - pinctrl-0 = <&pwm2_default_alt>; - pinctrl-1 = <&pwm2_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm3 { - status = "okay"; - pinctrl-0 = <&pwm3_default_alt>; - pinctrl-1 = <&pwm3_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm_led0 { - status = "okay"; - pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; }; &qspi { status = "okay"; }; - -&pinctrl { - pwm0_default_alt: pwm0_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm0_sleep_alt: pwm0_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm2_default_alt: pwm2_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm2_sleep_alt: pwm2_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm3_default_alt: pwm3_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm3_sleep_alt: pwm3_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; -}; diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/click_detector_def.h index ffee923c272a..3398fe99017e 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = false, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_fast_pair.conf index b406f2bf9286..3aa78013a3be 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_fast_pair.conf @@ -5,8 +5,7 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -19,6 +18,7 @@ CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y # Reduce memory consumption diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_qspi.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_qspi.conf index f9c88c64d525..1e17296df2d4 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_qspi.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_qspi.conf @@ -5,8 +5,7 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -16,9 +15,7 @@ CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y - -# Required by QSPI -CONFIG_MULTITHREADING=y +CONFIG_FPROTECT=y CONFIG_NORDIC_QSPI_NOR=y CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096 diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_smp.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_smp.conf index db2d305d6632..5d3eba520bf7 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_smp.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/images/mcuboot/prj_mcuboot_smp.conf @@ -5,8 +5,7 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -17,6 +16,7 @@ CONFIG_BOOT_MAX_IMG_SECTORS=256 CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y # Logger diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj.conf index c23d2cba4b1e..8f3255189513 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj.conf @@ -48,8 +48,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_fast_pair.conf index 29a89b0c987f..2110cfbf587b 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_fast_pair.conf @@ -70,8 +70,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_keyboard.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_keyboard.conf index 04910bf4cb92..468e1abd47d6 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_keyboard.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_keyboard.conf @@ -55,8 +55,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_qspi.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_qspi.conf index 063e54c086ad..a56537a2734b 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_qspi.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_qspi.conf @@ -52,8 +52,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_smp.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_smp.conf index fd6081c5e720..7f8ec38fa240 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_smp.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_mcuboot_smp.conf @@ -56,8 +56,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_release.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_release.conf index 883cbba33dfb..2e0ce9a4505b 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_release.conf @@ -44,8 +44,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_wwcb.conf b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_wwcb.conf index e1d067cb1e9a..ba312203ab51 100644 --- a/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_wwcb.conf +++ b/applications/nrf_desktop/configuration/nrf52840dk_nrf52840/prj_wwcb.conf @@ -54,8 +54,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app.overlay b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app.overlay index 3374688633f6..692637514335 100644 --- a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app.overlay @@ -1,13 +1,13 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" + / { chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; ncs,ble-qos-uart = &cdc_acm_uart; }; @@ -26,29 +26,6 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds { - red_pwm_led: pwm_led_0 { - pwms = <&pwm0 0 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - green_pwm_led: pwm_led_1 { - pwms = <&pwm0 1 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - blue_pwm_led: pwm_led_2 { - pwms = <&pwm0 2 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_4 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; - }; - }; }; &usbd { @@ -64,31 +41,3 @@ &cdc_acm_uart { status = "okay"; }; - -&pwm0 { - status = "okay"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pinctrl { - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - -}; diff --git a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_3bleconn.overlay b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_3bleconn.overlay index c3a61cfa68ce..c37c981f456b 100644 --- a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_3bleconn.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_3bleconn.overlay @@ -1,15 +1,12 @@ -/ { - chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; - }; +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" +/ { /* Configure DTS nodes used for USB next HID support. */ hid_dev_0: hid_dev_0 { compatible = "zephyr,hid-device"; @@ -53,29 +50,6 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds { - red_pwm_led: pwm_led_0 { - pwms = <&pwm0 0 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - green_pwm_led: pwm_led_1 { - pwms = <&pwm0 1 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - blue_pwm_led: pwm_led_2 { - pwms = <&pwm0 2 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_4 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; - }; - }; }; &usbd { @@ -87,31 +61,3 @@ num-isoin-endpoints = <0>; num-isoout-endpoints = <0>; }; - -&pwm0 { - status = "okay"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pinctrl { - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - -}; diff --git a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_4llpmconn.overlay b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_4llpmconn.overlay index c3a61cfa68ce..c37c981f456b 100644 --- a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_4llpmconn.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_4llpmconn.overlay @@ -1,15 +1,12 @@ -/ { - chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; - }; +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" +/ { /* Configure DTS nodes used for USB next HID support. */ hid_dev_0: hid_dev_0 { compatible = "zephyr,hid-device"; @@ -53,29 +50,6 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds { - red_pwm_led: pwm_led_0 { - pwms = <&pwm0 0 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - green_pwm_led: pwm_led_1 { - pwms = <&pwm0 1 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - blue_pwm_led: pwm_led_2 { - pwms = <&pwm0 2 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_4 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; - }; - }; }; &usbd { @@ -87,31 +61,3 @@ num-isoin-endpoints = <0>; num-isoout-endpoints = <0>; }; - -&pwm0 { - status = "okay"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pinctrl { - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - -}; diff --git a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_common.dtsi b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_common.dtsi new file mode 100644 index 000000000000..9a098d86429c --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_common.dtsi @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/ { + chosen { + /* + * In some default configurations within the nRF Connect SDK, + * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node + * is &cryptocell. This devicetree overlay ensures that default + * is overridden wherever it is set, as this application uses + * the RNG node for entropy exclusively. + */ + zephyr,entropy = &rng; + }; + + pwmleds { + red_pwm_led: pwm_led_0 { + pwms = <&pwm0 0 PWM_MSEC(1) PWM_POLARITY_INVERTED>; + }; + green_pwm_led: pwm_led_1 { + pwms = <&pwm0 1 PWM_MSEC(1) PWM_POLARITY_INVERTED>; + }; + blue_pwm_led: pwm_led_2 { + pwms = <&pwm0 2 PWM_MSEC(1) PWM_POLARITY_INVERTED>; + }; + }; + + pwmleds1 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led1: led_pwm_4 { + status = "okay"; + pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; + label = "LED System State"; + }; + }; +}; + +&pwm0 { + status = "okay"; +}; + +&pwm1 { + status = "okay"; + pinctrl-0 = <&pwm1_default_alt>; + pinctrl-1 = <&pwm1_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pinctrl { + pwm1_default_alt: pwm1_default_alt { + group1 { + psels = ; + nordic,invert; + }; + }; + + pwm1_sleep_alt: pwm1_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + +}; diff --git a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_release_4llpmconn.overlay b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_release_4llpmconn.overlay index c3a61cfa68ce..c37c981f456b 100644 --- a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_release_4llpmconn.overlay +++ b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/app_release_4llpmconn.overlay @@ -1,15 +1,12 @@ -/ { - chosen { - /* - * In some default configurations within the nRF Connect SDK, - * e.g. on nRF52840 and nRF9160, the chosen zephyr,entropy node - * is &cryptocell. This devicetree overlay ensures that default - * is overridden wherever it is set, as this application uses - * the RNG node for entropy exclusively. - */ - zephyr,entropy = &rng; - }; +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" +/ { /* Configure DTS nodes used for USB next HID support. */ hid_dev_0: hid_dev_0 { compatible = "zephyr,hid-device"; @@ -53,29 +50,6 @@ in-polling-period-us = <1000>; in-report-size = <64>; }; - - pwmleds { - red_pwm_led: pwm_led_0 { - pwms = <&pwm0 0 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - green_pwm_led: pwm_led_1 { - pwms = <&pwm0 1 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - blue_pwm_led: pwm_led_2 { - pwms = <&pwm0 2 PWM_MSEC(1) PWM_POLARITY_INVERTED>; - }; - }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_4 { - status = "okay"; - pwms = <&pwm1 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>; - label = "LED System State"; - }; - }; }; &usbd { @@ -87,31 +61,3 @@ num-isoin-endpoints = <0>; num-isoout-endpoints = <0>; }; - -&pwm0 { - status = "okay"; -}; - -&pwm1 { - status = "okay"; - pinctrl-0 = <&pwm1_default_alt>; - pinctrl-1 = <&pwm1_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pinctrl { - pwm1_default_alt: pwm1_default_alt { - group1 { - psels = ; - nordic,invert; - }; - }; - - pwm1_sleep_alt: pwm1_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - -}; diff --git a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/click_detector_def.h index 4d875f86da08..6adaf088db85 100644 --- a/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52840dongle_nrf52840/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/click_detector_def.h index 4d875f86da08..6adaf088db85 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_fast_pair.conf index b7eeb16bc445..a91bdefb085e 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_fast_pair.conf @@ -5,8 +5,7 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -19,6 +18,7 @@ CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y # Reduce memory consumption diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_mcuboot_smp.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_mcuboot_smp.conf index 1f2a6cbe79a3..994f142952f6 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_mcuboot_smp.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_mcuboot_smp.conf @@ -5,8 +5,7 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -15,6 +14,7 @@ CONFIG_MAIN_STACK_SIZE=10240 CONFIG_BOOT_BOOTSTRAP=n CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y # Decrease memory footprint @@ -28,7 +28,6 @@ CONFIG_ERRNO=n CONFIG_PRINTK=n CONFIG_CBPRINTF_NANO=y CONFIG_TIMESLICING=n -CONFIG_ARM_MPU=n CONFIG_THREAD_STACK_INFO=n # Disable USB diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_release_fast_pair.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_release_fast_pair.conf index 4d4c13887ff1..4b274b1c08c9 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_release_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/images/mcuboot/prj_release_fast_pair.conf @@ -5,8 +5,7 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -19,6 +18,7 @@ CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y # Disable USB diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj.conf index c4cc2c66e05d..942ef203d454 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj.conf @@ -78,8 +78,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_fast_pair.conf index 3a1bfb8bab41..f5b87e6a881c 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_fast_pair.conf @@ -103,8 +103,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_mcuboot_smp.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_mcuboot_smp.conf index b25f3b562942..8f3578ff4c1b 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_mcuboot_smp.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_mcuboot_smp.conf @@ -88,8 +88,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=n -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release.conf index 679cdc2794b0..dcc5bd12f474 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release.conf @@ -73,8 +73,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release_fast_pair.conf b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release_fast_pair.conf index 70b3fd6bffbf..09d11e4359d6 100644 --- a/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf52840gmouse_nrf52840/prj_release_fast_pair.conf @@ -97,8 +97,6 @@ CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y -CONFIG_DESKTOP_HFCLK_LOCK_ENABLE=y - ################################################################################ # Zephyr Configuration diff --git a/applications/nrf_desktop/configuration/nrf52dmouse_nrf52832/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52dmouse_nrf52832/click_detector_def.h index ffee923c272a..3398fe99017e 100644 --- a/applications/nrf_desktop/configuration/nrf52dmouse_nrf52832/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52dmouse_nrf52832/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = false, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/click_detector_def.h b/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/click_detector_def.h index 4d875f86da08..6adaf088db85 100644 --- a/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/images/mcuboot/prj_release_fast_pair.conf b/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/images/mcuboot/prj_release_fast_pair.conf index f4b60b0de8f3..03028e4de76c 100644 --- a/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/images/mcuboot/prj_release_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf52kbd_nrf52832/images/mcuboot/prj_release_fast_pair.conf @@ -5,8 +5,7 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -# Disable memory guard to avoid false faults in application after boot -CONFIG_HW_STACK_PROTECTION=n +CONFIG_HW_STACK_PROTECTION=y CONFIG_SYSTEM_CLOCK_NO_WAIT=y @@ -19,6 +18,7 @@ CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_SOC_FLASH_NRF_EMULATE_ONE_BYTE_WRITE_ACCESS=y # Reduce memory consumption diff --git a/applications/nrf_desktop/configuration/nrf5340dk_nrf5340_cpuapp/click_detector_def.h b/applications/nrf_desktop/configuration/nrf5340dk_nrf5340_cpuapp/click_detector_def.h index 71dd3f5d89d0..f24797065d04 100644 --- a/applications/nrf_desktop/configuration/nrf5340dk_nrf5340_cpuapp/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf5340dk_nrf5340_cpuapp/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = true, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay index 3dbb5f962ee4..c35828100506 100644 --- a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app.overlay @@ -4,54 +4,9 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/ { - /* Redefine leds to fit CAF requirements. */ - /delete-node/ leds; - - leds0 { - compatible = "gpio-leds"; - status = "okay"; - label = "System State LED"; - - led0: led_0 { - gpios = < &gpio9 0 GPIO_ACTIVE_HIGH >; - label = "Green LED 0"; - }; - }; - - leds1 { - compatible = "gpio-leds"; - status = "okay"; - label = "Peer State LED"; - - led1: led_1 { - gpios = < &gpio9 1 GPIO_ACTIVE_HIGH >; - label = "Green LED 1"; - }; - }; - - leds2 { - compatible = "gpio-leds"; - status = "disabled"; - label = "Unused LED 2"; - - led2: led_2 { - gpios = < &gpio9 2 GPIO_ACTIVE_HIGH >; - label = "Green LED 2"; - }; - }; - - leds3 { - compatible = "gpio-leds"; - status = "disabled"; - label = "Unused LED 3"; - - led3: led_3 { - gpios = < &gpio9 3 GPIO_ACTIVE_HIGH >; - label = "Green LED 3"; - }; - }; +#include "app_common.dtsi" +/ { hid_dev_0: hid_dev_0 { compatible = "zephyr,hid-device"; interface-name = "HID0"; @@ -60,20 +15,3 @@ in-report-size = <64>; }; }; - -&cpusec_cpuapp_ipc { - status = "okay"; -}; - -&cpusec_bellboard { - status = "okay"; -}; - -/* Shrink ppr partition as ppr core is not used and extend app core code partition. */ -&cpuppr_code_partition { - reg = < 0xf8000 DT_SIZE_K(32) >; -}; - -&cpuapp_slot0_partition { - reg = < 0xa6000 DT_SIZE_K(328) >; -}; diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app_common.dtsi b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app_common.dtsi new file mode 100644 index 000000000000..e743fe116dfc --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app_common.dtsi @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/ { + /* Redefine leds to fit CAF requirements. */ + /delete-node/ leds; + + leds0 { + compatible = "gpio-leds"; + status = "okay"; + label = "System State LED"; + + led0: led_0 { + gpios = < &gpio9 0 GPIO_ACTIVE_HIGH >; + label = "Green LED 0"; + }; + }; + + leds1 { + compatible = "gpio-leds"; + status = "okay"; + label = "Peer State LED"; + + led1: led_1 { + gpios = < &gpio9 1 GPIO_ACTIVE_HIGH >; + label = "Green LED 1"; + }; + }; + + leds2 { + compatible = "gpio-leds"; + status = "disabled"; + label = "Unused LED 2"; + + led2: led_2 { + gpios = < &gpio9 2 GPIO_ACTIVE_HIGH >; + label = "Green LED 2"; + }; + }; + + leds3 { + compatible = "gpio-leds"; + status = "disabled"; + label = "Unused LED 3"; + + led3: led_3 { + gpios = < &gpio9 3 GPIO_ACTIVE_HIGH >; + label = "Green LED 3"; + }; + }; + + aliases { + nrfdesktop-dvfs-clock = &cpuapp_hsfll; + }; +}; + +&cpusec_cpuapp_ipc { + status = "okay"; +}; + +&cpusec_bellboard { + status = "okay"; +}; + +/* Shrink ppr partition as ppr core is not used and extend app core code partition. */ +&cpuppr_code_partition { + reg = < 0xf8000 DT_SIZE_K(32) >; +}; + +&cpuapp_slot0_partition { + reg = < 0xa6000 DT_SIZE_K(328) >; +}; diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app_release.overlay b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app_release.overlay new file mode 100644 index 000000000000..8c3ab755064c --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/app_release.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" + +/ { + hid_dev_0: hid_dev_0 { + compatible = "zephyr,hid-device"; + interface-name = "HID0"; + protocol-code = "mouse"; + in-polling-period-us = <125>; + in-report-size = <64>; + }; +}; + +/* For nRF54H, watchdog status is disabled by default. Needs to be enabled in DTS overlay. */ +&wdt010 { + status = "okay"; +}; diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/click_detector_def.h b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/click_detector_def.h index 38a3fee1443b..32dc4796effa 100644 --- a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = false, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf index f5571ec57872..1e99f5896e1a 100644 --- a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj.conf @@ -141,3 +141,7 @@ CONFIG_MCUMGR_GRP_OS_MCUMGR_PARAMS=y CONFIG_SUIT=y CONFIG_SUIT_DFU_CANDIDATE_PROCESSING_MINIMAL=y + +CONFIG_PM=y +CONFIG_PM_S2RAM=y +CONFIG_PM_S2RAM_CUSTOM_MARKING=y diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_release.conf b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_release.conf index 366a64afb0b4..95a3747b9a40 100644 --- a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpuapp/prj_release.conf @@ -37,6 +37,9 @@ CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=10 CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y +CONFIG_DESKTOP_WATCHDOG_ENABLE=y +CONFIG_DESKTOP_FAILSAFE_ENABLE=y + CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y @@ -67,7 +70,7 @@ CONFIG_HEAP_MEM_POOL_SIZE=2560 CONFIG_IDLE_STACK_SIZE=512 CONFIG_HW_STACK_PROTECTION=n -CONFIG_RESET_ON_FATAL_ERROR=y +CONFIG_RESET_ON_FATAL_ERROR=n CONFIG_SPEED_OPTIMIZATIONS=y @@ -119,3 +122,7 @@ CONFIG_MCUMGR_GRP_OS_MCUMGR_PARAMS=y CONFIG_SUIT=y CONFIG_SUIT_DFU_CANDIDATE_PROCESSING_MINIMAL=y + +CONFIG_PM=y +CONFIG_PM_S2RAM=y +CONFIG_PM_S2RAM_CUSTOM_MARKING=y diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj.conf b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj.conf index 7fe4abce1e3d..73e70ad6affc 100644 --- a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj.conf +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj.conf @@ -62,3 +62,5 @@ CONFIG_IPC_RADIO_BT_HCI_IPC=y CONFIG_BT_BUF_ACL_RX_SIZE=502 CONFIG_BT_BUF_ACL_TX_SIZE=251 CONFIG_BT_CTLR_DATA_LENGTH_MAX=251 + +CONFIG_PM=y diff --git a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj_release.conf b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj_release.conf index 9782e493e7d1..e6ad29878c69 100644 --- a/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf54h20dk_nrf54h20_cpurad/images/ipc_radio/prj_release.conf @@ -51,3 +51,5 @@ CONFIG_IPC_RADIO_BT_HCI_IPC=y CONFIG_BT_BUF_ACL_RX_SIZE=502 CONFIG_BT_BUF_ACL_TX_SIZE=251 CONFIG_BT_CTLR_DATA_LENGTH_MAX=251 + +CONFIG_PM=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app.overlay new file mode 100644 index 000000000000..51eda84e94e0 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app.overlay @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_common.dtsi b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_common.dtsi new file mode 100644 index 000000000000..3aed7bae7cdc --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_common.dtsi @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Application does not use cpuflpr core. Assign whole RRAM to cpuapp. */ +&cpuapp_rram { + reg = < 0x0 DT_SIZE_K(500) >; +}; + +/ { + /* Disable pwmleds and redefine them to align configuration with CAF LEDs requirements. + * The configuration needs to match the used board revision. + */ + /delete-node/ pwmleds; + + pwmleds0 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led0: led_pwm_0 { + status = "okay"; + pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED System State"; + }; + }; + + pwmleds1 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led1: led_pwm_1 { + status = "okay"; + pwms = <&pwm21 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED Conn State"; + }; + }; + + pwmleds2 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led2: led_pwm_2 { + status = "okay"; + pwms = <&pwm22 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED Num Lock"; + }; + }; +}; + +&pwm20 { + status = "okay"; + pinctrl-0 = <&pwm20_default_alt>; + pinctrl-1 = <&pwm20_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm21 { + status = "okay"; + pinctrl-0 = <&pwm21_default_alt>; + pinctrl-1 = <&pwm21_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm22 { + status = "okay"; + pinctrl-0 = <&pwm22_default_alt>; + pinctrl-1 = <&pwm22_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pinctrl { + pwm20_default_alt: pwm20_default_alt { + group1 { + psels = ; + }; + }; + + pwm20_sleep_alt: pwm20_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm21_default_alt: pwm21_default_alt { + group1 { + psels = ; + }; + }; + + pwm21_sleep_alt: pwm21_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm22_default_alt: pwm22_default_alt { + group1 { + psels = ; + }; + }; + + pwm22_sleep_alt: pwm22_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release.overlay new file mode 100644 index 000000000000..3faa341ff1ce --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" + +/* For nRF54L, watchdog status is disabled by default. Needs to be enabled in DTS overlay. */ +&wdt31 { + status = "okay"; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release_fast_pair.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release_fast_pair.overlay new file mode 100644 index 000000000000..3faa341ff1ce --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release_fast_pair.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" + +/* For nRF54L, watchdog status is disabled by default. Needs to be enabled in DTS overlay. */ +&wdt31 { + status = "okay"; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release_keyboard.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release_keyboard.overlay new file mode 100644 index 000000000000..3faa341ff1ce --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/app_release_keyboard.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" + +/* For nRF54L, watchdog status is disabled by default. Needs to be enabled in DTS overlay. */ +&wdt31 { + status = "okay"; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/buttons_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/buttons_def.h new file mode 100644 index 000000000000..77b68b4f91c2 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/buttons_def.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from button module and holds + * information about pins forming keyboard matrix. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} buttons_def_include_once; + +static const struct gpio_pin col[] = {}; + +static const struct gpio_pin row[] = { + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button0), gpios) }, + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button1), gpios) }, + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button2), gpios) }, + { .port = 0, .pin = DT_GPIO_PIN(DT_NODELABEL(button3), gpios) }, +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/buttons_sim_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/buttons_sim_def.h new file mode 100644 index 000000000000..edf1fdafc106 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/buttons_sim_def.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from buttons_sim module + * and holds information about generated button presses sequence. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} buttons_sim_def_include_once; + +const static uint16_t simulated_key_sequence[] = { + KEY_ID(0x00, 0x11), /* N */ + KEY_ID(0x00, 0x12), /* O */ + KEY_ID(0x00, 0x15), /* R */ + KEY_ID(0x00, 0x07), /* D */ + KEY_ID(0x00, 0x0C), /* I */ + KEY_ID(0x00, 0x06), /* C */ + KEY_ID(0x00, 0x2C), /* spacebar */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/click_detector_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/click_detector_def.h new file mode 100644 index 000000000000..f8dadda3b84a --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/click_detector_def.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from click_detector module + * and holds information about click detector configuration. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} click_detector_def_include_once; + +static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL + { + .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, + .consume_button_event = false, + }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keyboard_leds_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keyboard_leds_def.h new file mode 100644 index 000000000000..9f3a247783aa --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keyboard_leds_def.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keyboard_leds.h" + +/* This configuration file is included only once from hid_state module and holds + * information about LEDs associated with HID keyboard LEDs report. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keyboard_leds_def_include_once; + +static const struct led_effect keyboard_led_on = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)); +static const struct led_effect keyboard_led_off = LED_EFFECT_LED_OFF(); + +/* Map HID keyboard LEDs to application LED IDs. */ +static const uint8_t keyboard_led_map[] = { +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keyboard_leds_def_keyboard.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keyboard_leds_def_keyboard.h new file mode 100644 index 000000000000..8926d9172c0f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keyboard_leds_def_keyboard.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keyboard_leds.h" + +/* This configuration file is included only once from hid_state module and holds + * information about LEDs associated with HID keyboard LEDs report. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keyboard_leds_def_include_once; + +/* On the nRF54L05 SoC, you can only use the **GPIO1** port for PWM hardware peripheral output. + * Because of that, on the DK PCA10156 revision v0.8.1, **LED 0** and **LED 2** cannot be used for + * PWM output. + * + * You can still use these LEDs with the PWM LED driver, but you must set the LED color to + * `LED_COLOR(255, 255, 255)` or `LED_COLOR(0, 0, 0)`. This ensures the PWM peripheral is not + * used for the mentioned LEDs. + */ +static const struct led_effect keyboard_led_on = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)); +static const struct led_effect keyboard_led_off = LED_EFFECT_LED_OFF(); + +/* Map HID keyboard LEDs to application LED IDs. */ +static const uint8_t keyboard_led_map[] = { + [HID_KEYBOARD_LEDS_NUM_LOCK] = 2, + [HID_KEYBOARD_LEDS_CAPS_LOCK] = LED_UNAVAILABLE, + [HID_KEYBOARD_LEDS_SCROLL_LOCK] = LED_UNAVAILABLE, + [HID_KEYBOARD_LEDS_COMPOSE] = LED_UNAVAILABLE, + [HID_KEYBOARD_LEDS_KANA] = LED_UNAVAILABLE, +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keymap_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keymap_def.h new file mode 100644 index 000000000000..cf649d526696 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keymap_def.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keymap.h" +#include + +/* This configuration file is included only once from hid_state module and holds + * information about mapping between buttons and generated reports. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keymap_def_include_once; + +/* + * HID keymap. The Consumer Control keys are defined in section 15 of + * the HID Usage Tables document under the following URL: + * https://www.usb.org/sites/default/files/hut1_12.pdf + */ +static const struct hid_keymap hid_keymap[] = { + /* Intentionally left empty. nRF54L DK by default uses all buttons only to control + * generating motion. + */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keymap_def_keyboard.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keymap_def_keyboard.h new file mode 100644 index 000000000000..5d0e77c34c57 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/hid_keymap_def_keyboard.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keymap.h" +#include + +/* This configuration file is included only once from hid_state module and holds + * information about mapping between buttons and generated reports. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keymap_def_include_once; + +/* + * HID keymap. The Consumer Control keys are defined in section 15 of + * the HID Usage Tables document under the following URL: + * https://www.usb.org/sites/default/files/hut1_12.pdf + */ +static const struct hid_keymap hid_keymap[] = { + { KEY_ID(0x00, 0x00), 0x0004, REPORT_ID_KEYBOARD_KEYS }, /* A */ + { KEY_ID(0x00, 0x01), 0x0005, REPORT_ID_KEYBOARD_KEYS }, /* B */ + { KEY_ID(0x00, 0x02), 0x00E1, REPORT_ID_KEYBOARD_KEYS }, /* left shift */ + + { KEY_ID(0x00, 0x04), 0x0004, REPORT_ID_KEYBOARD_KEYS }, /* A */ + { KEY_ID(0x00, 0x05), 0x0005, REPORT_ID_KEYBOARD_KEYS }, /* B */ + { KEY_ID(0x00, 0x06), 0x0006, REPORT_ID_KEYBOARD_KEYS }, /* C */ + { KEY_ID(0x00, 0x07), 0x0007, REPORT_ID_KEYBOARD_KEYS }, /* D */ + { KEY_ID(0x00, 0x08), 0x0008, REPORT_ID_KEYBOARD_KEYS }, /* E */ + { KEY_ID(0x00, 0x09), 0x0009, REPORT_ID_KEYBOARD_KEYS }, /* F */ + { KEY_ID(0x00, 0x0A), 0x000A, REPORT_ID_KEYBOARD_KEYS }, /* G */ + { KEY_ID(0x00, 0x0B), 0x000B, REPORT_ID_KEYBOARD_KEYS }, /* H */ + { KEY_ID(0x00, 0x0C), 0x000C, REPORT_ID_KEYBOARD_KEYS }, /* I */ + { KEY_ID(0x00, 0x0D), 0x000D, REPORT_ID_KEYBOARD_KEYS }, /* J */ + { KEY_ID(0x00, 0x0E), 0x000E, REPORT_ID_KEYBOARD_KEYS }, /* K */ + { KEY_ID(0x00, 0x0F), 0x000F, REPORT_ID_KEYBOARD_KEYS }, /* L */ + { KEY_ID(0x00, 0x10), 0x0010, REPORT_ID_KEYBOARD_KEYS }, /* M */ + { KEY_ID(0x00, 0x11), 0x0011, REPORT_ID_KEYBOARD_KEYS }, /* N */ + { KEY_ID(0x00, 0x12), 0x0012, REPORT_ID_KEYBOARD_KEYS }, /* O */ + { KEY_ID(0x00, 0x13), 0x0013, REPORT_ID_KEYBOARD_KEYS }, /* P */ + { KEY_ID(0x00, 0x14), 0x0014, REPORT_ID_KEYBOARD_KEYS }, /* Q */ + { KEY_ID(0x00, 0x15), 0x0015, REPORT_ID_KEYBOARD_KEYS }, /* R */ + { KEY_ID(0x00, 0x16), 0x0016, REPORT_ID_KEYBOARD_KEYS }, /* S */ + { KEY_ID(0x00, 0x17), 0x0017, REPORT_ID_KEYBOARD_KEYS }, /* T */ + { KEY_ID(0x00, 0x18), 0x0018, REPORT_ID_KEYBOARD_KEYS }, /* U */ + { KEY_ID(0x00, 0x19), 0x0019, REPORT_ID_KEYBOARD_KEYS }, /* V */ + { KEY_ID(0x00, 0x1A), 0x001A, REPORT_ID_KEYBOARD_KEYS }, /* W */ + { KEY_ID(0x00, 0x1B), 0x001B, REPORT_ID_KEYBOARD_KEYS }, /* X */ + { KEY_ID(0x00, 0x1C), 0x001C, REPORT_ID_KEYBOARD_KEYS }, /* Y */ + { KEY_ID(0x00, 0x1D), 0x001D, REPORT_ID_KEYBOARD_KEYS }, /* Z */ + + { KEY_ID(0x00, 0x2C), 0x002C, REPORT_ID_KEYBOARD_KEYS }, /* spacebar */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/app.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/app.overlay new file mode 100644 index 000000000000..1da774e24700 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/app.overlay @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Application does not use cpuflpr core. Assign whole RRAM to cpuapp. */ +&cpuapp_rram { + reg = < 0x0 DT_SIZE_K(500) >; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/mcuboot_private.pem b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/mcuboot_private.pem new file mode 100644 index 000000000000..fffa0a3d6354 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/mcuboot_private.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIFqLzeegnySVGPsME/47B+L0N6FArMzALaRVMHGnTHMZ +-----END PRIVATE KEY----- diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem new file mode 100644 index 000000000000..19cf15cbfbe7 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIBwNpAMFyNNApXgkk5PkbABGHPX65WNGiOmSOAvwyv48 +-----END PRIVATE KEY----- diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release.conf new file mode 100644 index 000000000000..1a060f1dd67f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release.conf @@ -0,0 +1,42 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_MAIN_STACK_SIZE=10240 + +CONFIG_BOOT_MAX_IMG_SECTORS=256 +CONFIG_BOOT_BOOTSTRAP=n + +CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_FLASH=y +CONFIG_FPROTECT=y + +CONFIG_RESET_ON_FATAL_ERROR=y + +# Reduce memory consumption +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n +CONFIG_SYS_CLOCK_EXISTS=n +CONFIG_CLOCK_CONTROL=n +CONFIG_NRF_GRTC_TIMER=n +CONFIG_NRF_GRTC_START_SYSCOUNTER=n +CONFIG_SPI_NOR=n +CONFIG_GPIO=n +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_USE_SEGGER_RTT=n + +# Use minimal C library instead of the Picolib +CONFIG_MINIMAL_LIBC=y + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release_fast_pair.conf new file mode 100644 index 000000000000..1a060f1dd67f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release_fast_pair.conf @@ -0,0 +1,42 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_MAIN_STACK_SIZE=10240 + +CONFIG_BOOT_MAX_IMG_SECTORS=256 +CONFIG_BOOT_BOOTSTRAP=n + +CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_FLASH=y +CONFIG_FPROTECT=y + +CONFIG_RESET_ON_FATAL_ERROR=y + +# Reduce memory consumption +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n +CONFIG_SYS_CLOCK_EXISTS=n +CONFIG_CLOCK_CONTROL=n +CONFIG_NRF_GRTC_TIMER=n +CONFIG_NRF_GRTC_START_SYSCOUNTER=n +CONFIG_SPI_NOR=n +CONFIG_GPIO=n +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_USE_SEGGER_RTT=n + +# Use minimal C library instead of the Picolib +CONFIG_MINIMAL_LIBC=y + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release_keyboard.conf new file mode 100644 index 000000000000..1a060f1dd67f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/images/mcuboot/prj_release_keyboard.conf @@ -0,0 +1,42 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_MAIN_STACK_SIZE=10240 + +CONFIG_BOOT_MAX_IMG_SECTORS=256 +CONFIG_BOOT_BOOTSTRAP=n + +CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_FLASH=y +CONFIG_FPROTECT=y + +CONFIG_RESET_ON_FATAL_ERROR=y + +# Reduce memory consumption +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n +CONFIG_SYS_CLOCK_EXISTS=n +CONFIG_CLOCK_CONTROL=n +CONFIG_NRF_GRTC_TIMER=n +CONFIG_NRF_GRTC_START_SYSCOUNTER=n +CONFIG_SPI_NOR=n +CONFIG_GPIO=n +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_USE_SEGGER_RTT=n + +# Use minimal C library instead of the Picolib +CONFIG_MINIMAL_LIBC=y + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/led_state_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/led_state_def.h new file mode 100644 index 000000000000..52b6d684ef62 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/led_state_def.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "led_state.h" +#include + +/* This configuration file is included only once from led_state module and holds + * information about LED effect associated with each state. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} led_state_def_include_once; + + +/* Map function to LED ID */ +static const uint8_t led_map[LED_ID_COUNT] = { + [LED_ID_SYSTEM_STATE] = 0, + [LED_ID_PEER_STATE] = 1 +}; + +/* On the nRF54L05 SoC, you can only use the **GPIO1** port for PWM hardware peripheral output. + * Because of that, on the DK PCA10156 revision v0.8.1 **LED 0** and **LED 2** cannot be used + * for PWM output. + * + * You can still use these LEDs with the PWM LED driver, but you must set the LED color to + * `LED_COLOR(255, 255, 255)` or `LED_COLOR(0, 0, 0)`. This ensures the PWM peripheral is not + * used for the mentioned LEDs. + */ + +static const struct led_effect led_system_state_effect[LED_SYSTEM_STATE_COUNT] = { + [LED_SYSTEM_STATE_IDLE] = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)), + [LED_SYSTEM_STATE_CHARGING] = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)), + [LED_SYSTEM_STATE_ERROR] = LED_EFFECT_LED_BLINK(200, LED_COLOR(255, 255, 255)), +}; + +static const struct led_effect led_peer_state_effect[LED_PEER_COUNT][LED_PEER_STATE_COUNT] = { + {[LED_PEER_STATE_DISCONNECTED] = LED_EFFECT_LED_OFF(), + [LED_PEER_STATE_CONNECTED] = LED_EFFECT_LED_ON(LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_PEER_SEARCH] = LED_EFFECT_LED_BREATH(1000, LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_CONFIRM_SELECT] = LED_EFFECT_LED_BLINK(50, LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_CONFIRM_ERASE] = LED_EFFECT_LED_BLINK(25, LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_ERASE_ADV] = LED_EFFECT_LED_BREATH(100, LED_COLOR(100, 100, 100)), + }, +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static.yml new file mode 100644 index 000000000000..009017c95c9c --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static.yml @@ -0,0 +1,8 @@ +app: + address: 0x0000 + region: flash_primary + size: 0x79000 +settings_storage: + address: 0x79000 + region: flash_primary + size: 0x4000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release.yml new file mode 100644 index 000000000000..7897b645aa5b --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release.yml @@ -0,0 +1,47 @@ +app: + address: 0x7800 + region: flash_primary + size: 0x38800 +mcuboot: + address: 0x0 + region: flash_primary + size: 0x7000 +mcuboot_pad: + address: 0x7000 + region: flash_primary + size: 0x800 +mcuboot_primary: + address: 0x7000 + orig_span: &id001 + - app + - mcuboot_pad + region: flash_primary + size: 0x39000 + span: *id001 +mcuboot_primary_app: + address: 0x7800 + orig_span: &id002 + - app + region: flash_primary + size: 0x38800 + span: *id002 +mcuboot_secondary: + address: 0x40000 + orig_span: &id003 + - mcuboot_secondary_pad + - mcuboot_secondary_app + region: flash_primary + size: 0x39000 + span: *id003 +mcuboot_secondary_pad: + region: flash_primary + address: 0x40000 + size: 0x800 +mcuboot_secondary_app: + region: flash_primary + address: 0x40800 + size: 0x38800 +settings_storage: + address: 0x79000 + region: flash_primary + size: 0x4000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release_fast_pair.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release_fast_pair.yml new file mode 100644 index 000000000000..54358ed7e25f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release_fast_pair.yml @@ -0,0 +1,51 @@ +app: + address: 0x7800 + region: flash_primary + size: 0x37800 +mcuboot: + address: 0x0 + region: flash_primary + size: 0x7000 +mcuboot_pad: + address: 0x7000 + region: flash_primary + size: 0x800 +mcuboot_primary: + address: 0x7000 + orig_span: &id001 + - app + - mcuboot_pad + region: flash_primary + size: 0x38000 + span: *id001 +mcuboot_primary_app: + address: 0x7800 + orig_span: &id002 + - app + region: flash_primary + size: 0x37800 + span: *id002 +mcuboot_secondary: + address: 0x3f000 + orig_span: &id003 + - mcuboot_secondary_pad + - mcuboot_secondary_app + region: flash_primary + size: 0x38000 + span: *id003 +mcuboot_secondary_pad: + region: flash_primary + address: 0x3f000 + size: 0x800 +mcuboot_secondary_app: + region: flash_primary + address: 0x3f800 + size: 0x37800 +bt_fast_pair: + address: 0x77000 + region: flash_primary + size: 0x1000 +settings_storage: + address: 0x78000 + region: flash_primary + size: 0x5000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release_keyboard.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release_keyboard.yml new file mode 100644 index 000000000000..7897b645aa5b --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/pm_static_release_keyboard.yml @@ -0,0 +1,47 @@ +app: + address: 0x7800 + region: flash_primary + size: 0x38800 +mcuboot: + address: 0x0 + region: flash_primary + size: 0x7000 +mcuboot_pad: + address: 0x7000 + region: flash_primary + size: 0x800 +mcuboot_primary: + address: 0x7000 + orig_span: &id001 + - app + - mcuboot_pad + region: flash_primary + size: 0x39000 + span: *id001 +mcuboot_primary_app: + address: 0x7800 + orig_span: &id002 + - app + region: flash_primary + size: 0x38800 + span: *id002 +mcuboot_secondary: + address: 0x40000 + orig_span: &id003 + - mcuboot_secondary_pad + - mcuboot_secondary_app + region: flash_primary + size: 0x39000 + span: *id003 +mcuboot_secondary_pad: + region: flash_primary + address: 0x40000 + size: 0x800 +mcuboot_secondary_app: + region: flash_primary + address: 0x40800 + size: 0x38800 +settings_storage: + address: 0x79000 + region: flash_primary + size: 0x4000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/port_state_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/port_state_def.h new file mode 100644 index 000000000000..1b4906e1477f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/port_state_def.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +#include "port_state.h" + +/* This configuration file is included only once from board module and holds + * information about default pin states set while board is on and off. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} port_state_def_include_once; + + +static const struct port_state port_state_on[] = { +}; + +static const struct port_state port_state_off[] = { +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj.conf new file mode 100644 index 000000000000..bdc675fc80cf --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj.conf @@ -0,0 +1,113 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# Application Configuration + +CONFIG_DESKTOP_INIT_LOG_MOTION_EVENT=n +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_EVENT=n +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_SENT_EVENT=n +CONFIG_CAF_INIT_LOG_KEEP_ALIVE_EVENTS=n + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE=y +CONFIG_DESKTOP_DEVICE_PID=0x52DE +CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE=y + +CONFIG_DESKTOP_MOTION_BUTTONS_ENABLE=y +CONFIG_DESKTOP_MOTION_BUTTONS_UP_KEY_ID=0 +CONFIG_DESKTOP_MOTION_BUTTONS_DOWN_KEY_ID=3 +CONFIG_DESKTOP_MOTION_BUTTONS_LEFT_KEY_ID=2 +CONFIG_DESKTOP_MOTION_BUTTONS_RIGHT_KEY_ID=1 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +CONFIG_DESKTOP_BLE_USE_DEFAULT_ID=y + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=10 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=512 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=y +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y + +CONFIG_REBOOT=y + +CONFIG_SPEED_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +CONFIG_BT_MAX_PAIRED=2 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=4 +CONFIG_BT_CONN_TX_MAX=4 + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 + +################################################################################ + +CONFIG_ASSERT=y +CONFIG_ASSERT_LEVEL=2 + +# nRF54L DK uses UART for logs. +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_LOG=y +CONFIG_LOG_BACKEND_UART=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP=n +CONFIG_LOG_MODE_DEFERRED=y +CONFIG_LOG_PRINTK=y +CONFIG_LOG_BUFFER_SIZE=4096 +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=1024 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release.conf new file mode 100644 index 000000000000..3708b59a7906 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release.conf @@ -0,0 +1,100 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# Application Configuration + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE=y +CONFIG_DESKTOP_DEVICE_PID=0x52DE +CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE=y + +CONFIG_DESKTOP_MOTION_BUTTONS_ENABLE=y +CONFIG_DESKTOP_MOTION_BUTTONS_UP_KEY_ID=0 +CONFIG_DESKTOP_MOTION_BUTTONS_DOWN_KEY_ID=3 +CONFIG_DESKTOP_MOTION_BUTTONS_LEFT_KEY_ID=2 +CONFIG_DESKTOP_MOTION_BUTTONS_RIGHT_KEY_ID=1 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=10 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_WATCHDOG_ENABLE=y +CONFIG_DESKTOP_FAILSAFE_ENABLE=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y +CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=512 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=n +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y + +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_USE_SEGGER_RTT=n + +CONFIG_REBOOT=y + +CONFIG_SPEED_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +CONFIG_BT_MAX_PAIRED=2 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=4 +CONFIG_BT_CONN_TX_MAX=4 + +CONFIG_STREAM_FLASH=y +CONFIG_IMG_MANAGER=y +CONFIG_MCUBOOT_IMG_MANAGER=y + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release_fast_pair.conf new file mode 100644 index 000000000000..95b34aa65d81 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release_fast_pair.conf @@ -0,0 +1,124 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# release: Fast Pair version +# +# This release build type configuration enables Fast Pair support. +# The build type configuration supports only configuration channel DFU transport. +# +# Application Configuration + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE=y +CONFIG_DESKTOP_DEVICE_PID=0x52DE +CONFIG_DESKTOP_DEVICE_GENERATION="FastPair" +CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE=y + +CONFIG_DESKTOP_MOTION_BUTTONS_ENABLE=y +CONFIG_DESKTOP_MOTION_BUTTONS_UP_KEY_ID=0 +CONFIG_DESKTOP_MOTION_BUTTONS_DOWN_KEY_ID=3 +CONFIG_DESKTOP_MOTION_BUTTONS_LEFT_KEY_ID=2 +CONFIG_DESKTOP_MOTION_BUTTONS_RIGHT_KEY_ID=1 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +# Align advertising intervals with Fast Pair specification. +CONFIG_CAF_BLE_ADV_FAST_INT_MIN=0x0040 +CONFIG_CAF_BLE_ADV_FAST_INT_MAX=0x0060 +CONFIG_CAF_BLE_ADV_SLOW_INT_MIN=0x0060 +CONFIG_CAF_BLE_ADV_SLOW_INT_MAX=0x0080 + +# Disable filter accept list to allow for multiple bonds for a given local identity. +CONFIG_CAF_BLE_ADV_FILTER_ACCEPT_LIST=n +CONFIG_CAF_BLE_STATE_MAX_LOCAL_ID_BONDS=3 + +# Align the advertised TX power with Fast Pair expectations. +CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL=-11 + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=30 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_WATCHDOG_ENABLE=y +CONFIG_DESKTOP_FAILSAFE_ENABLE=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y +CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=2048 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=n +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y + +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_USE_SEGGER_RTT=n + +CONFIG_REBOOT=y + +# Optimize for size to reduce memory footprint. +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +CONFIG_BT_MAX_PAIRED=4 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=4 +CONFIG_BT_CONN_TX_MAX=4 + +CONFIG_STREAM_FLASH=y +CONFIG_IMG_MANAGER=y +CONFIG_MCUBOOT_IMG_MANAGER=y + +CONFIG_BT_FAST_PAIR=y +CONFIG_BT_FAST_PAIR_USE_CASE_MOUSE=y +CONFIG_BT_PRIVACY=y + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release_keyboard.conf new file mode 100644 index 000000000000..58ff36ab55dc --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/prj_release_keyboard.conf @@ -0,0 +1,107 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# release: Keyboard version +# +# This release build type configuration acts as a keyboard. +# +# Application Configuration + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_KEYBOARD=y +CONFIG_DESKTOP_DEVICE_PID=0x52DD +CONFIG_DESKTOP_HID_BOOT_INTERFACE_KEYBOARD=y +CONFIG_DESKTOP_HID_STATE_HID_KEYMAP_DEF_PATH="hid_keymap_def_keyboard.h" +CONFIG_DESKTOP_HID_STATE_HID_KEYBOARD_LEDS_DEF_PATH="hid_keyboard_leds_def_keyboard.h" +CONFIG_DESKTOP_HID_REPORT_EXPIRATION=10000 +CONFIG_DESKTOP_HID_EVENT_QUEUE_SIZE=60 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +CONFIG_DESKTOP_BUTTONS_SIM_ENABLE=y +CONFIG_DESKTOP_BUTTONS_SIM_INTERVAL=100 +CONFIG_DESKTOP_BUTTONS_SIM_LOOP_FOREVER=y +CONFIG_DESKTOP_BUTTONS_SIM_TRIGGER_KEY_ID=0x03 + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=10 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_WATCHDOG_ENABLE=y +CONFIG_DESKTOP_FAILSAFE_ENABLE=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y +CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=4096 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=n +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y + +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_USE_SEGGER_RTT=n + +CONFIG_REBOOT=y + +CONFIG_SPEED_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +CONFIG_BT_MAX_PAIRED=2 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=6 +CONFIG_BT_CONN_TX_MAX=6 + +CONFIG_STREAM_FLASH=y +CONFIG_IMG_MANAGER=y +CONFIG_MCUBOOT_IMG_MANAGER=y + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release.conf new file mode 100644 index 000000000000..75c652858410 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release.conf @@ -0,0 +1,13 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ + +SB_CONFIG_BOOTLOADER_MCUBOOT=y +SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y +SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release_fast_pair.conf new file mode 100644 index 000000000000..ce44ce83fb47 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release_fast_pair.conf @@ -0,0 +1,14 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ + +SB_CONFIG_BT_FAST_PAIR=y +SB_CONFIG_BOOTLOADER_MCUBOOT=y +SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y +SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private_fast_pair.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release_keyboard.conf new file mode 100644 index 000000000000..75c652858410 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l05_cpuapp/sysbuild_release_keyboard.conf @@ -0,0 +1,13 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ + +SB_CONFIG_BOOTLOADER_MCUBOOT=y +SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y +SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app.overlay new file mode 100644 index 000000000000..51eda84e94e0 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app.overlay @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app_common.dtsi b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app_common.dtsi new file mode 100644 index 000000000000..76c1a2867a4c --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app_common.dtsi @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Application does not use cpuflpr core. Assign whole RRAM to cpuapp. */ +&cpuapp_rram { + reg = < 0x0 DT_SIZE_K(1022) >; +}; + +/ { + /* Disable pwmleds and redefine them to align configuration with CAF LEDs requirements. + * The configuration needs to match the used board revision. + */ + /delete-node/ pwmleds; + + pwmleds0 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led0: led_pwm_0 { + status = "okay"; + pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED System State"; + }; + }; + + pwmleds1 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led1: led_pwm_1 { + status = "okay"; + pwms = <&pwm21 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED Conn State"; + }; + }; + + pwmleds2 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led2: led_pwm_2 { + status = "okay"; + pwms = <&pwm22 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED Num Lock"; + }; + }; +}; + +&pwm20 { + status = "okay"; + pinctrl-0 = <&pwm20_default_alt>; + pinctrl-1 = <&pwm20_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm21 { + status = "okay"; + pinctrl-0 = <&pwm21_default_alt>; + pinctrl-1 = <&pwm21_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm22 { + status = "okay"; + pinctrl-0 = <&pwm22_default_alt>; + pinctrl-1 = <&pwm22_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pinctrl { + pwm20_default_alt: pwm20_default_alt { + group1 { + psels = ; + }; + }; + + pwm20_sleep_alt: pwm20_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm21_default_alt: pwm21_default_alt { + group1 { + psels = ; + }; + }; + + pwm21_sleep_alt: pwm21_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm22_default_alt: pwm22_default_alt { + group1 { + psels = ; + }; + }; + + pwm22_sleep_alt: pwm22_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app_release.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app_release.overlay new file mode 100644 index 000000000000..3faa341ff1ce --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/app_release.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" + +/* For nRF54L, watchdog status is disabled by default. Needs to be enabled in DTS overlay. */ +&wdt31 { + status = "okay"; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/buttons_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/buttons_def.h new file mode 100644 index 000000000000..77b68b4f91c2 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/buttons_def.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from button module and holds + * information about pins forming keyboard matrix. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} buttons_def_include_once; + +static const struct gpio_pin col[] = {}; + +static const struct gpio_pin row[] = { + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button0), gpios) }, + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button1), gpios) }, + { .port = 1, .pin = DT_GPIO_PIN(DT_NODELABEL(button2), gpios) }, + { .port = 0, .pin = DT_GPIO_PIN(DT_NODELABEL(button3), gpios) }, +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/buttons_sim_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/buttons_sim_def.h new file mode 100644 index 000000000000..edf1fdafc106 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/buttons_sim_def.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from buttons_sim module + * and holds information about generated button presses sequence. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} buttons_sim_def_include_once; + +const static uint16_t simulated_key_sequence[] = { + KEY_ID(0x00, 0x11), /* N */ + KEY_ID(0x00, 0x12), /* O */ + KEY_ID(0x00, 0x15), /* R */ + KEY_ID(0x00, 0x07), /* D */ + KEY_ID(0x00, 0x0C), /* I */ + KEY_ID(0x00, 0x06), /* C */ + KEY_ID(0x00, 0x2C), /* spacebar */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/click_detector_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/click_detector_def.h new file mode 100644 index 000000000000..f8dadda3b84a --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/click_detector_def.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +/* This configuration file is included only once from click_detector module + * and holds information about click detector configuration. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} click_detector_def_include_once; + +static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL + { + .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, + .consume_button_event = false, + }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keyboard_leds_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keyboard_leds_def.h new file mode 100644 index 000000000000..9f3a247783aa --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keyboard_leds_def.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keyboard_leds.h" + +/* This configuration file is included only once from hid_state module and holds + * information about LEDs associated with HID keyboard LEDs report. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keyboard_leds_def_include_once; + +static const struct led_effect keyboard_led_on = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)); +static const struct led_effect keyboard_led_off = LED_EFFECT_LED_OFF(); + +/* Map HID keyboard LEDs to application LED IDs. */ +static const uint8_t keyboard_led_map[] = { +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keyboard_leds_def_keyboard.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keyboard_leds_def_keyboard.h new file mode 100644 index 000000000000..b558a3816666 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keyboard_leds_def_keyboard.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keyboard_leds.h" + +/* This configuration file is included only once from hid_state module and holds + * information about LEDs associated with HID keyboard LEDs report. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keyboard_leds_def_include_once; + +/* On the nRF54L10 SoC, you can only use the **GPIO1** port for PWM hardware peripheral output. + * Because of that, on the DK PCA10156 revision v0.8.1, **LED 0** and **LED 2** cannot be used for + * PWM output. + * + * You can still use these LEDs with the PWM LED driver, but you must set the LED color to + * `LED_COLOR(255, 255, 255)` or `LED_COLOR(0, 0, 0)`. This ensures the PWM peripheral is not + * used for the mentioned LEDs. + */ +static const struct led_effect keyboard_led_on = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)); +static const struct led_effect keyboard_led_off = LED_EFFECT_LED_OFF(); + +/* Map HID keyboard LEDs to application LED IDs. */ +static const uint8_t keyboard_led_map[] = { + [HID_KEYBOARD_LEDS_NUM_LOCK] = 2, + [HID_KEYBOARD_LEDS_CAPS_LOCK] = LED_UNAVAILABLE, + [HID_KEYBOARD_LEDS_SCROLL_LOCK] = LED_UNAVAILABLE, + [HID_KEYBOARD_LEDS_COMPOSE] = LED_UNAVAILABLE, + [HID_KEYBOARD_LEDS_KANA] = LED_UNAVAILABLE, +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keymap_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keymap_def.h new file mode 100644 index 000000000000..cf649d526696 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keymap_def.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keymap.h" +#include + +/* This configuration file is included only once from hid_state module and holds + * information about mapping between buttons and generated reports. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keymap_def_include_once; + +/* + * HID keymap. The Consumer Control keys are defined in section 15 of + * the HID Usage Tables document under the following URL: + * https://www.usb.org/sites/default/files/hut1_12.pdf + */ +static const struct hid_keymap hid_keymap[] = { + /* Intentionally left empty. nRF54L DK by default uses all buttons only to control + * generating motion. + */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keymap_def_keyboard.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keymap_def_keyboard.h new file mode 100644 index 000000000000..5d0e77c34c57 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/hid_keymap_def_keyboard.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hid_keymap.h" +#include + +/* This configuration file is included only once from hid_state module and holds + * information about mapping between buttons and generated reports. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} hid_keymap_def_include_once; + +/* + * HID keymap. The Consumer Control keys are defined in section 15 of + * the HID Usage Tables document under the following URL: + * https://www.usb.org/sites/default/files/hut1_12.pdf + */ +static const struct hid_keymap hid_keymap[] = { + { KEY_ID(0x00, 0x00), 0x0004, REPORT_ID_KEYBOARD_KEYS }, /* A */ + { KEY_ID(0x00, 0x01), 0x0005, REPORT_ID_KEYBOARD_KEYS }, /* B */ + { KEY_ID(0x00, 0x02), 0x00E1, REPORT_ID_KEYBOARD_KEYS }, /* left shift */ + + { KEY_ID(0x00, 0x04), 0x0004, REPORT_ID_KEYBOARD_KEYS }, /* A */ + { KEY_ID(0x00, 0x05), 0x0005, REPORT_ID_KEYBOARD_KEYS }, /* B */ + { KEY_ID(0x00, 0x06), 0x0006, REPORT_ID_KEYBOARD_KEYS }, /* C */ + { KEY_ID(0x00, 0x07), 0x0007, REPORT_ID_KEYBOARD_KEYS }, /* D */ + { KEY_ID(0x00, 0x08), 0x0008, REPORT_ID_KEYBOARD_KEYS }, /* E */ + { KEY_ID(0x00, 0x09), 0x0009, REPORT_ID_KEYBOARD_KEYS }, /* F */ + { KEY_ID(0x00, 0x0A), 0x000A, REPORT_ID_KEYBOARD_KEYS }, /* G */ + { KEY_ID(0x00, 0x0B), 0x000B, REPORT_ID_KEYBOARD_KEYS }, /* H */ + { KEY_ID(0x00, 0x0C), 0x000C, REPORT_ID_KEYBOARD_KEYS }, /* I */ + { KEY_ID(0x00, 0x0D), 0x000D, REPORT_ID_KEYBOARD_KEYS }, /* J */ + { KEY_ID(0x00, 0x0E), 0x000E, REPORT_ID_KEYBOARD_KEYS }, /* K */ + { KEY_ID(0x00, 0x0F), 0x000F, REPORT_ID_KEYBOARD_KEYS }, /* L */ + { KEY_ID(0x00, 0x10), 0x0010, REPORT_ID_KEYBOARD_KEYS }, /* M */ + { KEY_ID(0x00, 0x11), 0x0011, REPORT_ID_KEYBOARD_KEYS }, /* N */ + { KEY_ID(0x00, 0x12), 0x0012, REPORT_ID_KEYBOARD_KEYS }, /* O */ + { KEY_ID(0x00, 0x13), 0x0013, REPORT_ID_KEYBOARD_KEYS }, /* P */ + { KEY_ID(0x00, 0x14), 0x0014, REPORT_ID_KEYBOARD_KEYS }, /* Q */ + { KEY_ID(0x00, 0x15), 0x0015, REPORT_ID_KEYBOARD_KEYS }, /* R */ + { KEY_ID(0x00, 0x16), 0x0016, REPORT_ID_KEYBOARD_KEYS }, /* S */ + { KEY_ID(0x00, 0x17), 0x0017, REPORT_ID_KEYBOARD_KEYS }, /* T */ + { KEY_ID(0x00, 0x18), 0x0018, REPORT_ID_KEYBOARD_KEYS }, /* U */ + { KEY_ID(0x00, 0x19), 0x0019, REPORT_ID_KEYBOARD_KEYS }, /* V */ + { KEY_ID(0x00, 0x1A), 0x001A, REPORT_ID_KEYBOARD_KEYS }, /* W */ + { KEY_ID(0x00, 0x1B), 0x001B, REPORT_ID_KEYBOARD_KEYS }, /* X */ + { KEY_ID(0x00, 0x1C), 0x001C, REPORT_ID_KEYBOARD_KEYS }, /* Y */ + { KEY_ID(0x00, 0x1D), 0x001D, REPORT_ID_KEYBOARD_KEYS }, /* Z */ + + { KEY_ID(0x00, 0x2C), 0x002C, REPORT_ID_KEYBOARD_KEYS }, /* spacebar */ +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/app.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/app.overlay new file mode 100644 index 000000000000..fb3d8b2c163e --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/app.overlay @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Application does not use cpuflpr core. Assign whole RRAM to cpuapp. */ +&cpuapp_rram { + reg = < 0x0 DT_SIZE_K(1022) >; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/mcuboot_private.pem b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/mcuboot_private.pem new file mode 100644 index 000000000000..de292473fd7f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/mcuboot_private.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEICxK09VLg3mY0uIQ62fgaMuz1qjOfxMt+XnWxwPCwkFX +-----END PRIVATE KEY----- diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem new file mode 100644 index 000000000000..30175dd00505 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem @@ -0,0 +1,3 @@ +-----BEGIN PRIVATE KEY----- +MC4CAQAwBQYDK2VwBCIEIImWgCnsM8sTv2qWYujZjhofdi6OtjD7SuVksrCHztRP +-----END PRIVATE KEY----- diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj.conf new file mode 100644 index 000000000000..993b183f24ba --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj.conf @@ -0,0 +1,42 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_MAIN_STACK_SIZE=10240 +CONFIG_BOOT_MAX_IMG_SECTORS=256 +CONFIG_BOOT_BOOTSTRAP=n + +CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_FLASH=y +CONFIG_FPROTECT=y + +# Reduce memory consumption +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n +CONFIG_SYS_CLOCK_EXISTS=n +CONFIG_CLOCK_CONTROL=n +CONFIG_NRF_GRTC_TIMER=n +CONFIG_NRF_GRTC_START_SYSCOUNTER=n +CONFIG_SPI_NOR=n +CONFIG_GPIO=n +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_USE_SEGGER_RTT=n + +# Use minimal C library instead of the Picolib +CONFIG_MINIMAL_LIBC=y + +# Improve debugging experience by disabling reset on fatal error +CONFIG_RESET_ON_FATAL_ERROR=n + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_fast_pair.conf new file mode 100644 index 000000000000..00ef818d02ef --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_fast_pair.conf @@ -0,0 +1,43 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_MAIN_STACK_SIZE=10240 + +CONFIG_BOOT_MAX_IMG_SECTORS=256 +CONFIG_BOOT_BOOTSTRAP=n + +CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_FLASH=y +CONFIG_FPROTECT=y + +# Reduce memory consumption +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n +CONFIG_SYS_CLOCK_EXISTS=n +CONFIG_CLOCK_CONTROL=n +CONFIG_NRF_GRTC_TIMER=n +CONFIG_NRF_GRTC_START_SYSCOUNTER=n +CONFIG_SPI_NOR=n +CONFIG_GPIO=n +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_USE_SEGGER_RTT=n + +# Use minimal C library instead of the Picolib +CONFIG_MINIMAL_LIBC=y + +# Improve debugging experience by disabling reset on fatal error +CONFIG_RESET_ON_FATAL_ERROR=n + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_keyboard.conf new file mode 100644 index 000000000000..00ef818d02ef --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_keyboard.conf @@ -0,0 +1,43 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_MAIN_STACK_SIZE=10240 + +CONFIG_BOOT_MAX_IMG_SECTORS=256 +CONFIG_BOOT_BOOTSTRAP=n + +CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_FLASH=y +CONFIG_FPROTECT=y + +# Reduce memory consumption +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n +CONFIG_SYS_CLOCK_EXISTS=n +CONFIG_CLOCK_CONTROL=n +CONFIG_NRF_GRTC_TIMER=n +CONFIG_NRF_GRTC_START_SYSCOUNTER=n +CONFIG_SPI_NOR=n +CONFIG_GPIO=n +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_USE_SEGGER_RTT=n + +# Use minimal C library instead of the Picolib +CONFIG_MINIMAL_LIBC=y + +# Improve debugging experience by disabling reset on fatal error +CONFIG_RESET_ON_FATAL_ERROR=n + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_release.conf new file mode 100644 index 000000000000..1a060f1dd67f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/images/mcuboot/prj_release.conf @@ -0,0 +1,42 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_SIZE_OPTIMIZATIONS=y + +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_MAIN_STACK_SIZE=10240 + +CONFIG_BOOT_MAX_IMG_SECTORS=256 +CONFIG_BOOT_BOOTSTRAP=n + +CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_FLASH=y +CONFIG_FPROTECT=y + +CONFIG_RESET_ON_FATAL_ERROR=y + +# Reduce memory consumption +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n +CONFIG_SYS_CLOCK_EXISTS=n +CONFIG_CLOCK_CONTROL=n +CONFIG_NRF_GRTC_TIMER=n +CONFIG_NRF_GRTC_START_SYSCOUNTER=n +CONFIG_SPI_NOR=n +CONFIG_GPIO=n +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_USE_SEGGER_RTT=n + +# Use minimal C library instead of the Picolib +CONFIG_MINIMAL_LIBC=y + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/led_state_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/led_state_def.h new file mode 100644 index 000000000000..c8d59462f157 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/led_state_def.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "led_state.h" +#include + +/* This configuration file is included only once from led_state module and holds + * information about LED effect associated with each state. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} led_state_def_include_once; + + +/* Map function to LED ID */ +static const uint8_t led_map[LED_ID_COUNT] = { + [LED_ID_SYSTEM_STATE] = 0, + [LED_ID_PEER_STATE] = 1 +}; + +/* On the nRF54L10 SoC, you can only use the **GPIO1** port for PWM hardware peripheral output. + * Because of that, on the DK PCA10156 revision v0.8.1 **LED 0** and **LED 2** cannot be used + * for PWM output. + * + * You can still use these LEDs with the PWM LED driver, but you must set the LED color to + * `LED_COLOR(255, 255, 255)` or `LED_COLOR(0, 0, 0)`. This ensures the PWM peripheral is not + * used for the mentioned LEDs. + */ + +static const struct led_effect led_system_state_effect[LED_SYSTEM_STATE_COUNT] = { + [LED_SYSTEM_STATE_IDLE] = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)), + [LED_SYSTEM_STATE_CHARGING] = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)), + [LED_SYSTEM_STATE_ERROR] = LED_EFFECT_LED_BLINK(200, LED_COLOR(255, 255, 255)), +}; + +static const struct led_effect led_peer_state_effect[LED_PEER_COUNT][LED_PEER_STATE_COUNT] = { + {[LED_PEER_STATE_DISCONNECTED] = LED_EFFECT_LED_OFF(), + [LED_PEER_STATE_CONNECTED] = LED_EFFECT_LED_ON(LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_PEER_SEARCH] = LED_EFFECT_LED_BREATH(1000, LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_CONFIRM_SELECT] = LED_EFFECT_LED_BLINK(50, LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_CONFIRM_ERASE] = LED_EFFECT_LED_BLINK(25, LED_COLOR(100, 100, 100)), + [LED_PEER_STATE_ERASE_ADV] = LED_EFFECT_LED_BREATH(100, LED_COLOR(100, 100, 100)), + }, +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static.yml new file mode 100644 index 000000000000..80b4932b754d --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static.yml @@ -0,0 +1,51 @@ +app: + address: 0x7800 + region: flash_primary + size: 0x79800 +mcuboot: + address: 0x0 + region: flash_primary + size: 0x7000 +mcuboot_pad: + address: 0x7000 + region: flash_primary + size: 0x800 +mcuboot_primary: + address: 0x7000 + orig_span: &id001 + - app + - mcuboot_pad + region: flash_primary + size: 0x7a000 + span: *id001 +mcuboot_primary_app: + address: 0x7800 + orig_span: &id002 + - app + region: flash_primary + size: 0x79800 + span: *id002 +mcuboot_secondary: + address: 0x81000 + orig_span: &id003 + - mcuboot_secondary_pad + - mcuboot_secondary_app + region: flash_primary + size: 0x7a000 + span: *id003 +mcuboot_secondary_pad: + region: flash_primary + address: 0x81000 + size: 0x800 +mcuboot_secondary_app: + region: flash_primary + address: 0x81800 + size: 0x79800 +settings_storage: + address: 0xfb000 + region: flash_primary + size: 0x4000 +unused: + address: 0xff000 + region: flash_primary + size: 0x800 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_fast_pair.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_fast_pair.yml new file mode 100644 index 000000000000..8199838ee965 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_fast_pair.yml @@ -0,0 +1,51 @@ +app: + address: 0x7800 + region: flash_primary + size: 0x78800 +mcuboot: + address: 0x0 + region: flash_primary + size: 0x7000 +mcuboot_pad: + address: 0x7000 + region: flash_primary + size: 0x800 +mcuboot_primary: + address: 0x7000 + orig_span: &id001 + - app + - mcuboot_pad + region: flash_primary + size: 0x79000 + span: *id001 +mcuboot_primary_app: + address: 0x7800 + orig_span: &id002 + - app + region: flash_primary + size: 0x78800 + span: *id002 +mcuboot_secondary: + address: 0x80000 + orig_span: &id003 + - mcuboot_secondary_pad + - mcuboot_secondary_app + region: flash_primary + size: 0x79000 + span: *id003 +mcuboot_secondary_pad: + region: flash_primary + address: 0x80000 + size: 0x800 +mcuboot_secondary_app: + region: flash_primary + address: 0x80800 + size: 0x78800 +settings_storage: + address: 0xf9000 + region: flash_primary + size: 0x6000 +bt_fast_pair: + address: 0xff000 + region: flash_primary + size: 0x800 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_keyboard.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_keyboard.yml new file mode 100644 index 000000000000..80b4932b754d --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_keyboard.yml @@ -0,0 +1,51 @@ +app: + address: 0x7800 + region: flash_primary + size: 0x79800 +mcuboot: + address: 0x0 + region: flash_primary + size: 0x7000 +mcuboot_pad: + address: 0x7000 + region: flash_primary + size: 0x800 +mcuboot_primary: + address: 0x7000 + orig_span: &id001 + - app + - mcuboot_pad + region: flash_primary + size: 0x7a000 + span: *id001 +mcuboot_primary_app: + address: 0x7800 + orig_span: &id002 + - app + region: flash_primary + size: 0x79800 + span: *id002 +mcuboot_secondary: + address: 0x81000 + orig_span: &id003 + - mcuboot_secondary_pad + - mcuboot_secondary_app + region: flash_primary + size: 0x7a000 + span: *id003 +mcuboot_secondary_pad: + region: flash_primary + address: 0x81000 + size: 0x800 +mcuboot_secondary_app: + region: flash_primary + address: 0x81800 + size: 0x79800 +settings_storage: + address: 0xfb000 + region: flash_primary + size: 0x4000 +unused: + address: 0xff000 + region: flash_primary + size: 0x800 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_release.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_release.yml new file mode 100644 index 000000000000..80b4932b754d --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/pm_static_release.yml @@ -0,0 +1,51 @@ +app: + address: 0x7800 + region: flash_primary + size: 0x79800 +mcuboot: + address: 0x0 + region: flash_primary + size: 0x7000 +mcuboot_pad: + address: 0x7000 + region: flash_primary + size: 0x800 +mcuboot_primary: + address: 0x7000 + orig_span: &id001 + - app + - mcuboot_pad + region: flash_primary + size: 0x7a000 + span: *id001 +mcuboot_primary_app: + address: 0x7800 + orig_span: &id002 + - app + region: flash_primary + size: 0x79800 + span: *id002 +mcuboot_secondary: + address: 0x81000 + orig_span: &id003 + - mcuboot_secondary_pad + - mcuboot_secondary_app + region: flash_primary + size: 0x7a000 + span: *id003 +mcuboot_secondary_pad: + region: flash_primary + address: 0x81000 + size: 0x800 +mcuboot_secondary_app: + region: flash_primary + address: 0x81800 + size: 0x79800 +settings_storage: + address: 0xfb000 + region: flash_primary + size: 0x4000 +unused: + address: 0xff000 + region: flash_primary + size: 0x800 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/port_state_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/port_state_def.h new file mode 100644 index 000000000000..1b4906e1477f --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/port_state_def.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include + +#include "port_state.h" + +/* This configuration file is included only once from board module and holds + * information about default pin states set while board is on and off. + */ + +/* This structure enforces the header file is included only once in the build. + * Violating this requirement triggers a multiple definition error at link time. + */ +const struct {} port_state_def_include_once; + + +static const struct port_state port_state_on[] = { +}; + +static const struct port_state port_state_off[] = { +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj.conf new file mode 100644 index 000000000000..3b6d605ae23b --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj.conf @@ -0,0 +1,118 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# Application Configuration + +CONFIG_DESKTOP_INIT_LOG_MOTION_EVENT=n +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_EVENT=n +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_SENT_EVENT=n +CONFIG_CAF_INIT_LOG_KEEP_ALIVE_EVENTS=n + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE=y +CONFIG_DESKTOP_DEVICE_PID=0x52DE +CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE=y + +CONFIG_DESKTOP_MOTION_BUTTONS_ENABLE=y +CONFIG_DESKTOP_MOTION_BUTTONS_UP_KEY_ID=0 +CONFIG_DESKTOP_MOTION_BUTTONS_DOWN_KEY_ID=3 +CONFIG_DESKTOP_MOTION_BUTTONS_LEFT_KEY_ID=2 +CONFIG_DESKTOP_MOTION_BUTTONS_RIGHT_KEY_ID=1 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +CONFIG_DESKTOP_BLE_USE_DEFAULT_ID=y + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=10 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y +CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=512 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=y +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y + +CONFIG_REBOOT=y + +CONFIG_SPEED_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +CONFIG_BT_MAX_PAIRED=2 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=4 +CONFIG_BT_CONN_TX_MAX=4 + +CONFIG_STREAM_FLASH=y +CONFIG_IMG_MANAGER=y +CONFIG_MCUBOOT_IMG_MANAGER=y + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 + +################################################################################ + +CONFIG_ASSERT=y +CONFIG_ASSERT_LEVEL=2 + +# nRF54L DK uses UART for logs. +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_LOG=y +CONFIG_LOG_BACKEND_UART=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP=n +CONFIG_LOG_MODE_DEFERRED=y +CONFIG_LOG_PRINTK=y +CONFIG_LOG_BUFFER_SIZE=4096 +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=1024 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_fast_pair.conf new file mode 100644 index 000000000000..01cb7d0e22fe --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_fast_pair.conf @@ -0,0 +1,154 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# debug: Fast Pair version +# +# This debug build type configuration enables Fast Pair support. +# The build type configuration supports both configuration channel and MCUmgr DFU transports. +# +# Application Configuration + +CONFIG_DESKTOP_INIT_LOG_MOTION_EVENT=n +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_EVENT=n +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_SENT_EVENT=n +CONFIG_CAF_INIT_LOG_KEEP_ALIVE_EVENTS=n + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE=y +CONFIG_DESKTOP_DEVICE_PID=0x52DE +CONFIG_DESKTOP_DEVICE_GENERATION="FastPair" +CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE=y + +CONFIG_DESKTOP_MOTION_BUTTONS_ENABLE=y +CONFIG_DESKTOP_MOTION_BUTTONS_UP_KEY_ID=0 +CONFIG_DESKTOP_MOTION_BUTTONS_DOWN_KEY_ID=3 +CONFIG_DESKTOP_MOTION_BUTTONS_LEFT_KEY_ID=2 +CONFIG_DESKTOP_MOTION_BUTTONS_RIGHT_KEY_ID=1 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +CONFIG_DESKTOP_DFU_MCUMGR_ENABLE=y +CONFIG_CAF_INIT_LOG_BLE_SMP_TRANSFER_EVENTS=n + +# Align advertising intervals with Fast Pair specification. +CONFIG_CAF_BLE_ADV_FAST_INT_MIN=0x0040 +CONFIG_CAF_BLE_ADV_FAST_INT_MAX=0x0060 +CONFIG_CAF_BLE_ADV_SLOW_INT_MIN=0x0060 +CONFIG_CAF_BLE_ADV_SLOW_INT_MAX=0x0080 + +# Disable filter accept list to allow for multiple bonds for a given local identity. +CONFIG_CAF_BLE_ADV_FILTER_ACCEPT_LIST=n +CONFIG_CAF_BLE_STATE_MAX_LOCAL_ID_BONDS=3 + +# Align the advertised TX power with Fast Pair expectations. +CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL=-11 + +CONFIG_DESKTOP_BLE_USE_DEFAULT_ID=y + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=30 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y +CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=2048 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=y +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y + +CONFIG_REBOOT=y + +CONFIG_SPEED_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +# Enable MCUmgr Bluetooth transport and increase Bluetooth buffers to speed up DFU image transfer. +CONFIG_MCUMGR_TRANSPORT_BT=y +CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW_ENCRYPT=y +CONFIG_MCUMGR_GRP_IMG_VERSION_CMP_USE_BUILD_NUMBER=y + +CONFIG_IMG_MANAGER=y +CONFIG_MCUBOOT_IMG_MANAGER=y + +CONFIG_MCUMGR_GRP_IMG_REJECT_DIRECT_XIP_MISMATCHED_SLOT=y + +CONFIG_BT_L2CAP_TX_MTU=260 +CONFIG_BT_BUF_ACL_RX_SIZE=264 + +CONFIG_BT_MAX_PAIRED=4 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=4 +CONFIG_BT_CONN_TX_MAX=4 + +CONFIG_BT_FAST_PAIR=y +CONFIG_BT_FAST_PAIR_USE_CASE_MOUSE=y +CONFIG_BT_FAST_PAIR_LOG_LEVEL_DBG=y +CONFIG_BT_PRIVACY=y + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 + +################################################################################ + +CONFIG_ASSERT=y +CONFIG_ASSERT_LEVEL=2 + +# nRF54L DK uses UART for logs. +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_LOG=y +CONFIG_LOG_BACKEND_UART=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP=n +CONFIG_LOG_MODE_DEFERRED=y +CONFIG_LOG_PRINTK=y +CONFIG_LOG_BUFFER_SIZE=4096 +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=1024 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_keyboard.conf new file mode 100644 index 000000000000..f5fbda0cb422 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_keyboard.conf @@ -0,0 +1,123 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# debug: Keyboard version +# +# This debug build type configuration acts as a keyboard. +# +# Application Configuration + +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_EVENT=n +CONFIG_DESKTOP_INIT_LOG_HID_REPORT_SENT_EVENT=n +CONFIG_CAF_INIT_LOG_KEEP_ALIVE_EVENTS=n + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_KEYBOARD=y +CONFIG_DESKTOP_DEVICE_PID=0x52DD +CONFIG_DESKTOP_HID_BOOT_INTERFACE_KEYBOARD=y +CONFIG_DESKTOP_HID_STATE_HID_KEYMAP_DEF_PATH="hid_keymap_def_keyboard.h" +CONFIG_DESKTOP_HID_STATE_HID_KEYBOARD_LEDS_DEF_PATH="hid_keyboard_leds_def_keyboard.h" +CONFIG_DESKTOP_HID_REPORT_EXPIRATION=10000 +CONFIG_DESKTOP_HID_EVENT_QUEUE_SIZE=60 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +CONFIG_DESKTOP_BUTTONS_SIM_ENABLE=y +CONFIG_DESKTOP_BUTTONS_SIM_INTERVAL=100 +CONFIG_DESKTOP_BUTTONS_SIM_LOOP_FOREVER=y +CONFIG_DESKTOP_BUTTONS_SIM_TRIGGER_KEY_ID=0x03 + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_USE_DEFAULT_ID=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=10 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y +CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=4096 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=y +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y +CONFIG_REBOOT=y + +CONFIG_SPEED_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +CONFIG_BT_MAX_PAIRED=2 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=6 +CONFIG_BT_CONN_TX_MAX=6 + +CONFIG_STREAM_FLASH=y +CONFIG_IMG_MANAGER=y +CONFIG_MCUBOOT_IMG_MANAGER=y + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 + +################################################################################ + +CONFIG_ASSERT=y +CONFIG_ASSERT_LEVEL=2 + +# nRF54L DK uses UART for logs. +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_LOG=y +CONFIG_LOG_BACKEND_UART=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP=n +CONFIG_LOG_MODE_DEFERRED=y +CONFIG_LOG_PRINTK=y +CONFIG_LOG_BUFFER_SIZE=4096 +CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=1024 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_release.conf new file mode 100644 index 000000000000..3708b59a7906 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/prj_release.conf @@ -0,0 +1,100 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ +# Application Configuration + +CONFIG_DESKTOP_ROLE_HID_PERIPHERAL=y +CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE=y +CONFIG_DESKTOP_DEVICE_PID=0x52DE +CONFIG_DESKTOP_HID_BOOT_INTERFACE_MOUSE=y + +CONFIG_DESKTOP_MOTION_BUTTONS_ENABLE=y +CONFIG_DESKTOP_MOTION_BUTTONS_UP_KEY_ID=0 +CONFIG_DESKTOP_MOTION_BUTTONS_DOWN_KEY_ID=3 +CONFIG_DESKTOP_MOTION_BUTTONS_LEFT_KEY_ID=2 +CONFIG_DESKTOP_MOTION_BUTTONS_RIGHT_KEY_ID=1 + +CONFIG_CAF_BUTTONS=y +CONFIG_CAF_BUTTONS_POLARITY_INVERSED=y +CONFIG_CAF_BUTTONS_PM_KEEP_ALIVE=n + +CONFIG_CAF_CLICK_DETECTOR=y + +CONFIG_CAF_LEDS=y + +CONFIG_DESKTOP_BLE_PEER_CONTROL=y +CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON=0x0000 +CONFIG_DESKTOP_BLE_PEER_ERASE_ON_START=y + +CONFIG_DESKTOP_BLE_SECURITY_FAIL_TIMEOUT_S=10 +CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK=y + +CONFIG_DESKTOP_WATCHDOG_ENABLE=y +CONFIG_DESKTOP_FAILSAFE_ENABLE=y + +CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE=y +CONFIG_DESKTOP_CONFIG_CHANNEL_OUT_REPORT=y +CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE=y + +################################################################################ +# Zephyr Configuration + +CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=1536 +CONFIG_ISR_STACK_SIZE=1536 +CONFIG_MAIN_STACK_SIZE=840 +CONFIG_BT_RX_STACK_SIZE=2048 +CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y +CONFIG_BT_HCI_TX_STACK_SIZE=1536 + +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +CONFIG_NUM_COOP_PRIORITIES=10 +CONFIG_NUM_PREEMPT_PRIORITIES=11 + +CONFIG_HEAP_MEM_POOL_SIZE=512 + +CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000 +CONFIG_SYSTEM_CLOCK_NO_WAIT=y + +CONFIG_HW_STACK_PROTECTION=n +CONFIG_RESET_ON_FATAL_ERROR=n + +CONFIG_GPIO=y + +CONFIG_SERIAL=n +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_USE_SEGGER_RTT=n + +CONFIG_REBOOT=y + +CONFIG_SPEED_OPTIMIZATIONS=y + +CONFIG_PWM=y + +CONFIG_LED=y +CONFIG_LED_PWM=y + +CONFIG_BT_MAX_PAIRED=2 +CONFIG_BT_ID_MAX=3 + +CONFIG_BT_CTLR_SDC_LLPM=y +CONFIG_BT_CTLR_TX_PWR_DYNAMIC_CONTROL=y +CONFIG_BT_ATT_TX_COUNT=4 +CONFIG_BT_CONN_TX_MAX=4 + +CONFIG_STREAM_FLASH=y +CONFIG_IMG_MANAGER=y +CONFIG_MCUBOOT_IMG_MANAGER=y + +# External FLASH is not used by the application. Disable the driver. +CONFIG_SPI_NOR=n + +# Assign RRAM write buffer size to ensure short write slots. Trying to allocate long write slots +# while maintaining a BLE connection with short interval and no connection latency may lead to +# timeouts in flash_sync_mpsl. +CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE=8 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild.conf new file mode 100644 index 000000000000..75c652858410 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild.conf @@ -0,0 +1,13 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ + +SB_CONFIG_BOOTLOADER_MCUBOOT=y +SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y +SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_fast_pair.conf new file mode 100644 index 000000000000..ce44ce83fb47 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_fast_pair.conf @@ -0,0 +1,14 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ + +SB_CONFIG_BT_FAST_PAIR=y +SB_CONFIG_BOOTLOADER_MCUBOOT=y +SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y +SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private_fast_pair.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_keyboard.conf new file mode 100644 index 000000000000..75c652858410 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_keyboard.conf @@ -0,0 +1,13 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ + +SB_CONFIG_BOOTLOADER_MCUBOOT=y +SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y +SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_release.conf new file mode 100644 index 000000000000..75c652858410 --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l10_cpuapp/sysbuild_release.conf @@ -0,0 +1,13 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +################################################################################ + +SB_CONFIG_BOOTLOADER_MCUBOOT=y +SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y +SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app.overlay index a773a2afeccd..590035ad61b6 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app.overlay +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app.overlay @@ -4,114 +4,4 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/* For nRF54L, watchdog status is disabled by default. Needs to be enabled in DTS overlay. */ -&wdt31 { - status = "okay"; -}; - -/* Application does not use cpuflpr core. Assign whole RRAM to cpuapp. */ -&cpuapp_rram { - reg = < 0x0 DT_SIZE_K(1524) >; -}; - -/ { - /* Disable pwmleds and redefine them to align configuration with CAF LEDs requirements. - * The configuration needs to match the used board revision. - */ - /delete-node/ pwmleds; - - pwmleds0 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led0: led_pwm_0 { - status = "okay"; - pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; - label = "LED System State"; - }; - }; - - pwmleds1 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led1: led_pwm_1 { - status = "okay"; - pwms = <&pwm21 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; - label = "LED Conn State"; - }; - }; - - pwmleds2 { - compatible = "pwm-leds"; - status = "okay"; - - pwm_led2: led_pwm_2 { - status = "okay"; - pwms = <&pwm22 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; - label = "LED Num Lock"; - }; - }; -}; - -&pwm20 { - status = "okay"; - pinctrl-0 = <&pwm20_default_alt>; - pinctrl-1 = <&pwm20_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm21 { - status = "okay"; - pinctrl-0 = <&pwm21_default_alt>; - pinctrl-1 = <&pwm21_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pwm22 { - status = "okay"; - pinctrl-0 = <&pwm22_default_alt>; - pinctrl-1 = <&pwm22_sleep_alt>; - pinctrl-names = "default", "sleep"; -}; - -&pinctrl { - pwm20_default_alt: pwm20_default_alt { - group1 { - psels = ; - }; - }; - - pwm20_sleep_alt: pwm20_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm21_default_alt: pwm21_default_alt { - group1 { - psels = ; - }; - }; - - pwm21_sleep_alt: pwm21_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; - - pwm22_default_alt: pwm22_default_alt { - group1 { - psels = ; - }; - }; - - pwm22_sleep_alt: pwm22_sleep_alt { - group1 { - psels = ; - low-power-enable; - }; - }; -}; +#include "app_common.dtsi" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app_common.dtsi b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app_common.dtsi new file mode 100644 index 000000000000..db42a3e6b3fb --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app_common.dtsi @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Application does not use cpuflpr core. Assign whole RRAM to cpuapp. */ +&cpuapp_rram { + reg = < 0x0 DT_SIZE_K(1524) >; +}; + +/ { + /* Disable pwmleds and redefine them to align configuration with CAF LEDs requirements. + * The configuration needs to match the used board revision. + */ + /delete-node/ pwmleds; + + pwmleds0 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led0: led_pwm_0 { + status = "okay"; + pwms = <&pwm20 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED System State"; + }; + }; + + pwmleds1 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led1: led_pwm_1 { + status = "okay"; + pwms = <&pwm21 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED Conn State"; + }; + }; + + pwmleds2 { + compatible = "pwm-leds"; + status = "okay"; + + pwm_led2: led_pwm_2 { + status = "okay"; + pwms = <&pwm22 0 PWM_MSEC(20) PWM_POLARITY_NORMAL>; + label = "LED Num Lock"; + }; + }; +}; + +&pwm20 { + status = "okay"; + pinctrl-0 = <&pwm20_default_alt>; + pinctrl-1 = <&pwm20_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm21 { + status = "okay"; + pinctrl-0 = <&pwm21_default_alt>; + pinctrl-1 = <&pwm21_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pwm22 { + status = "okay"; + pinctrl-0 = <&pwm22_default_alt>; + pinctrl-1 = <&pwm22_sleep_alt>; + pinctrl-names = "default", "sleep"; +}; + +&pinctrl { + pwm20_default_alt: pwm20_default_alt { + group1 { + psels = ; + }; + }; + + pwm20_sleep_alt: pwm20_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm21_default_alt: pwm21_default_alt { + group1 { + psels = ; + }; + }; + + pwm21_sleep_alt: pwm21_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; + + pwm22_default_alt: pwm22_default_alt { + group1 { + psels = ; + }; + }; + + pwm22_sleep_alt: pwm22_sleep_alt { + group1 { + psels = ; + low-power-enable; + }; + }; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app_release.overlay b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app_release.overlay new file mode 100644 index 000000000000..cba8d3d84b6b --- /dev/null +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/app_release.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "app_common.dtsi" + +/* For nRF54L, watchdog status is disabled by default. Needs to be enabled in DTS overlay. */ +&wdt31 { + status = "okay"; +}; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/click_detector_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/click_detector_def.h index 38a3fee1443b..32dc4796effa 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/click_detector_def.h +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/click_detector_def.h @@ -16,8 +16,10 @@ const struct {} click_detector_def_include_once; static const struct click_detector_config click_detector_config[] = { +#if CONFIG_DESKTOP_BLE_PEER_CONTROL { .key_id = CONFIG_DESKTOP_BLE_PEER_CONTROL_BUTTON, .consume_button_event = false, }, +#endif /* CONFIG_DESKTOP_BLE_PEER_CONTROL */ }; diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/hid_keyboard_leds_def_keyboard.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/hid_keyboard_leds_def_keyboard.h index f19e20336ca1..48229ad33dee 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/hid_keyboard_leds_def_keyboard.h +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/hid_keyboard_leds_def_keyboard.h @@ -20,7 +20,7 @@ const struct {} hid_keyboard_leds_def_include_once; * PWM output. * * You can still use these LEDs with the PWM LED driver, but you must set the LED color to - * ``LED_COLOR(255, 255, 255)`` or ``LED_COLOR(0, 0, 0)``. This ensures the PWM peripheral is not + * `LED_COLOR(255, 255, 255)` or `LED_COLOR(0, 0, 0)`. This ensures the PWM peripheral is not * used for the mentioned LEDs. */ static const struct led_effect keyboard_led_on = LED_EFFECT_LED_ON(LED_COLOR(255, 255, 255)); diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private.pem b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private.pem index ab184393c40e..84f6f8659829 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private.pem +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private.pem @@ -1,28 +1,3 @@ -----BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCi7guPvor+uIpE -XrWftc/csrYkozi6Sm7V7J9iXogTdNvD/745Vnz6p/z5UOQkWZDnPaQXxCtZeMM4 -QHJ6eTLg8OoLfLSl7gx2NyAyIz4w4VnqkpT9wOVo5imJVJ19F6AEbnv9N07Uq8Ph -bUMJWWFYSaObFlkCrETdU/OpuO927OIbsZEFnC4OlMSmjoASNsrcCD6ELyGhCpjU -tRiDb6paDHJKnKzVMT7bGza9tRveTuQscs6D+Vn4jB1+ChhmAcuHsVm7Yzsz99yZ -vQdLfLo4U6KKSPG/uvNX/jcBLLyohDy2h24q/+PXUTAWQ+PyVGXwuun6/hbYW1JM -XYNGfUh7AgMBAAECggEAM9l9ZGlG4njnx4o8Um8RjzJwNIic7OvzCbEbp7pdo5N0 -vJMOfkC/1STQpKbRc5/tNSmwpr+O7BI6ThR0WfVn8523XaB5/LQc0yIH5OzCRdvx -OW0cbQSN/SwB2+pJlB2IluByJMsNEzD2TS7wPnFrQSVuI1ShTvBzmdu1lzV7P2Tx -Hj/2ZG3FV5wRT4Hed3/tkBtIYBJNxHkW/BP31XX2ndq7/Apyo471Ef9RMRBQUhOP -7s+oYZJq95JUiMvlhGjg7Z7sShrvJ+VMMylBDUNK5fBCOBv70i21aXhz1Uf7i0l9 -751yfa5BQA10WigMOqgxC/1bpHOs4EVU+1fYG4rLwQKBgQDTk0CZ6ddTCdwRgsc2 -F1Bav+7c+AK+Sa+L58Mn7XOVjrL+cgenSHmcnEu/OTCq+xrOYV8ht1nf9uqfIg/p -wiVwTEcLj8cQS0t7cLtttGzk9UFPEynsnzdlgXoImx2iobgwIAaSShPAbZjFpwPc -7Ha1LwcfrSpa1s5Tm+NLTK5SRwKBgQDFI/jpTpWAtY6o+0g/KV363KdFIJ1XYE4+ -DxTZlxeGwR7OZhp84jo6cHG/ZK7YW6TKcmjriD5NyxD+w0aAiGKf4+xkpRbmCbYM -/+SUgIV4pZ9u9LzGTapx9cTtIBiEugsTpP64yKiXgLbjhDXVsdpnjGacnr/7AAz6 -wNEt0eeeLQKBgQCREyV25FtbeyVFdJE4y9+zemxFZGItLMWMf0zYMf/Ri1m9E1+g -GxgYhSuDYam3dBs7bJUYv2qHIf5bQ7X5qcCWMhd9HAd5asfFStWaMd+BV5KCsDdN -IxePKKsO/53giFeN2EfpQ5Yrmnro/M6vTA1Ry39s/wZN54Du37OJTHkzvQKBgEfZ -FWWKU2hmQwkJE8qZO/wqoPfLrCxlF/78JiArNdLR3XVhtvOey5Py2THk8ug9djCm -Q+DbdcGKabY/2xkLG86kFcqUdGUAUw4n0NnigUJ4MkQRBB/NvHnuFYhKc0UkPNc7 -Ae68it00dvMygyBPwoaMn/Ui0lsbKJ/W2CW34489AoGAfBF0VLVLLCXq0P3vtuiX -s+Bzi3UowjVI4+yBZdHpcm0pjzgiQmqoGWj0F3T5Jv8+5KVqfot9nWX3ePzS9zlJ -XmagOt6W5I3JNtARdqEJusspCWbOOUkOJT9CLIWZsN5Zf9XPAWaJ7UrVOhhuktv2 -33zKWryP8cRkCFzxjK08f/o= +MC4CAQAwBQYDK2VwBCIEIKLdbGhr2fWsJ8sHgZbPnO6RPGXoqq9ef064wxuB9L6h -----END PRIVATE KEY----- diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem index 69849c55a52d..1ad1fa7d5dc6 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/mcuboot_private_fast_pair.pem @@ -1,28 +1,3 @@ -----BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDcfrLhn9i+3T7+ -e30YQNSgfon86dSjVBFpShryxgRACr0P1QH9AznM04P1PQi+O37S2cfKZCXquHT0 -WipCmyywCQAo2Y2cLb0WJXNizRbgl3mEzRz8K1RjNvRFCYRgdbEKmA2w5x1/4nxQ -8T+BjIQOvZeSCjf75imowzyCLgOr9mLHI9I6QVhriIAYc7og3WeFs5w+NoTACeqq -hTsL0Uqe6aqITw1jrshSXPFrARYZhyK35UpCiMbjYxf2VsBSD26Q0GYdP9aGcfxp -tK/lceyqlybHrThqEHDaKR6F+ByO8YV6JCkuq8JylFzKpmF4oyBmuXMn1NAHBSst -nVDK9ZsJAgMBAAECggEAA8s3yXdKP813fSIzjrBl4C2RMv10e8txYcAFSu5SiiYN -Jvm1pyxwKQiuJXDzhq9oIRlfbUlwGBPsqjwnbD42hIBhJPLKU5i7X0dNbxKjjUF5 -9Smg0StvMCZUyV/Oq+i2fz3KxYOSf73uQOfHvZNE/epv8lKz8CT/jEBwuPYw+LtU -PP8koMV75R5l0XjpEt5Ko/xbDnxiBvBg2ZFQKpNFeLKLrN8wCPqo+uRW29p8dv7g -vn+ERz6JC5vNU2qKVuBplE4ZTc1zQVp5aa65/dZPmtXH3a3jMy8iTBLPvYZtoSVP -4HgNZI8dqrE5SMfbdWLsOYGTQgBXMhuEX2njP8/qgQKBgQD2vdOP9yqEwAt3hzWx -MMBuZIb6mqrUNuiZegSZsL4lvYhcfPNTpweTY8MWmDOblnIwemfhQijnERdlLLUY -2URnjR0wQ9WydhQg9rqh1rPkVAl2MxBlIHPBfwNzrKtDL+2DvY42y4IbbMn6A9gt -u2SalkRdc8pmX/hzGkUzbkriiQKBgQDkxMARsqzhqlf1Gdwl4JBp7UV7KmJldXxJ -9xzw9CH5qtyUlUA4RBYlgsa/vDhrrKKHDi5QZSGTOW2umEihY63kmVrQ2F0aJdNB -F7zNta30jb8qBSGpsnqbYy6QS6eRTVInwac0K9K8Q8PdOkXRm9d0xm20CVLCxZ8Z -M5ueLqDUgQKBgF7xmHDzSNcgFsl9q7ls6v8Pi6juzwEtx78W5qJFEkXvcoM0SWVN -Bms+nhkZo/Igp/vjfgl9rcOMHhZ+Z4kSQXIfKLYjxB0Rtpkgl5wiw8H+XE2xRIPF -QwWX3DosnRITZS+mRwzqrjvjVqzvwcWHMCUT4WacYauXDkEsQKiTrhkRAoGBAK7h -JP6ievxLjs+kRCGEaIFBS5Ma1HtA85FLYYlk5zAHiHXhHmWkztVAApUB2pOdNeVO -VuNIXAFCrnEAos0U+RK+lKkALTPW5IZnEgKjNuazEQabQ5+I+6cbi7Xsz50I4ZvY -suvz8DXRC8JrUIIqwurW4Xf2hJi2H6hRRk4G0RWBAoGBAOf7BEFMSH8QxPEiRmh4 -VcHLb3Otm7goH2tvqgzYu2Pzh42SwaT9JmTZkLX5IZI+MfUSuBmfxSFLfF2yfJqQ -uYa7hpU4w0wAgOq26HTiY2Ge3y8FTiasl4xuJ2VDBqZbvL8Zk0MW2MDtUwVMlm0A -ISrmLsUtfP8DvhZ0hIUPt+xl +MC4CAQAwBQYDK2VwBCIEIO0APC5gA+HO8JhqUJ0AK+fgF4MbbXhrfPmXlqU+LPhD -----END PRIVATE KEY----- diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj.conf index 7af817e28681..69e989f8bb05 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj.conf @@ -5,15 +5,16 @@ # CONFIG_SIZE_OPTIMIZATIONS=y -CONFIG_MAIN_STACK_SIZE=10240 -CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" +CONFIG_HW_STACK_PROTECTION=y +CONFIG_MAIN_STACK_SIZE=10240 CONFIG_BOOT_MAX_IMG_SECTORS=256 CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y # Reduce memory consumption CONFIG_BOOT_BANNER=n @@ -35,3 +36,7 @@ CONFIG_MINIMAL_LIBC=y # Improve debugging experience by disabling reset on fatal error CONFIG_RESET_ON_FATAL_ERROR=n + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_fast_pair.conf index 7af817e28681..68e256a10990 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_fast_pair.conf @@ -5,8 +5,9 @@ # CONFIG_SIZE_OPTIMIZATIONS=y +CONFIG_HW_STACK_PROTECTION=y + CONFIG_MAIN_STACK_SIZE=10240 -CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_MAX_IMG_SECTORS=256 CONFIG_BOOT_BOOTSTRAP=n @@ -14,6 +15,7 @@ CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y # Reduce memory consumption CONFIG_BOOT_BANNER=n @@ -35,3 +37,7 @@ CONFIG_MINIMAL_LIBC=y # Improve debugging experience by disabling reset on fatal error CONFIG_RESET_ON_FATAL_ERROR=n + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_keyboard.conf index 7af817e28681..68e256a10990 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_keyboard.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_keyboard.conf @@ -5,8 +5,9 @@ # CONFIG_SIZE_OPTIMIZATIONS=y +CONFIG_HW_STACK_PROTECTION=y + CONFIG_MAIN_STACK_SIZE=10240 -CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_MAX_IMG_SECTORS=256 CONFIG_BOOT_BOOTSTRAP=n @@ -14,6 +15,7 @@ CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y # Reduce memory consumption CONFIG_BOOT_BANNER=n @@ -35,3 +37,7 @@ CONFIG_MINIMAL_LIBC=y # Improve debugging experience by disabling reset on fatal error CONFIG_RESET_ON_FATAL_ERROR=n + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_release.conf index c858cded8d93..7cffdfc3d9f3 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_release.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/images/mcuboot/prj_release.conf @@ -5,8 +5,9 @@ # CONFIG_SIZE_OPTIMIZATIONS=y +CONFIG_HW_STACK_PROTECTION=y + CONFIG_MAIN_STACK_SIZE=10240 -CONFIG_MBEDTLS_CFG_FILE="mcuboot-mbedtls-cfg.h" CONFIG_BOOT_MAX_IMG_SECTORS=256 CONFIG_BOOT_BOOTSTRAP=n @@ -14,6 +15,7 @@ CONFIG_BOOT_BOOTSTRAP=n CONFIG_BOOT_VERSION_CMP_USE_BUILD_NUMBER=y CONFIG_FLASH=y +CONFIG_FPROTECT=y CONFIG_RESET_ON_FATAL_ERROR=y @@ -34,3 +36,7 @@ CONFIG_USE_SEGGER_RTT=n # Use minimal C library instead of the Picolib CONFIG_MINIMAL_LIBC=y + +# Activate LTO +CONFIG_LTO=y +CONFIG_ISR_TABLES_LOCAL_DECLARATION=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/led_state_def.h b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/led_state_def.h index d325ad177947..88672b9f8dff 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/led_state_def.h +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/led_state_def.h @@ -28,7 +28,7 @@ static const uint8_t led_map[LED_ID_COUNT] = { * for PWM output. * * You can still use these LEDs with the PWM LED driver, but you must set the LED color to - * ``LED_COLOR(255, 255, 255)`` or ``LED_COLOR(0, 0, 0)``. This ensures the PWM peripheral is not + * `LED_COLOR(255, 255, 255)` or `LED_COLOR(0, 0, 0)`. This ensures the PWM peripheral is not * used for the mentioned LEDs. */ diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static.yml index 0525b519b522..6694e3ed01b2 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static.yml +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static.yml @@ -1,29 +1,29 @@ app: - address: 0x8800 + address: 0x7800 region: flash_primary - size: 0xb7800 + size: 0xb8800 mcuboot: address: 0x0 region: flash_primary - size: 0x8000 + size: 0x7000 mcuboot_pad: - address: 0x8000 + address: 0x7000 region: flash_primary size: 0x800 mcuboot_primary: - address: 0x8000 + address: 0x7000 orig_span: &id001 - app - mcuboot_pad region: flash_primary - size: 0xb8000 + size: 0xb9000 span: *id001 mcuboot_primary_app: - address: 0x8800 + address: 0x7800 orig_span: &id002 - app region: flash_primary - size: 0xb7800 + size: 0xb8800 span: *id002 mcuboot_secondary: address: 0xc0000 @@ -31,7 +31,7 @@ mcuboot_secondary: - mcuboot_secondary_pad - mcuboot_secondary_app region: flash_primary - size: 0xb8000 + size: 0xb9000 span: *id003 mcuboot_secondary_pad: region: flash_primary @@ -40,8 +40,8 @@ mcuboot_secondary_pad: mcuboot_secondary_app: region: flash_primary address: 0xc0800 - size: 0xb7800 + size: 0xb8800 settings_storage: - address: 0x178000 + address: 0x179000 region: flash_primary - size: 0x5000 + size: 0x4000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_fast_pair.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_fast_pair.yml index 725785cf4026..ee5da8233112 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_fast_pair.yml +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_fast_pair.yml @@ -1,29 +1,29 @@ app: - address: 0x8800 + address: 0x7800 region: flash_primary - size: 0xb6800 + size: 0xb7800 mcuboot: address: 0x0 region: flash_primary - size: 0x8000 + size: 0x7000 mcuboot_pad: - address: 0x8000 + address: 0x7000 region: flash_primary size: 0x800 mcuboot_primary: - address: 0x8000 + address: 0x7000 orig_span: &id001 - app - mcuboot_pad region: flash_primary - size: 0xb7000 + size: 0xb8000 span: *id001 mcuboot_primary_app: - address: 0x8800 + address: 0x7800 orig_span: &id002 - app region: flash_primary - size: 0xb6800 + size: 0xb7800 span: *id002 mcuboot_secondary: address: 0xbf000 @@ -31,7 +31,7 @@ mcuboot_secondary: - mcuboot_secondary_pad - mcuboot_secondary_app region: flash_primary - size: 0xb7000 + size: 0xb8000 span: *id003 mcuboot_secondary_pad: region: flash_primary @@ -40,12 +40,12 @@ mcuboot_secondary_pad: mcuboot_secondary_app: region: flash_primary address: 0xbf800 - size: 0xb6800 + size: 0xb7800 bt_fast_pair: - address: 0x176000 + address: 0x177000 region: flash_primary size: 0x1000 settings_storage: - address: 0x177000 + address: 0x178000 region: flash_primary - size: 0x6000 + size: 0x5000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_keyboard.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_keyboard.yml index 0525b519b522..6694e3ed01b2 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_keyboard.yml +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_keyboard.yml @@ -1,29 +1,29 @@ app: - address: 0x8800 + address: 0x7800 region: flash_primary - size: 0xb7800 + size: 0xb8800 mcuboot: address: 0x0 region: flash_primary - size: 0x8000 + size: 0x7000 mcuboot_pad: - address: 0x8000 + address: 0x7000 region: flash_primary size: 0x800 mcuboot_primary: - address: 0x8000 + address: 0x7000 orig_span: &id001 - app - mcuboot_pad region: flash_primary - size: 0xb8000 + size: 0xb9000 span: *id001 mcuboot_primary_app: - address: 0x8800 + address: 0x7800 orig_span: &id002 - app region: flash_primary - size: 0xb7800 + size: 0xb8800 span: *id002 mcuboot_secondary: address: 0xc0000 @@ -31,7 +31,7 @@ mcuboot_secondary: - mcuboot_secondary_pad - mcuboot_secondary_app region: flash_primary - size: 0xb8000 + size: 0xb9000 span: *id003 mcuboot_secondary_pad: region: flash_primary @@ -40,8 +40,8 @@ mcuboot_secondary_pad: mcuboot_secondary_app: region: flash_primary address: 0xc0800 - size: 0xb7800 + size: 0xb8800 settings_storage: - address: 0x178000 + address: 0x179000 region: flash_primary - size: 0x5000 + size: 0x4000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_release.yml b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_release.yml index 0525b519b522..6694e3ed01b2 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_release.yml +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/pm_static_release.yml @@ -1,29 +1,29 @@ app: - address: 0x8800 + address: 0x7800 region: flash_primary - size: 0xb7800 + size: 0xb8800 mcuboot: address: 0x0 region: flash_primary - size: 0x8000 + size: 0x7000 mcuboot_pad: - address: 0x8000 + address: 0x7000 region: flash_primary size: 0x800 mcuboot_primary: - address: 0x8000 + address: 0x7000 orig_span: &id001 - app - mcuboot_pad region: flash_primary - size: 0xb8000 + size: 0xb9000 span: *id001 mcuboot_primary_app: - address: 0x8800 + address: 0x7800 orig_span: &id002 - app region: flash_primary - size: 0xb7800 + size: 0xb8800 span: *id002 mcuboot_secondary: address: 0xc0000 @@ -31,7 +31,7 @@ mcuboot_secondary: - mcuboot_secondary_pad - mcuboot_secondary_app region: flash_primary - size: 0xb8000 + size: 0xb9000 span: *id003 mcuboot_secondary_pad: region: flash_primary @@ -40,8 +40,8 @@ mcuboot_secondary_pad: mcuboot_secondary_app: region: flash_primary address: 0xc0800 - size: 0xb7800 + size: 0xb8800 settings_storage: - address: 0x178000 + address: 0x179000 region: flash_primary - size: 0x5000 + size: 0x4000 diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/prj_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/prj_fast_pair.conf index 4b6467321641..aa18f3ab624e 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/prj_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/prj_fast_pair.conf @@ -50,7 +50,7 @@ CONFIG_CAF_BLE_ADV_FILTER_ACCEPT_LIST=n CONFIG_CAF_BLE_STATE_MAX_LOCAL_ID_BONDS=3 # Align the advertised TX power with Fast Pair expectations. -CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL=-17 +CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL=-11 CONFIG_DESKTOP_BLE_USE_DEFAULT_ID=y diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild.conf index f777fb91fbb5..cd1800f15052 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild.conf @@ -7,5 +7,7 @@ SB_CONFIG_BOOTLOADER_MCUBOOT=y SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y -SB_CONFIG_BOOT_SIGNATURE_TYPE_RSA=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_fast_pair.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_fast_pair.conf index e2d9e7ec083e..013b7467becc 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_fast_pair.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_fast_pair.conf @@ -8,5 +8,7 @@ SB_CONFIG_BT_FAST_PAIR=y SB_CONFIG_BOOTLOADER_MCUBOOT=y SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y -SB_CONFIG_BOOT_SIGNATURE_TYPE_RSA=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private_fast_pair.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_keyboard.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_keyboard.conf index f777fb91fbb5..cd1800f15052 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_keyboard.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_keyboard.conf @@ -7,5 +7,7 @@ SB_CONFIG_BOOTLOADER_MCUBOOT=y SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y -SB_CONFIG_BOOT_SIGNATURE_TYPE_RSA=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_release.conf b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_release.conf index f777fb91fbb5..cd1800f15052 100644 --- a/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_release.conf +++ b/applications/nrf_desktop/configuration/nrf54l15dk_nrf54l15_cpuapp/sysbuild_release.conf @@ -7,5 +7,7 @@ SB_CONFIG_BOOTLOADER_MCUBOOT=y SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y -SB_CONFIG_BOOT_SIGNATURE_TYPE_RSA=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y +SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y +SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="\${APPLICATION_CONFIG_DIR}/images/mcuboot/mcuboot_private.pem" diff --git a/applications/nrf_desktop/description.rst b/applications/nrf_desktop/description.rst index f4a14c6258a9..873905eaf6e0 100644 --- a/applications/nrf_desktop/description.rst +++ b/applications/nrf_desktop/description.rst @@ -366,7 +366,7 @@ Depending on the development kit you use, you need to select the respective conf .. table-from-rows:: /includes/sample_board_rows.txt :header: heading - :rows: nrf52840dk_nrf52840, nrf52833dk_nrf52833, nrf52833dk_nrf52820, nrf5340dk_nrf5340_cpuapp, nrf54l15dk_nrf54l15_cpuapp, nrf54h20dk_nrf54h20_cpuapp + :rows: nrf52840dk_nrf52840, nrf52833dk_nrf52833, nrf52833dk_nrf52820, nrf5340dk_nrf5340_cpuapp, nrf54l15dk_nrf54l15_cpuapp, nrf54l15dk_nrf54l10_cpuapp, nrf54l15dk_nrf54l05_cpuapp, nrf54h20dk_nrf54h20_cpuapp Depending on the configuration, a DK may act either as mouse, keyboard or dongle. For information about supported configurations for each board, see the :ref:`nrf_desktop_board_configuration_files` section. @@ -900,6 +900,9 @@ The nRF Desktop application is built the same way to any other |NCS| application .. note:: Information about the known issues in nRF Desktop can be found in |NCS|'s :ref:`release_notes` and on the :ref:`known_issues` page. +.. note:: + |54H_engb_2_8| + .. _nrf_desktop_selecting_build_types: Selecting a build type @@ -949,6 +952,24 @@ See :ref:`app_build_file_suffixes` and :ref:`cmake_options` for information abou .. nrf_desktop_fastpair_important_end +nRF54L MCUboot provisioning +=========================== + +nRF54L-based nRF Desktop devices enable hardware cryptography for the MCUboot bootloader. +The public key that MCUboot uses to validate the application image is securely stored in the hardware Key Management Unit (KMU). +In this use case, the application image is automatically signed by the |NCS| build system. +However, the public key is not automatically provisioned to the device when programming the bootloader and the application images using the ``west flash`` command. + +To provision the MCUboot keys, use the ``west ncs-provision`` command before programming the bootloader and application images. +Make sure that the provisioned public key is generated from the private key that was used to sign the application image. +The private keys are stored in the application configuration directory of the board. +Path to the private key is defined by the ``SB_CONFIG_BOOT_SIGNATURE_KEY_FILE`` sysbuild Kconfig option. +You only need to provision one public key to an nRF Desktop device. +For details, see :ref:`provisioning KMU for nRF54L devices `. + +.. note:: + You must provision the device again after erasing it. + .. _nrf_desktop_testing_steps: Testing diff --git a/applications/nrf_desktop/doc/bas.rst b/applications/nrf_desktop/doc/bas.rst index a923147ad232..084264ea79d2 100644 --- a/applications/nrf_desktop/doc/bas.rst +++ b/applications/nrf_desktop/doc/bas.rst @@ -22,9 +22,9 @@ Module events Configuration ************* -The module is enabled with the :ref:`CONFIG_DESKTOP_BAS_ENABLE ` option, that is implied by the :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` option. +To enable this module, use the :ref:`CONFIG_DESKTOP_BAS_ENABLE ` Kconfig option, that is implied by the :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` option. The Battery Service is required for the HID peripheral device. -For more information about the Bluetooth configuration in the nRF Desktop, see the :ref:`nrf_desktop_bluetooth_guide` documentation. +For more information about the Bluetooth® configuration in the nRF Desktop, see the :ref:`nrf_desktop_bluetooth_guide` documentation. Implementation details ********************** diff --git a/applications/nrf_desktop/doc/ble_adv.rst b/applications/nrf_desktop/doc/ble_adv.rst index 84884a8ff652..cd12beae2d20 100644 --- a/applications/nrf_desktop/doc/ble_adv.rst +++ b/applications/nrf_desktop/doc/ble_adv.rst @@ -7,7 +7,7 @@ Bluetooth LE advertising module :local: :depth: 2 -In nRF Desktop, the |ble_adv| is responsible for controlling the Bluetooth LE advertising for the nRF Desktop peripheral device. +In nRF Desktop, the |ble_adv| is responsible for controlling the Bluetooth® LE advertising for the nRF Desktop peripheral device. Module events ************* diff --git a/applications/nrf_desktop/doc/ble_bond.rst b/applications/nrf_desktop/doc/ble_bond.rst index e02a3688a4ca..3a7bde6e2698 100644 --- a/applications/nrf_desktop/doc/ble_bond.rst +++ b/applications/nrf_desktop/doc/ble_bond.rst @@ -67,7 +67,7 @@ For example, the transition from :c:enumerator:`STATE_ERASE_PEER` to :c:enumerat When the transition occurs: -a. The :c:struct:`ble_peer_operation_event` with the defined :c:member:`ble_peer_operation_event.op` is submitted. +1. The :c:struct:`ble_peer_operation_event` with the defined :c:member:`ble_peer_operation_event.op` is submitted. For example, when the user confirms the erase advertising, the :c:struct:`ble_peer_operation_event` is submitted with :c:member:`ble_peer_operation_event.op` set to :c:enumerator:`PEER_OPERATION_ERASE_ADV`. #. The currently selected application local identity is updated (if anything changed). diff --git a/applications/nrf_desktop/doc/ble_conn_params.rst b/applications/nrf_desktop/doc/ble_conn_params.rst index 7d03ac5e4c32..6bb5de39bed3 100644 --- a/applications/nrf_desktop/doc/ble_conn_params.rst +++ b/applications/nrf_desktop/doc/ble_conn_params.rst @@ -32,15 +32,22 @@ The |ble_conn_params| is enabled by the :ref:`CONFIG_DESKTOP_BLE_CONN_PARAMS_ENA The option is implied by :ref:`CONFIG_DESKTOP_BT_CENTRAL ` together with other features used by a HID dongle that forwards the HID reports received over Bluetooth LE. Enable :ref:`CONFIG_DESKTOP_BLE_USB_MANAGED_CI ` to manage Bluetooth connections' parameters reacting on the USB state change. -The connection intervals for all of the Bluetooth connected peripherals are set to :ref:`CONFIG_DESKTOP_BLE_USB_MANAGED_CI_VALUE ` (100 ms by default) while USB is suspended. -The connections' peripheral latencies are set to 0. -The connection parameter change is reverted when USB is active. +The connection intervals for all of the Bluetooth connected peripherals are set to the value of :ref:`CONFIG_DESKTOP_BLE_USB_MANAGED_CI_VALUE ` Kconfig option (100 ms by default) while USB is suspended. +The connections' peripheral latencies are set to the value of :ref:`CONFIG_DESKTOP_BLE_USB_MANAGED_LATENCY_VALUE ` Kconfig option (``1`` by default). +The non-zero peripheral latency is used to prevent peripheral latency increase requests triggered by the :ref:`nrf_desktop_ble_latency` used on the peripheral's end. +The connection parameter change is reverted when USB is active or disconnected. The :ref:`CONFIG_DESKTOP_BLE_USB_MANAGED_CI ` is enabled by default. Implementation details ********************** -The |ble_conn_params| receives the peripheral's connection parameters update request as :c:struct:`ble_peer_conn_params_event`. +After setting Bluetooth LE connection parameters using Bluetooth stack APIs, the module waits until the update is completed (for :c:struct:`ble_peer_conn_params_event` with :c:member:`ble_peer_conn_params_event.updated` set to ``true``) before performing subsequent connection parameter updates for a given connection. +Subsequent connection parameter update for a given connection can be done right after the previous one is completed. + +Handling peripheral's requests +============================== + +The |ble_conn_params| receives the peripheral's connection parameters update request as :c:struct:`ble_peer_conn_params_event` with :c:member:`ble_peer_conn_params_event.updated` set to ``false``. The module updates only the connection latency. The connection interval and supervision timeout are not changed according to the peripheral's request. diff --git a/applications/nrf_desktop/doc/ble_discovery.rst b/applications/nrf_desktop/doc/ble_discovery.rst index 4f0ffff0cc7c..4cbb3cc4c546 100644 --- a/applications/nrf_desktop/doc/ble_discovery.rst +++ b/applications/nrf_desktop/doc/ble_discovery.rst @@ -31,7 +31,9 @@ Complete the following steps to configure the module: These modules are required for HID dongle that forwards the data from HID peripherals connected over Bluetooth. #. Make sure that the :kconfig:option:`CONFIG_BT_GATT_CLIENT` Kconfig option is enabled to support the GATT Client role. The GATT Client role is enabled by default by the :ref:`CONFIG_DESKTOP_BT_CENTRAL ` Kconfig option. -#. The |ble_discovery| module uses the :ref:`gatt_dm_readme` and selects the :kconfig:option:`CONFIG_BT_GATT_DM` Kconfig option to enable the library. + + The |ble_discovery| module uses the :ref:`gatt_dm_readme` and selects the :kconfig:option:`CONFIG_BT_GATT_DM` Kconfig option to enable the library. + #. Define the module configuration in the :file:`ble_discovery_def.h` file, located in the board-specific directory in the application configuration directory. You must define the following parameters for every nRF Desktop peripheral that connects with the given nRF Desktop central: diff --git a/applications/nrf_desktop/doc/ble_latency.rst b/applications/nrf_desktop/doc/ble_latency.rst index 125ea0564713..68234a2714dd 100644 --- a/applications/nrf_desktop/doc/ble_latency.rst +++ b/applications/nrf_desktop/doc/ble_latency.rst @@ -59,10 +59,10 @@ The module listens for the following events related to data transfer initiated b When these events are received, the module sets the connection latency to low. When the :ref:`nrf_desktop_config_channel` is no longer in use, and neither :ref:`nrf_desktop_ble_smp` nor :ref:`nrf_desktop_dfu_mcumgr` receive firmware updates (no mentioned events for ``LOW_LATENCY_CHECK_PERIOD_MS``), the module sets the connection latency to :kconfig:option:`CONFIG_BT_PERIPHERAL_PREF_LATENCY` to reduce the power consumption. - .. note:: - If the option :ref:`CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK ` is enabled, the LLPM connection latency is not increased unless the device is in the low power mode. +.. note:: + If the :ref:`CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK ` Kconfig option is enabled, the LLPM connection latency is not increased unless the device is in the low power mode. - When the device is in the low power mode and the events related to data transfer are not received, the connection latency is set to higher value to reduce the power consumption. + When the device is in the low power mode and the events related to data transfer are not received, the connection latency is set to higher value to reduce the power consumption. The ``ble_latency`` module receives :ref:`nrf_desktop_config_channel` events, but it is not configurable with the :ref:`nrf_desktop_config_channel`. The module does not register itself using the ``GEN_CONFIG_EVENT_HANDLERS`` macro. diff --git a/applications/nrf_desktop/doc/ble_passkey.rst b/applications/nrf_desktop/doc/ble_passkey.rst index 590146574502..72bd05d1cd7c 100644 --- a/applications/nrf_desktop/doc/ble_passkey.rst +++ b/applications/nrf_desktop/doc/ble_passkey.rst @@ -7,7 +7,7 @@ Bluetooth LE passkey module :local: :depth: 2 -Use the Bluetooth LE passkey module to enable pairing based on passkey for increased security. +Use the Bluetooth® LE passkey module to enable pairing based on passkey for increased security. Module events ************* @@ -42,5 +42,5 @@ The passkey input is handled in the :ref:`nrf_desktop_passkey`. .. note:: By default, Zephyr's Bluetooth Peripheral demands the security level 3 in case the passkey authentication is enabled. - If the nRF Desktop dongle is unable to achieve the security level 3, it will be unable to connect with the peripheral. + If the nRF Desktop dongle cannot achieve the security level 3, it cannot connect with the peripheral. The :kconfig:option:`CONFIG_BT_SMP_ENFORCE_MITM` option is disabled by default to allow the dongle to connect without the authentication. diff --git a/applications/nrf_desktop/doc/ble_qos.rst b/applications/nrf_desktop/doc/ble_qos.rst index 9471496705a2..d7f9f83ba249 100644 --- a/applications/nrf_desktop/doc/ble_qos.rst +++ b/applications/nrf_desktop/doc/ble_qos.rst @@ -27,15 +27,16 @@ Configuration The module requires the basic Bluetooth configuration, as described in :ref:`nrf_desktop_bluetooth_guide`. The QoS module uses the ``chmap_filter`` library, whose API is described in :file:`src/util/chmap_filter/include/chmap_filter.h`. -The library is linked if :ref:`CONFIG_DESKTOP_BLE_QOS_ENABLE ` Kconfig option is enabled. +The library is linked if the :ref:`CONFIG_DESKTOP_BLE_QOS_ENABLE ` Kconfig option is enabled. Enable the module using the :ref:`CONFIG_DESKTOP_BLE_QOS_ENABLE ` Kconfig option. The option selects :kconfig:option:`CONFIG_BT_HCI_VS_EVT_USER`, because the module uses vendor-specific HCI events. You can use the :ref:`CONFIG_DESKTOP_BLE_QOS_STATS_PRINTOUT_ENABLE ` Kconfig option to enable real-time QoS information printouts through the USB CDC ACM port. -The :ref:`CONFIG_DESKTOP_USB_STACK_LEGACY ` Kconfig option must be enabled and the selected USB CDC ACM instance must be enabled, and specified in devicetree using ``ncs,ble-qos-uart`` DT chosen. +The :ref:`CONFIG_DESKTOP_USB_STACK_LEGACY ` Kconfig option must be enabled. +Also, the selected USB CDC ACM instance must be enabled, and specified in the devicetree using the ``ncs,ble-qos-uart`` DT chosen. For an example of configuration that specifies the ``ncs,ble-qos-uart`` DT chosen, see the :file:`configuration/nrf52840dongle_nrf52840/app.overlay` file. -This option automatically selects other Kconfig options needed to handle stats printouts over the USB CDC ACM port: +This option automatically selects other Kconfig options needed to handle statistics printouts over the USB CDC ACM port: * :kconfig:option:`CONFIG_USB_COMPOSITE_DEVICE` * :kconfig:option:`CONFIG_USB_CDC_ACM` @@ -88,7 +89,7 @@ The module is a configuration channel listener and provides the following config Average rating threshold for approving a blocked Bluetooth LE channel that is under evaluation by the QoS module. Fixed point value with 1/100 scaling. * ``wifi_rating_inc`` - Wi-Fi strength rating multiplier. + Wi-Fi® strength rating multiplier. Increase the value to block Wi-Fi faster. Fixed point value with 1/100 scaling. * ``wifi_present_threshold`` diff --git a/applications/nrf_desktop/doc/ble_scan.rst b/applications/nrf_desktop/doc/ble_scan.rst index fe66b3d712ea..a7169459e3ae 100644 --- a/applications/nrf_desktop/doc/ble_scan.rst +++ b/applications/nrf_desktop/doc/ble_scan.rst @@ -42,7 +42,7 @@ Complete the following steps to enable the |ble_scan|: #. Make sure that the number of scan filters based on the Bluetooth name (:kconfig:option:`CONFIG_BT_SCAN_NAME_CNT`) is equal to the number of peripheral types the nRF Desktop central connects to. The |ble_scan| uses Bluetooth name filters to look for unbonded peripherals. The peripheral type may be either a mouse or a keyboard. -#. If you want to limit the number of attempts to connect to a device, you can use the connection attempt filter (:kconfig:option:`CONFIG_BT_SCAN_CONN_ATTEMPTS_FILTER`). +#. To limit the number of attempts to connect to a device, you can use the connection attempt filter (:kconfig:option:`CONFIG_BT_SCAN_CONN_ATTEMPTS_FILTER`). The Kconfig option is enabled by default. After the predefined number of disconnections or connection failures, the nRF Desktop central will no longer try to connect with the given peripheral device. This is done to prevent connecting and disconnecting with a peripheral in a never-ending loop. @@ -88,14 +88,14 @@ The following scanning scenarios are possible: Scanning module configuration ============================= -The |ble_scan| relies on :ref:`nrf_bt_scan_readme` to perform Bluetooth scanning. -The |ble_scan| selects :kconfig:option:`CONFIG_BT_SCAN` and :kconfig:option:`CONFIG_BT_SCAN_FILTER_ENABLE`. -Apart from that the following default values are applied: +The |ble_scan| relies on the :ref:`nrf_bt_scan_readme` library to perform Bluetooth scanning. +The module selects :kconfig:option:`CONFIG_BT_SCAN` and :kconfig:option:`CONFIG_BT_SCAN_FILTER_ENABLE`. +Apart from that, the following default values are applied: * :kconfig:option:`CONFIG_BT_SCAN_NAME_CNT` is set to ``2``. - By default, nRF Desktop dongle connects to peripherals that are either keyboard or mouse. + By default, the nRF Desktop dongle connects to peripherals that are either keyboard or mouse. * :kconfig:option:`CONFIG_BT_SCAN_ADDRESS_CNT` is set to :kconfig:option:`CONFIG_BT_MAX_PAIRED`. - The dongle scans for all of the bonded peripherals. + The dongle scans for all bonded peripherals. * :kconfig:option:`CONFIG_BT_SCAN_CONN_ATTEMPTS_FILTER` is enabled. .. _nrf_desktop_ble_scan_scanning_not_started: @@ -139,7 +139,8 @@ If the :ref:`CONFIG_DESKTOP_BLE_FORCED_SCAN_DURATION_S ` Kconfig option, the module switches to regular scanning. -The regular scanning can be interrupted by using connected peripherals and times out after the scan duration specified by :ref:`CONFIG_DESKTOP_BLE_SCAN_DURATION_S ` if there are peripherals connected over Bluetooth. +You can interrupt regular scanning by using connected peripherals. +The scanning times out after the duration specified in the :ref:`CONFIG_DESKTOP_BLE_SCAN_DURATION_S ` Kconfig option if there are peripherals connected over Bluetooth. .. note:: The conditions described under :ref:`nrf_desktop_ble_scan_scanning_not_started` prevent the starting of the forced scan. diff --git a/applications/nrf_desktop/doc/buttons_sim.rst b/applications/nrf_desktop/doc/buttons_sim.rst index 12624361ee54..c7f7b3322acd 100644 --- a/applications/nrf_desktop/doc/buttons_sim.rst +++ b/applications/nrf_desktop/doc/buttons_sim.rst @@ -9,7 +9,7 @@ Button simulator module Use the |button_sim| to generate the sequence of simulated key presses. The time between subsequent key presses is defined as a module configuration option. -Generating keys can be started and stopped by pressing the predefined button. +To start or stop generating key presses, press the predefined button. Module events ************* @@ -34,7 +34,7 @@ To configure the |button_sim|: #. Define the interval between subsequent simulated button presses (:ref:`CONFIG_DESKTOP_BUTTONS_SIM_INTERVAL `). One second is used by default. -If you want the sequence to automatically restart after it ends, set :ref:`CONFIG_DESKTOP_BUTTONS_SIM_LOOP_FOREVER `. +If you want the sequence to automatically restart after it ends, set the :ref:`CONFIG_DESKTOP_BUTTONS_SIM_LOOP_FOREVER ` Kconfig option. By default, the sequence is generated only once. Implementation details @@ -43,4 +43,4 @@ Implementation details The |button_sim| generates button sequence using :c:struct:`k_work_delayable`, which resubmits itself. The work handler submits the press and the release of a single button from the sequence. -Receiving :c:struct:`button_event` with the key ID set to :ref:`CONFIG_DESKTOP_BUTTONS_SIM_TRIGGER_KEY_ID ` either stops generating the sequence (in case it is already being generated) or starts generating it. +Receiving :c:struct:`button_event` with the key ID set to :ref:`CONFIG_DESKTOP_BUTTONS_SIM_TRIGGER_KEY_ID ` either stops generating the sequence (if it is already being generated) or starts generating it. diff --git a/applications/nrf_desktop/doc/config_channel.rst b/applications/nrf_desktop/doc/config_channel.rst index 040bb82ef39b..d9a93dd4ef37 100644 --- a/applications/nrf_desktop/doc/config_channel.rst +++ b/applications/nrf_desktop/doc/config_channel.rst @@ -446,8 +446,8 @@ To register an application module as a configuration channel listener, complete .. note:: The module must be an early subscriber to make sure it will receive the event before the configuration channel transports (:ref:`nrf_desktop_usb_state` and :ref:`nrf_desktop_hids`). - Otherwise, the module may not receive the configuration channel requests at all. - In that case an error responses will be generated by configuration channel transport. + Otherwise, the module may not receive configuration channel requests at all. + In that case, an error response will be generated by the configuration channel transport. #. Call :c:macro:`GEN_CONFIG_EVENT_HANDLERS` in the :ref:`app_event_manager` event handler function registered by the application module: diff --git a/applications/nrf_desktop/doc/constlat.rst b/applications/nrf_desktop/doc/constlat.rst index 38f0729a414c..4a16f0de89ca 100644 --- a/applications/nrf_desktop/doc/constlat.rst +++ b/applications/nrf_desktop/doc/constlat.rst @@ -23,7 +23,7 @@ Module events Configuration ************* -Enable the module with the :ref:`CONFIG_DESKTOP_CONSTLAT_ENABLE ` option. +To enable the module, use the :ref:`CONFIG_DESKTOP_CONSTLAT_ENABLE ` Kconfig option. -You can set the :ref:`CONFIG_DESKTOP_CONSTLAT_DISABLE_ON_STANDBY ` to disable the constant latency interrupts when the device goes to the low power mode (on ``power_down_event``). -The constant latency interrupts are reenabled on ``wake_up_event``. +You can set the :ref:`CONFIG_DESKTOP_CONSTLAT_DISABLE_ON_STANDBY ` option to disable the constant latency interrupts when the device switches to the low power mode (on ``power_down_event``). +The constant latency interrupts are re-enabled on a ``wake_up_event``. diff --git a/applications/nrf_desktop/doc/cpu_meas.rst b/applications/nrf_desktop/doc/cpu_meas.rst index 51446a883094..3ba355eb5a03 100644 --- a/applications/nrf_desktop/doc/cpu_meas.rst +++ b/applications/nrf_desktop/doc/cpu_meas.rst @@ -22,15 +22,15 @@ Module events Configuration ************* -Enable the module using the :ref:`CONFIG_DESKTOP_CPU_MEAS_ENABLE ` option. -This Kconfig option selects the :kconfig:option:`CONFIG_CPU_LOAD` option. -The :kconfig:option:`CONFIG_CPU_LOAD` option enables :ref:`cpu_load`, that is used to perform the measurements. +To enable this module, use the :ref:`CONFIG_DESKTOP_CPU_MEAS_ENABLE ` Kconfig option. +This option selects the :kconfig:option:`CONFIG_CPU_LOAD` option. +The :kconfig:option:`CONFIG_CPU_LOAD` option enables the :ref:`cpu_load` library that is used to perform the measurements. Set the time between subsequent CPU load measurements, in milliseconds, using the :ref:`CONFIG_DESKTOP_CPU_MEAS_PERIOD ` option. Implementation details ********************** -The module periodically submits the measured CPU load as :c:struct:`cpu_load_event` and resets the measurement. +The module periodically submits the measured CPU load as a :c:struct:`cpu_load_event` and resets the measurement. The event can be displayed in the logs or using the :ref:`nrf_profiler`. The :c:member:`cpu_load_event.load` presents the CPU load in 0.001% units. diff --git a/applications/nrf_desktop/doc/dev_descr.rst b/applications/nrf_desktop/doc/dev_descr.rst index c1da6cf816ae..6fee7fabd292 100644 --- a/applications/nrf_desktop/doc/dev_descr.rst +++ b/applications/nrf_desktop/doc/dev_descr.rst @@ -7,10 +7,10 @@ Device description module :local: :depth: 2 -The device description module defines custom GATT Service, which contains: +The device description module defines the custom GATT Service that contains: -* Information about whether the peripheral supports the Low Latency Packet Mode (LLPM) -* Hardware ID (HW ID) of the peripheral +* Information about whether the peripheral supports the Low Latency Packet Mode (LLPM). +* Hardware ID (HW ID) of the peripheral. To support the LLPM, the peripheral must use the SoftDevice Link Layer. This means that you must enable both the :kconfig:option:`CONFIG_BT_LL_SOFTDEVICE` and the :kconfig:option:`CONFIG_CAF_BLE_USE_LLPM` Kconfig options. @@ -20,13 +20,13 @@ The Service is mandatory for all nRF Desktop peripherals that connect to the nRF Module events ************* -The ``dev_descr`` module does not submit any event nor subscribe for any event. +The ``dev_descr`` module does not submit nor subscribe to any events. Configuration ************* -The module requires the basic Bluetooth configuration, as described in the :ref:`nrf_desktop_bluetooth_guide` documentation. -Make sure that both :ref:`CONFIG_DESKTOP_ROLE_HID_PERIPHERAL ` and :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` options are enabled. +The module requires the basic Bluetooth® configuration, as described in the :ref:`nrf_desktop_bluetooth_guide` documentation. +Make sure that both :ref:`CONFIG_DESKTOP_ROLE_HID_PERIPHERAL ` and :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` Kconfig options are enabled. The device description application module is enabled by the :ref:`CONFIG_DESKTOP_DEV_DESCR_ENABLE ` option, which is implied by :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` together with other features used by a Bluetooth LE HID peripheral device. The module selects the :ref:`CONFIG_DESKTOP_HWID ` option to make sure that the nRF Desktop Hardware ID utility is enabled. @@ -34,7 +34,7 @@ The utility uses Zephyr's :ref:`zephyr:hwinfo_api` to obtain the hardware ID and The :file:`dev_descr.h` file contains the UUIDs used by the custom GATT Service. The file is located in the :file:`configuration/common` directory. -The UUIDs must be the same for all devices to ensure that the central is able to read the provided information. +The UUIDs must be the same for all devices to ensure that the central can read the provided information. Implementation details ********************** diff --git a/applications/nrf_desktop/doc/dfu.rst b/applications/nrf_desktop/doc/dfu.rst index 3c807a2c7eb9..701b60a03587 100644 --- a/applications/nrf_desktop/doc/dfu.rst +++ b/applications/nrf_desktop/doc/dfu.rst @@ -20,14 +20,14 @@ Module events :end-before: table_dfu_end .. note:: - |nrf_desktop_module_event_note| + |nrf_desktop_module_event_note| Configuration ************* -The module can be used for the following devices: +You can use this module for the following devices: -* nRF52 and nRF53 Series - To perform the firmware upgrade, you must enable the bootloader. +* nRF52, nRF53, and nRF54L Series - To perform the firmware upgrade, you must enable the bootloader. You can use the DFU module with either MCUboot or B0 bootloader. For more information on how to enable and configure a bootloader, see the :ref:`nrf_desktop_bootloader` section. @@ -35,7 +35,7 @@ The module can be used for the following devices: The DFU module acts as a transport for the SUIT envelope used to update device firmware. For more information on how to enable the SUIT procedure, see the :ref:`nrf_desktop_suit` section. -Enable the DFU module using the :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE ` option. +To enable the DFU module, use the :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_ENABLE ` Kconfig option. It requires the transport option :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE ` to be selected, as it uses :ref:`nrf_desktop_config_channel` for the transmission of the update image. Set the value of :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_SYNC_BUFFER_SIZE ` to specify the size of the sync buffer (in words). @@ -61,7 +61,7 @@ If the MCUboot bootloader in the swap mode is selected, the DFU module does the If the MCUboot bootloader's direct-xip mode is used, the module does not mark the newly uploaded image as pending and does not confirm it after a successful boot. In that case, the DFU module assumes that the MCUboot direct-xip bootloader simply boots an image with the higher version, so there is no need to mark the image as pending and confirm it. -The :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_MCUBOOT_DIRECT_XIP ` option is used to inform the DFU module that the device uses the MCUboot bootloader in the direct-xip mode. +The :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_DFU_MCUBOOT_DIRECT_XIP ` Kconfig option is used to inform the DFU module that the device uses the MCUboot bootloader in the direct-xip mode. If the option is enabled, the DFU module reports the ``MCUBOOT+XIP`` bootloader name instead of ``MCUBOOT`` to indicate that the bootloader working in the direct-xip mode is used. The option depends on enabling the MCUboot bootloader (:kconfig:option:`CONFIG_BOOTLOADER_MCUBOOT`) and is enabled by default if the MCUboot direct-xip mode of operations is set (:kconfig:option:`CONFIG_MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP`). See the :ref:`nrf_desktop_bootloader` section for more information on the MCUboot bootloader configuration. @@ -87,7 +87,7 @@ Non-volatile memory access synchronization with other DFU methods The DFU module leverages the :ref:`nrf_desktop_dfu_lock` to synchronize non-volatile memory access with other DFU methods (for example, SMP DFU). If multiple DFU transports are enabled in your application configuration, make sure that the following conditions are met: -* The :ref:`CONFIG_DESKTOP_DFU_LOCK ` option is enabled +* The :ref:`CONFIG_DESKTOP_DFU_LOCK ` Kconfig option is enabled * All of the used DFU transports use the :ref:`nrf_desktop_dfu_lock`. On each DFU attempt, the module attempts to claim ownership over the DFU non-volatile memory using the DFU Lock API. @@ -271,5 +271,5 @@ The module receives the SUIT envelope with update image data over the :ref:`nrf_ After a complete transfer, the :ref:`reboot ` command triggers a firmware update using the envelope. The module calls the :c:func:`suit_trigger_update` function to trigger an update instead of rebooting the device using the :c:func:`sys_reboot` function. -Triggering an update using the :ref:`reboot ` command makes the user experience consistent with nRF52 and nRF53 Series devices. +Triggering an update using the :ref:`reboot ` command makes the user experience consistent with nRF52, nRF53, and nRF54L Series devices. For these devices, the :ref:`reboot ` command after a complete update image transfer triggers an image update performed by the bootloader. diff --git a/applications/nrf_desktop/doc/dvfs.rst b/applications/nrf_desktop/doc/dvfs.rst new file mode 100644 index 000000000000..cd08f22d0e87 --- /dev/null +++ b/applications/nrf_desktop/doc/dvfs.rst @@ -0,0 +1,120 @@ +.. _nrf_desktop_dvfs: + +DVFS module +########### + +.. contents:: + :local: + :depth: 2 + +The nRF Desktop Dynamic Voltage and Frequency Scaling (DVFS) module is responsible for switching the frequency and voltage according to the application needs. +The module chooses the highest frequency required by the application states. +The module, requests this frequency as a minimal requirement to clock control driver which selects DVFS operating point accordingly. +DVFS improves balancing performance and power consumption, especially in battery-operated devices. + +In the nRF Desktop application, the DVFS module enables the system to use the lowest possible frequency and voltage when the application performs less compute-intensive activities, such as Bluetooth® LE advertising. +However, if performing more compute-intensive tasks, the nRF Desktop DVFS module will dynamically change to a higher frequency to increase performance. + +The nRF Desktop DVFS module requests clock frequency change using API of the clock control driver. +The driver is responsible for choosing the optimal clock frequency. +The driver submits a request to the sysctrl core through the nrfs DVFS service. +The sysctrl core controls both clock frequency and voltage and chooses corresponding voltage to requested frequency. + +.. note:: + In the current solution, it is assumed that no other module requests frequency changes. + The nRF Desktop DVFS module is the sole entity responsible for managing frequency and voltage adjustments. + Controlling clock from other sources would result in a module fatal error. + +Supported devices +***************** + +The module is only available for the nRF54H20 SoC. + +The nRF54H20 SoC has the following available operating points (called frequency in the documentation): + +* DVFS_FREQ_HIGH - High frequency - 320 MHz, 0.8 V +* DVFS_FREQ_MEDLOW - Medium-low frequency - 128 MHz, 0.6V +* DVFS_FREQ_LOW - Low frequency - 64 MHz, 0.5V + +The nRF Desktop DVFS module might request any clock frequency, but it would be rounded up by the driver to one of the values from available operating points. + +Module events +************* + +.. include:: event_propagation.rst + :start-after: table_dvfs_start + :end-before: table_dvfs_end + +.. note:: + |nrf_desktop_module_event_note| + +Configuration +************* + +The nRF Desktop DVFS module is enabled by default on supported board targets. +To disable it, set the :ref:`CONFIG_DESKTOP_DVFS ` Kconfig option to ``n``. + +Tracked application states +========================== + +The nRF Desktop DVFS module defines independent application states that have different requirements in terms of frequency. +The module listens for Event Manager events that are sent and turns the state on or off according to the event. +It support the following DVFS states: + +* ``DVFS_STATE_INITIALIZING`` - Application initialization is in progress +* ``DVFS_STATE_LLPM_CONNECTED`` - There is an ongoing connection that uses BLE Low Latency Packet Mode +* ``DVFS_STATE_USB_CONNECTED`` - USB is connected +* ``DVFS_STATE_CONFIG_CHANNEL`` - :ref:`nrf_desktop_config_channel` is active +* ``DVFS_STATE_SMP_TRANSFER`` - DFU image transfer over BLE SMP is active + For details about SMP DFU integration in nRF Desktop, see :ref:`nrf_desktop_dfu_mcumgr`. + +You can configure each DVFS state using the following Kconfig options: + +* ``CONFIG_DESKTOP_DVFS_STATE__ENABLE`` - Enables DVFS state handling. +* ``CONFIG_DESKTOP_DVFS_STATE__ACTIVE_FREQ`` - Choice of minimal active frequency requested by state . + The possible values are ``DESKTOP_DVFS_STATE__ACTIVE_FREQ_HIGH`` and ``DESKTOP_DVFS_STATE__ACTIVE_FREQ_MEDLOW``. +* ``CONFIG_DESKTOP_DVFS_STATE__TIMEOUT_MS`` - Specifies the timeout in milliseconds, defining the duration from receiving an on event to the moment the state stops requesting its active frequency. + When the timeout is reached, the state returns to a non-active state potentially enabling the system to use lower frequency. + If the timeout is set to ``0`` the will continue requesting its active frequency until it receives an off event. + Some of the tracked application states have associated events that inform when the state is turned on and off (for example, USB connection). + Other states have associated application events emitted periodically when active. + There is no event explicitly informing that state is no longer active (for example, config channel). + For such states, we need to define a timeout that is used to turn off the tracked state after associated application events are no longer emitted. + +Frequency change retry +====================== + +Each frequency change request is retried if it fails due to a known reason. +Failing frequency change requests can be caused by: + +* Another frequency change request being in progress on sysctrl - error ``-EBUSY``. + In that case, the module will retry the request after a timeout specified by the :ref:`CONFIG_DESKTOP_DVFS_RETRY_BUSY_TIMEOUT_MS ` Kconfig option. + The default timeout value is 1 ms. +* The nrfs DVFS service being not yet initialized - error ``-EAGAIN``. + In that case, the nRF Desktop DVFS module will retry the request after a timeout specified by the :ref:`CONFIG_DESKTOP_DVFS_RETRY_INIT_TIMEOUT_MS ` Kconfig option. + The default timeout value is 500 ms. +* Other errors are not retried. + If the DVFS frequency request returns an error different from ``-EBUSY`` or ``-EAGAIN``, the module will report a :c:enum:`MODULE_STATE_ERROR` and set the ``module_state`` to ``STATE_ERROR``. + +The module will retry the request up to the number of times specified by the :ref:`CONFIG_DESKTOP_DVFS_RETRY_COUNT ` Kconfig option. +The default value of retries is ``5``. +The error counter is only set to zero when the DVFS change request is correct. +nRF Desktop DVFS module will also report a :c:enum:`MODULE_STATE_ERROR` and set ``module_state`` to ``STATE_ERROR`` if the number of retries is exceeded. + +In ``STATE_ERROR``, the module will not change the frequency and voltage. +:c:enum:`MODULE_STATE_ERROR` reported by the nRF Desktop DVFS module would lead to fatal application error. + +Implementation details +********************** + +The nRF Desktop DVFS module has the following two state tracing entities: + +* ``module_state`` is used to track the state of the nRF Desktop DVFS module. + It indicates if the module is ready or if an error has occurred. + +* ``dfvs_requests_state_bitmask`` is used to track separately the state of each application DVFS state. + Each DVFS state is represented by a bit in the bitmask. + If the bit is set, the state is active. + The module listens for Event Manager events related to a given state and updates the state accordingly. + The module then checks which states are active and sets the highest frequency that is required by at least one state. + If no state is active, the module sets the lowest frequency :ref:`CONFIG_DESKTOP_DVFS_FREQ_LOW `. diff --git a/applications/nrf_desktop/doc/event_propagation.rst b/applications/nrf_desktop/doc/event_propagation.rst index 936023f891e5..04a2ec161930 100644 --- a/applications/nrf_desktop/doc/event_propagation.rst +++ b/applications/nrf_desktop/doc/event_propagation.rst @@ -366,6 +366,8 @@ nRF Desktop event propagation | | | | ``ble_peer_conn_params_event`` | :ref:`nrf_desktop_ble_conn_params` | | | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_ble_latency` | +| | | | +---------------------------------------------+ +| | | | | :ref:`nrf_desktop_dvfs` | | | | +--------------------------------+---------------------------------------------+ | | | | ``ble_peer_event`` | :ref:`nrf_desktop_ble_peer_event_sinks` | | | | +--------------------------------+---------------------------------------------+ @@ -624,6 +626,8 @@ nRF Desktop event propagation +-----------------------------------------------+----------------------------+ +----------------------------+---------------------------------------------+ | | | | ``ble_smp_transfer_event`` | :ref:`nrf_desktop_ble_latency` | | | | | +---------------------------------------------+ +| | | | | :ref:`nrf_desktop_dvfs` | +| | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_dfu_mcumgr` | | | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_smp` | @@ -634,6 +638,33 @@ nRF Desktop event propagation .. table_dfu_mcumgr_end +.. table_dvfs_start + ++-----------------------------------------------+--------------------------------+-------------+------------------------+---------------------------------------------+ +| Source Module | Input Event | This Module | Output Event | Sink Module | ++===============================================+================================+=============+========================+=============================================+ +| :ref:`nrf_desktop_config_event_sources` | ``config_event`` | ``dvfs`` | | | ++-----------------------------------------------+--------------------------------+ | | | +| :ref:`nrf_desktop_ble_state` | ``ble_peer_conn_params_event`` | | | | ++-----------------------------------------------+--------------------------------+ | | | +| :ref:`nrf_desktop_ble_adv` | ``ble_peer_event`` | | | | ++-----------------------------------------------+ | | | | +| :ref:`nrf_desktop_ble_state` | | | | | ++-----------------------------------------------+--------------------------------+ | | | +| :ref:`nrf_desktop_dfu_mcumgr` | ``ble_smp_transfer_event`` | | | | ++-----------------------------------------------+ | | | | +| :ref:`nrf_desktop_smp` | | | | | ++-----------------------------------------------+--------------------------------+ | | | +| :ref:`nrf_desktop_module_state_event_sources` | ``module_state_event`` | | | | ++-----------------------------------------------+--------------------------------+ | | | +| :ref:`nrf_desktop_usb_state` | ``usb_state_event`` | | | | ++-----------------------------------------------+--------------------------------+ +------------------------+---------------------------------------------+ +| | | | ``module_state_event`` | :ref:`nrf_desktop_module_state_event_sinks` | ++-----------------------------------------------+--------------------------------+-------------+------------------------+---------------------------------------------+ + +.. table_dvfs_end + + .. table_factory_reset_start +-----------------------------------------------+------------------------+-------------------+------------------+---------------------------------------+ @@ -768,6 +799,10 @@ nRF Desktop event propagation +-----------------------------------------------+ | | | | | :ref:`nrf_desktop_usb_state` | | | | | +-----------------------------------------------+-----------------------------------+ | | | +| :ref:`nrf_desktop_hids` | ``hid_report_subscriber_event`` | | | | ++-----------------------------------------------+ | | | | +| :ref:`nrf_desktop_usb_state` | | | | | ++-----------------------------------------------+-----------------------------------+ | | | | :ref:`nrf_desktop_hids` | ``hid_report_subscription_event`` | | | | +-----------------------------------------------+ | | | | | :ref:`nrf_desktop_usb_state` | | | | | @@ -901,7 +936,9 @@ nRF Desktop event propagation | | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_motion` | | | | +-----------------------------------+---------------------------------------------+ -| | | | ``hid_report_subscriber_event`` | :ref:`nrf_desktop_hid_state` | +| | | | ``hid_report_subscriber_event`` | :ref:`nrf_desktop_hid_forward` | +| | | | +---------------------------------------------+ +| | | | | :ref:`nrf_desktop_hid_state` | | | | +-----------------------------------+---------------------------------------------+ | | | | ``hid_report_subscription_event`` | :ref:`nrf_desktop_hid_forward` | | | | | +---------------------------------------------+ @@ -1223,6 +1260,8 @@ nRF Desktop event propagation +-----------------------------------------------+----------------------------+ +----------------------------+---------------------------------------------+ | | | | ``ble_smp_transfer_event`` | :ref:`nrf_desktop_ble_latency` | | | | | +---------------------------------------------+ +| | | | | :ref:`nrf_desktop_dvfs` | +| | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_dfu_mcumgr` | | | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_smp` | @@ -1285,7 +1324,9 @@ nRF Desktop event propagation | | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_motion` | | | | +-----------------------------------+---------------------------------------------+ -| | | | ``hid_report_subscriber_event`` | :ref:`nrf_desktop_hid_state` | +| | | | ``hid_report_subscriber_event`` | :ref:`nrf_desktop_hid_forward` | +| | | | +---------------------------------------------+ +| | | | | :ref:`nrf_desktop_hid_state` | | | | +-----------------------------------+---------------------------------------------+ | | | | ``hid_report_subscription_event`` | :ref:`nrf_desktop_hid_forward` | | | | | +---------------------------------------------+ @@ -1299,6 +1340,8 @@ nRF Desktop event propagation | | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_ble_conn_params` | | | | | +---------------------------------------------+ +| | | | | :ref:`nrf_desktop_dvfs` | +| | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_motion` | | | | | +---------------------------------------------+ | | | | | :ref:`nrf_desktop_usb_state_pm` | diff --git a/applications/nrf_desktop/doc/event_rel_modules.rst b/applications/nrf_desktop/doc/event_rel_modules.rst index 9d429d3cde98..a3552760dccc 100644 --- a/applications/nrf_desktop/doc/event_rel_modules.rst +++ b/applications/nrf_desktop/doc/event_rel_modules.rst @@ -33,6 +33,7 @@ Sink modules for ble_peer_event * :ref:`nrf_desktop_ble_scan` * :ref:`nrf_desktop_ble_state_pm` * :ref:`nrf_desktop_dfu` +* :ref:`nrf_desktop_dvfs` * :ref:`nrf_desktop_hid_forward` * :ref:`nrf_desktop_led_state` * :ref:`nrf_desktop_ble_state` @@ -63,6 +64,7 @@ Sink modules for config_event * :ref:`nrf_desktop_ble_latency` * :ref:`nrf_desktop_ble_qos` * :ref:`nrf_desktop_dfu` +* :ref:`nrf_desktop_dvfs` * :ref:`nrf_desktop_factory_reset` * :ref:`nrf_desktop_hid_forward` * :ref:`nrf_desktop_info` @@ -121,6 +123,7 @@ Source modules for module_state_event * :ref:`nrf_desktop_cpu_meas` * :ref:`nrf_desktop_dfu` * :ref:`nrf_desktop_dfu_mcumgr` +* :ref:`nrf_desktop_dvfs` * :ref:`nrf_desktop_failsafe` * :ref:`nrf_desktop_fast_pair_app` * :ref:`nrf_desktop_fn_keys` @@ -170,6 +173,7 @@ Sink modules for module_state_event * :ref:`nrf_desktop_cpu_meas` * :ref:`nrf_desktop_dfu` * :ref:`nrf_desktop_dfu_mcumgr` +* :ref:`nrf_desktop_dvfs` * :ref:`nrf_desktop_factory_reset` * :ref:`nrf_desktop_fast_pair_app` * :ref:`nrf_desktop_fn_keys` diff --git a/applications/nrf_desktop/doc/failsafe.rst b/applications/nrf_desktop/doc/failsafe.rst index 41b8113002b6..0794bdc87b6b 100644 --- a/applications/nrf_desktop/doc/failsafe.rst +++ b/applications/nrf_desktop/doc/failsafe.rst @@ -33,3 +33,9 @@ Additionally, make sure that the following options are set as follows: This is to ensure that the device will be blocked after a fatal error and then the watchdog will trigger the reboot. After the reboot caused either by the watchdog or by the CPU lockup, the failsafe module erases the settings partition and clears the non-volatile settings data. + +Implementation details +********************** + +The failsafe module uses the Zephyr :ref:`zephyr:hwinfo_api` driver. +The module gets the reset reason information with the :c:func:`hwinfo_get_reset_cause` function and clears it with the :c:func:`hwinfo_clear_reset_cause` function. diff --git a/applications/nrf_desktop/doc/fast_pair_app.rst b/applications/nrf_desktop/doc/fast_pair_app.rst index 8a89e6c89db9..1f19cc0e65d6 100644 --- a/applications/nrf_desktop/doc/fast_pair_app.rst +++ b/applications/nrf_desktop/doc/fast_pair_app.rst @@ -10,7 +10,7 @@ Fast Pair module The Fast Pair module is used to: * Update the Fast Pair advertising payload to automatically switch between showing and hiding user interface (UI) pairing indication on the Fast Pair Seeker. - The UI indication must be displayed only if the Provider can bond with new peers on the currently used Bluetooth local identity. + The UI indication must be displayed only if the Provider can bond with new peers on the currently used Bluetooth® local identity. * Reject a normal Bluetooth pairing when outside of the pairing mode. * Remove the Fast Pair advertising payload for the dongle peer. @@ -44,7 +44,7 @@ The Fast Pair module is enabled using :ref:`CONFIG_DESKTOP_FAST_PAIR `) Kconfig option instead. + Setting the peripheral latency Bluetooth LE connection parameter to ``0`` for a connection that uses Low Latency Packet Mode connection interval on peripheral leads to keeping the high frequency clock enabled. + That mitigates the extra HID report latency caused by the high frequency clock startup delay. Module events ************* @@ -24,10 +30,16 @@ Module events Configuration ************* -Enable the module with the :ref:`CONFIG_DESKTOP_HFCLK_LOCK_ENABLE ` Kconfig option. +To enable the module, use the :kconfig:option:`CONFIG_DESKTOP_HFCLK_LOCK_ENABLE` Kconfig option. + +Make sure that you have enabled the Bluetooth LE Low Latency Packet Mode (LLPM) (:kconfig:option:`CONFIG_CAF_BLE_USE_LLPM`). +Using LLPM connection parameters reduces HID data latency more than enabling the module. + +.. note:: + The module is not supported for nRF54H Series SoC (:kconfig:option:`CONFIG_SOC_SERIES_NRF54HX`). Implementation details ********************** -The high frequency clock is disabled on ``power_down_event`` and reenabled on ``wake_up_event``. +The high frequency clock is disabled on a :c:struct:`power_down_event` and re-enabled on a :c:struct:`wake_up_event`. This is done to reduce the power consumption. diff --git a/applications/nrf_desktop/doc/hid_forward.rst b/applications/nrf_desktop/doc/hid_forward.rst index 65a24bfd7fbc..851385a3186c 100644 --- a/applications/nrf_desktop/doc/hid_forward.rst +++ b/applications/nrf_desktop/doc/hid_forward.rst @@ -32,16 +32,23 @@ Complete the following steps to configure the module: Make sure that both :ref:`CONFIG_DESKTOP_ROLE_HID_DONGLE ` and :ref:`CONFIG_DESKTOP_BT_CENTRAL ` are enabled. The HID forward application module is enabled by the :ref:`CONFIG_DESKTOP_HID_FORWARD_ENABLE ` option which is implied by the :ref:`CONFIG_DESKTOP_BT_CENTRAL ` option together with other application modules. These modules are required for HID dongle that forwards the data from HID peripherals connected over Bluetooth. -#. The :ref:`CONFIG_DESKTOP_HID_FORWARD_ENABLE ` option selects :kconfig:option:`CONFIG_BT_HOGP` to automatically enable the :ref:`hogp_readme`. - An nRF Desktop dongle does not generate its own HID input reports. - The dongle uses |hid_forward| to forward the HID reports. - The reports are received by the HID service client from the peripherals connected over Bluetooth. - .. note:: + * The :ref:`CONFIG_DESKTOP_HID_FORWARD_ENABLE ` option selects :kconfig:option:`CONFIG_BT_HOGP` to automatically enable the :ref:`hogp_readme`. + An nRF Desktop dongle does not generate its own HID input reports. + The dongle uses |hid_forward| to forward the HID reports. + The reports are received by the HID service client from the peripherals connected over Bluetooth. + + .. note:: The maximum number of supported HID reports (:kconfig:option:`CONFIG_BT_HOGP_REPORTS_MAX`) is set by default for the nRF Desktop dongle, which supports two peripherals with an average of six HID reports each. Make sure to align this configuration value for other use cases, for example, if the dongle supports more peripherals. -#. nRF Desktop dongle can forward either mouse or keyboard boot reports. + * The :ref:`CONFIG_DESKTOP_HID_FORWARD_ENABLE ` option selects :ref:`CONFIG_DESKTOP_HID_REPORTQ ` to automatically enable the HID report queue utility. + The HID report queue utility is used to locally enqueue reports at the source to prevent HID report drops. + If needed, you can update the maximum number of enqueued HID reports (:ref:`CONFIG_DESKTOP_HID_REPORTQ_MAX_ENQUEUED_REPORTS `). + See :ref:`nrf_desktop_hid_reportq` documentation for details. + +#. Check the chosen HID boot protocol. + The nRF Desktop dongle can forward either mouse or keyboard boot reports. The forwarded boot report type is specified using the following Kconfig options: * :ref:`CONFIG_DESKTOP_HID_BOOT_INTERFACE_KEYBOARD ` - This option enables forwarding keyboard boot reports. @@ -49,9 +56,11 @@ Complete the following steps to configure the module: Those options affect :ref:`nrf_desktop_usb_state` that subscribes for HID boot reports. The Dongle forwards HID reports from both mouse and keyboard, and so either option works if you want to have the Dongle work as boot mouse or boot keyboard. - For more information about the configuration of the HID boot protocol, see the boot protocol configuration section in the :ref:`nrf_desktop_usb_state` documentation. - -You can set the queued HID input reports limit using the :ref:`CONFIG_DESKTOP_HID_FORWARD_MAX_ENQUEUED_REPORTS ` Kconfig option. + For more information about the configuration of the HID boot protocol, see the "Boot protocol configuration" section in the :ref:`nrf_desktop_usb_state` documentation. +#. Make sure that the value of :ref:`CONFIG_DESKTOP_HID_FORWARD_SUBSCRIBER_COUNT ` Kconfig option matches number of USB HID class instances configured in :ref:`nrf_desktop_usb_state`. + nRF Desktop dongle can use one or more instances of the USB HID class. + By default, the module uses a dedicated HID subscriber (USB HID class instance) for every BLE bonded HID peripheral. + For more details, see the `Interaction with the USB`_ section. Implementation details ********************** @@ -63,7 +72,10 @@ Interaction with the USB The :ref:`nrf_desktop_usb_state` can be configured to have one or more instances of the HID-class USB device. If there is more than one instance of the HID-class USB device, this number must match the maximum number of bonded Bluetooth peripheral devices. -Each instance of HID-class USB device subscribes to HID reports forwarded by the |hid_forward|. +Each USB HID class instance subscribes to HID reports forwarded by the |hid_forward|. +Each USB HID class instance is assigned a separate :ref:`nrf_desktop_hid_reportq` instance when the related HID subscriber connects. +The assigned HID report queue instance is freed when the related HID subscriber disconnects. +Subscriber state changes are tracked relying on :c:struct:`hid_report_subscriber_event`. The |hid_forward| has an array of subscribers, one for each HID-class USB device. The possible cases that impact how the host to which the nRF desktop dongle is connected interprets the reports are as follows: @@ -93,33 +105,27 @@ Forwarding HID input reports After :ref:`nrf_desktop_ble_discovery` successfully discovers a connected peripheral, the |hid_forward| automatically subscribes for every HID input report provided by the peripheral. The subscriber can use either the HID boot protocol or the HID report protocol, but both protocols cannot be used at the same time. -In the current implementation, the :ref:`nrf_desktop_usb_state` supports either the HID boot keyboard or the HID boot mouse reports, because the HID boot protocol code is set using a single Kconfig option that is common for all of the instances of the USB HID. +In the current implementation, the :ref:`nrf_desktop_usb_state` supports either the HID boot keyboard or the HID boot mouse reports, because the application does not support assigning HID boot protocol code separately for each USB HID instance. The :c:func:`hogp_read` callback is called when HID input report is received from the connected peripheral. -The received HID input report data is converted to ``hid_report_event``. +The received HID input report data is passed to the HID report queue and converted to a :c:struct:`hid_report_event`. -``hid_report_event`` is submitted and then the HID-class USB device configured by :ref:`nrf_desktop_usb_state` forwards it to the host. -When a HID report is sent to the host by the HID-class USB device, the |hid_forward| receives a ``hid_report_sent_event`` with the identifier of this device. +The :c:struct:`hid_report_event` is submitted by the HID report queue and the HID-class USB device configured by :ref:`nrf_desktop_usb_state` forwards it to the host. +When a HID report is sent to the host by the HID-class USB instance, the |hid_forward| receives a :c:struct:`hid_report_sent_event` with the identifier of the instance. +The |hid_forward| notifies the HID report queue to ensure proper HID report flow. Enqueuing incoming HID input reports ------------------------------------ -The |hid_forward| forwards only one HID input report to the HID-class USB device at a time. -Another HID input report may be received from a peripheral connected over Bluetooth before the previous one was sent. -In that case, ``hid_report_event`` is enqueued and submitted later. -Up to the number of reports specified in :ref:`CONFIG_DESKTOP_HID_FORWARD_MAX_ENQUEUED_REPORTS ` Kconfig option can be enqueued at a time for each report type and for each HID subscriber (HID-class USB device). -If there is not enough space to enqueue a new event, the module drops the oldest enqueued event (of the same type) that was enqueued for a given HID subscriber. - -Upon receiving the ``hid_report_sent_event``, the |hid_forward| submits the ``hid_report_event`` enqueued for the peripheral that is associated with the HID-class USB device. -The enqueued report to be sent is chosen by the |hid_forward| in the round-robin fashion. -The report of the next type will be sent if available. -If not available, the next report type will be checked until a report is found or there is no report in any of the queues. -If there is no ``hid_report_event`` in the queue, the module waits for receiving data from peripherals. +USB HID class instances limit the maximum number of HID input reports that can be handled simultaneously. +The number of HID input reports received from HID peripherals connected over Bluetooth LE may exceed the limit. +If needed, the |hid_forward| relies on the HID report queue to locally enqueue HID input reports before providing them to the USB HID subscriber. +All HID input reports received from a HID peripheral go through the HID report queue utility associated with a given USB HID instance. Forwarding HID output reports ============================= -When the |hid_forward| receives a ``hid_report_event`` that contains an output report from a :ref:`nrf_desktop_usb_state`, it tries to forward the output report. +When the |hid_forward| receives a :c:struct:`hid_report_event` that contains an output report from a :ref:`nrf_desktop_usb_state`, it tries to forward the output report. The HID output report is forwarded to all of the Bluetooth connected peripherals that forward the HID data to the HID subscriber that is source of the HID output report. The HID output report is never forwarded to peripheral that does not support it. diff --git a/applications/nrf_desktop/doc/hid_reportq.rst b/applications/nrf_desktop/doc/hid_reportq.rst new file mode 100644 index 000000000000..712365a84956 --- /dev/null +++ b/applications/nrf_desktop/doc/hid_reportq.rst @@ -0,0 +1,84 @@ +.. _nrf_desktop_hid_reportq: + +HID report queue utility +######################## + +.. contents:: + :local: + :depth: 2 + +A HID subscriber (for example, a USB HID class instance handled by :ref:`nrf_desktop_usb_state`) limits the maximum number of HID input reports that can be handled simultaneously. +Enqueuing HID input reports locally at the source is necessary to prevent HID report drops when receiving more HID reports than can be handled by the subscriber. +The HID report queue utility can be used by an application module to simplify enqueuing HID input reports received from connected HID peripherals before providing them to HID subscriber. + +Configuration +************* + +Make sure that heap size (:kconfig:option:`CONFIG_HEAP_MEM_POOL_SIZE`) is large enough to handle the worst possible use case. +Data structures used to enqueue HID reports are dynamically allocated using the :c:func:`k_malloc` function. +When no longer needed, the structures are freed using the :c:func:`k_free` function. + +Use the :ref:`CONFIG_DESKTOP_HID_REPORTQ ` Kconfig option to enable the utility. +You can use the utility only on HID dongles (:ref:`CONFIG_DESKTOP_ROLE_HID_DONGLE `). + +You can configure the following properties: + +* Maximum number of enqueued HID reports (:ref:`CONFIG_DESKTOP_HID_REPORTQ_MAX_ENQUEUED_REPORTS `) +* Number of supported HID report queues (:ref:`CONFIG_DESKTOP_HID_REPORTQ_QUEUE_COUNT `) + +See Kconfig help for more details. + +Using HID report queue +********************** + +You can use the utility in a HID dongle's application module that handles receiving HID input reports from HID peripherals. +The module uses the utility as a middleware between a connected HID peripheral and a HID subscriber. +The module passes the received HID input report to the HID report queue utility. +The HID report queue utility submits the :c:struct:`hid_report_event` to pass the HID input report to the HID subscriber. +The following sections describe how to integrate HID report queue APIs in an application module. + +The :ref:`nrf_desktop_hid_forward` is an example of an application module that uses the HID report queue utility. +Refer to the module's implementation (:file:`src/modules/hid_forward.c`) for an example of HID report queue integration. + +Allocation +========== + +A HID report queue instance must be allocated with the :c:func:`hid_reportq_alloc` function before it is used. +A separate HID report queue object needs to be allocated for each HID report subscriber. +During allocation, the caller specifies the HID subscriber identifier. +The :c:func:`hid_reportq_get_sub_id` function can be used to access the identifier later. +After the HID report queue object is no longer used, it should be freed using the :c:func:`hid_reportq_free` function. + +HID subscriptions +================= + +A HID report queue instance tracks HID input report subscriptions enabled by a HID subscriber. +You can use the :c:func:`hid_reportq_subscribe` and :c:func:`hid_reportq_unsubscribe` functions to update the state of enabled subscriptions. +The functions should be called while handling a :c:struct:`hid_report_subscription_event` in the module using the HID reportq utility. +You can use the :c:func:`hid_reportq_is_subscribed` function to check if the subscription is enabled for the specified HID input report. + +Enqueuing HID input reports +=========================== + +If an application module uses the HID report queue instance to locally enqueue HID input reports for a given HID subscriber, every HID report intended for the subscriber should go through the HID report queue. +The application module can call the :c:func:`hid_reportq_report_add` function for a received HID input report to pass the report to the HID report queue utility. +The function allocates a :c:struct:`hid_report_event` for the received HID input report. +If a HID subscriber can handle the :c:struct:`hid_report_event`, the event is instantly passed to the subscriber. +Otherwise, the event is enqueued and will be submitted later. + +When a HID subscriber (for example, a USB HID class instance) delivers a HID input report to the HID host (on :c:struct:`hid_report_sent_event`), the :c:func:`hid_reportq_report_sent` API needs to be called to notify the HID report queue. +This allows the queue to track the state of HID reports provided to the HID subscriber. +If the HID report queue contains an enqueued report, the queue object will instantly submit the subsequent :c:struct:`hid_report_event`. +The enqueued report to be sent is chosen in the round-robin fashion from HID report IDs with enabled subscription. +The report with the next report ID will be sent if available. +If not available, the next report IDs will be checked until a report is found or until the utility detects that there are no more enqueued reports. + +API documentation +***************** + +Application modules can use the following API of the HID report queue: + +| Header file: :file:`applications/nrf_desktop/src/util/hid_reportq.h` +| Source file: :file:`applications/nrf_desktop/src/util/hid_reportq.c` + +.. doxygengroup:: hid_reportq diff --git a/applications/nrf_desktop/doc/hid_state.rst b/applications/nrf_desktop/doc/hid_state.rst index 1bc4efd32a40..04af3d902dfd 100644 --- a/applications/nrf_desktop/doc/hid_state.rst +++ b/applications/nrf_desktop/doc/hid_state.rst @@ -29,7 +29,7 @@ Module events Configuration ************* -The |hid_state| is enabled by the :ref:`CONFIG_DESKTOP_HID_STATE_ENABLE ` option which is implied by the :ref:`CONFIG_DESKTOP_ROLE_HID_PERIPHERAL ` option. +To enable the |hid_state|, use the :ref:`CONFIG_DESKTOP_HID_STATE_ENABLE ` Kconfig option that is implied by the :ref:`CONFIG_DESKTOP_ROLE_HID_PERIPHERAL ` option. An nRF Desktop peripheral uses the |hid_state| to generate HID reports based on the user input. For details related to HID configuration in the nRF Desktop, see the :ref:`nrf_desktop_hid_configuration` documentation. @@ -118,13 +118,13 @@ You must define all of the mentioned data in this configuration file, and specif Report expiration ================= -With the :ref:`CONFIG_DESKTOP_HID_REPORT_EXPIRATION ` configuration option, you can set the amount of time after which a key will be considered expired. +With the :ref:`CONFIG_DESKTOP_HID_REPORT_EXPIRATION ` Kconfig option, you can set the amount of time after which a key will be considered expired. The higher the value, the longer the period after which the nRF Desktop application will recall pressed keys when the connection is established. Queue event size ================ -With the :ref:`CONFIG_DESKTOP_HID_EVENT_QUEUE_SIZE ` configuration option, you can set the number of elements on the queue where the keys are stored before the connection is established. +With the :ref:`CONFIG_DESKTOP_HID_EVENT_QUEUE_SIZE ` Kconfig option, you can set the number of elements on the queue where the keys are stored before the connection is established. When a key state changes (it is pressed or released) before the connection is established, an element containing this key's usage is pushed onto the queue. If there is no space in the queue, the oldest element is released. @@ -208,7 +208,7 @@ This queue preserves an order at which input data events are received. Storing limitations ------------------- -The number of events that can be inserted into the queue is limited by :ref:`CONFIG_DESKTOP_HID_EVENT_QUEUE_SIZE ` option. +The number of events that can be inserted into the queue is limited using the :ref:`CONFIG_DESKTOP_HID_EVENT_QUEUE_SIZE ` Kconfig option. Discarding events When there is no space for a new input event, the |hid_state| tries to free space by discarding the oldest event in the queue. @@ -259,7 +259,7 @@ Depending on the connection method, this event can be submitted: The :c:struct:`report_state` structure serves the following purposes: * Tracks the state of the connection. -* Contains the link connecting the object to the right :c:struct:`report_data` structure, from which the data is taken when the HID report is formed. +* Contains the link connecting the object to the right :c:struct:`report_data` structure from which the data is taken when the HID report is formed. * Tracks the number of reports of the associated type that were sent to the subscriber. Forming HID reports @@ -270,7 +270,7 @@ The :c:struct:`report_data` structure is passed as an argument to this function. .. note:: The HID report formatting function must work according to the HID report descriptor (``hid_report_desc``). - The source file containing the descriptor is given by :ref:`CONFIG_DESKTOP_HID_REPORT_DESC ` option. + The source file containing the descriptor is provided by the :ref:`CONFIG_DESKTOP_HID_REPORT_DESC ` Kconfig option. Handling HID keyboard LED state =============================== diff --git a/applications/nrf_desktop/doc/hids.rst b/applications/nrf_desktop/doc/hids.rst index 6394cc4a9f95..95551b1144c6 100644 --- a/applications/nrf_desktop/doc/hids.rst +++ b/applications/nrf_desktop/doc/hids.rst @@ -24,23 +24,23 @@ Module events Configuration ************* -Complete the following steps to configure the module: +Complete the basic Bluetooth configuration, as described in :ref:`nrf_desktop_bluetooth_guide`. -1. Complete the basic Bluetooth configuration, as described in :ref:`nrf_desktop_bluetooth_guide`. - Make sure that both :ref:`CONFIG_DESKTOP_ROLE_HID_PERIPHERAL ` and :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` options are enabled. - The HID Service application module is enabled by the :ref:`CONFIG_DESKTOP_HIDS_ENABLE ` option, which is implied by :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` together with other GATT Services that are required for a HID device. -#. The :ref:`CONFIG_DESKTOP_HIDS_ENABLE ` option selects the following Kconfig options: +Make sure that both :ref:`CONFIG_DESKTOP_ROLE_HID_PERIPHERAL ` and :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` Kconfig options are enabled. +The HID Service application module is enabled by the :ref:`CONFIG_DESKTOP_HIDS_ENABLE ` option, which is implied by :ref:`CONFIG_DESKTOP_BT_PERIPHERAL ` together with other GATT Services that are required for a HID device. - * The :kconfig:option:`CONFIG_BT_HIDS` option that automatically enables the :ref:`hids_readme`. - * The :kconfig:option:`CONFIG_BT_CONN_CTX` option that automatically enables the :ref:`bt_conn_ctx_readme`, which is required by the |GATT_HID|. +The :ref:`CONFIG_DESKTOP_HIDS_ENABLE ` option selects the following Kconfig options: -#. The nRF Desktop application modifies the defaults of Kconfig option values, defined by the :ref:`hids_readme`, to tailor the default configuration to application needs. - The configuration is tailored for either nRF Desktop mouse (:ref:`CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE `) or nRF Desktop keyboard (:ref:`CONFIG_DESKTOP_PERIPHERAL_TYPE_KEYBOARD `). - For more details, see the :file:`src/modules/Kconfig.hids` file. +* The :kconfig:option:`CONFIG_BT_HIDS` option that automatically enables the :ref:`hids_readme`. +* The :kconfig:option:`CONFIG_BT_CONN_CTX` option that automatically enables the :ref:`bt_conn_ctx_readme`, which is required by the |GATT_HID|. - .. tip:: - If the HID report configuration is identical to the default configuration of either nRF Desktop mouse or keyboard, you do not need to modify the |GATT_HID| configuration. - Otherwise, see :ref:`hids_readme` documentation for configuration details. +The nRF Desktop application modifies the default Kconfig option values, defined by the :ref:`hids_readme`, to tailor the default configuration to application needs. +The configuration is tailored for either nRF Desktop mouse (:ref:`CONFIG_DESKTOP_PERIPHERAL_TYPE_MOUSE `) or nRF Desktop keyboard (:ref:`CONFIG_DESKTOP_PERIPHERAL_TYPE_KEYBOARD `). +For more details, see the :file:`src/modules/Kconfig.hids` file. + +.. tip:: + If the HID report configuration is identical to the default configuration of either nRF Desktop mouse or keyboard, you do not need to modify the |GATT_HID| configuration. + Otherwise, see :ref:`hids_readme` documentation for configuration details. The HID Service application module forwards the information about the enabled HID notifications to other application modules using ``hid_report_subscription_event``. These notifications are enabled by the connected Bluetooth® Central. @@ -97,7 +97,7 @@ HID notifications ================= The ``hid_notification_event`` is used to synchronize the information about enabling or disabling the HID notifications for the HID input report. -The event is submitted when the |GATT_HID| calls a callback related to enabling or disabling the notifications and the event is received only by the ``hids`` application module. +The event is submitted when the |GATT_HID| calls a callback related to enabling or disabling the notifications and the event is received only by the HID Service application module. Transport for configuration channel =================================== diff --git a/applications/nrf_desktop/doc/info.rst b/applications/nrf_desktop/doc/info.rst index 558f024e756c..950951503549 100644 --- a/applications/nrf_desktop/doc/info.rst +++ b/applications/nrf_desktop/doc/info.rst @@ -28,10 +28,11 @@ Module events Configuration ************* -The module selects the :ref:`CONFIG_DESKTOP_HWID ` option to make sure that nRF Desktop Hardware ID utility is enabled. -The utility uses Zephyr's :ref:`zephyr:hwinfo_api` to obtain the hardware ID and selects the :kconfig:option:`CONFIG_HWINFO` Kconfig option to automatically enable the required driver. +To enable the module, use the :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE ` Kconfig option. +The same option enables the :ref:`nrf_desktop_config_channel`. -The module is enabled with the same Kconfig option as the :ref:`nrf_desktop_config_channel`: :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE `. +The module selects the :ref:`CONFIG_DESKTOP_HWID ` Kconfig option to make sure that nRF Desktop Hardware ID utility is enabled. +The utility uses Zephyr's :ref:`zephyr:hwinfo_api` to obtain the hardware ID and selects the :kconfig:option:`CONFIG_HWINFO` Kconfig option to automatically enable the required driver. Implementation details ********************** diff --git a/applications/nrf_desktop/doc/led_state.rst b/applications/nrf_desktop/doc/led_state.rst index 8ca0d454243c..e3c934ae8d5b 100644 --- a/applications/nrf_desktop/doc/led_state.rst +++ b/applications/nrf_desktop/doc/led_state.rst @@ -28,7 +28,7 @@ The module controls LEDs defined by enumerators in :c:enum:`led_id`: * :c:enumerator:`LED_PEER_STATE_CONNECTED` - Bluetooth peer is connected. * :c:enumerator:`LED_PEER_STATE_PEER_SEARCH` - Device is looking for a peer, either by scanning or advertising. * :c:enumerator:`LED_PEER_STATE_CONFIRM_SELECT` - Bluetooth peer is being selected (the device is waiting for confirmation). - * :c:enumerator:`LED_PEER_STATE_CONFIRM_ERASE` - Device is waiting for user confirmation to erase peers (for Bluetooth® Central) or start erase advertising (for Bluetooth® Peripheral). + * :c:enumerator:`LED_PEER_STATE_CONFIRM_ERASE` - Device is waiting for user confirmation to erase peers (for Bluetooth Central) or start erase advertising (for Bluetooth Peripheral). * :c:enumerator:`LED_PEER_STATE_ERASE_ADV` - Device is advertising for peer erase. For the complete description of peer management, see :ref:`nrf_desktop_ble_bond`. @@ -51,8 +51,8 @@ Module events Configuration ************* -The |led_state| is enabled when you set the :kconfig:option:`CONFIG_CAF_LEDS` option. -You must also configure :ref:`caf_leds`, which is used as a sink module for ``led_state``. +To enable the |led_state|, set the :kconfig:option:`CONFIG_CAF_LEDS` Kconfig option. +You must also configure the :ref:`caf_leds` that is used as a sink module for ``led_state``. For every board that has this option enabled, you must define the module configuration. The configuration must be defined in the file named :ref:`CONFIG_DESKTOP_LED_STATE_DEF_PATH ` located in the board-specific directory in the application configuration directory. @@ -60,8 +60,8 @@ By default, the file is named as :file:`led_state_def.h`. The configuration consists of the following elements: -* ``led_map`` - Maps the :c:enum:`led_id` values to IDs used by :ref:`caf_leds`. - If no physical LED is assigned to a :c:enum:`led_id` value, assign :c:macro:`LED_UNAVAILABLE` as the ID used by :ref:`caf_leds`. +* ``led_map`` - Maps the :c:enum:`led_id` values to IDs used by the :ref:`caf_leds`. + If no physical LED is assigned to a :c:enum:`led_id` value, assign :c:macro:`LED_UNAVAILABLE` as the ID used by the :ref:`caf_leds`. * ``led_system_state_effect`` - Defines the LED effects used to show the system states. The effect must be defined for every system state. * ``led_peer_state_effect`` - Defines the LED effects used to show the Bluetooth peer states. diff --git a/applications/nrf_desktop/doc/led_stream.rst b/applications/nrf_desktop/doc/led_stream.rst index 75b2c024e44f..997d19e806a8 100644 --- a/applications/nrf_desktop/doc/led_stream.rst +++ b/applications/nrf_desktop/doc/led_stream.rst @@ -24,7 +24,7 @@ Configuration ************* The module receives LED effects through the :ref:`nrf_desktop_config_channel` and displays them using the :ref:`caf_leds`. -For this reason, make sure that both :kconfig:option:`CONFIG_CAF_LEDS` and :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE ` options are set. +For this reason, make sure that both :kconfig:option:`CONFIG_CAF_LEDS` and :ref:`CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE ` Kconfig options are set. To enable the module, use the :ref:`CONFIG_DESKTOP_LED_STREAM_ENABLE ` Kconfig option. @@ -57,7 +57,7 @@ Implementation details ********************** The module receives LED effects as ``config_event``. -The effects are sent to :ref:`caf_leds` as ``led_event``. +The effects are sent to the :ref:`caf_leds` as ``led_event``. Displaying the sequence begins when the first LED effect is received by the |led_stream|. Every received LED effect has a predefined duration. diff --git a/applications/nrf_desktop/doc/motion.rst b/applications/nrf_desktop/doc/motion.rst index c417d2ad2b5b..55ced17ab64e 100644 --- a/applications/nrf_desktop/doc/motion.rst +++ b/applications/nrf_desktop/doc/motion.rst @@ -91,7 +91,7 @@ The X and Y coordinates of subsequent vertexes of the octagon are defined as the You can configure the path with the following options: * :ref:`CONFIG_DESKTOP_MOTION_SIMULATED_EDGE_TIME ` - Sets how long each edge is traced. - To speed up calculations, this Kconfig option value must be set to a power of two. + To speed up calculations, set this Kconfig option value to a power of two. * :ref:`CONFIG_DESKTOP_MOTION_SIMULATED_SCALE_FACTOR ` - Scales the size of the octagon. The Kconfig option's value is used as the ``SCALE`` factor in the ``coords`` array. @@ -178,7 +178,7 @@ Upon connection, the following happens: #. Waits for the indication that the :c:struct:`motion_event` data was transmitted to the host. This is done when the module receives the :c:struct:`hid_report_sent_event` event. -#. At this point, a next motion sampling is performed and the next :c:struct:`motion_event` sent. +#. The next motion sampling is performed and the next :c:struct:`motion_event` sent. The module continues to sample data until disconnection or when there is no motion detected. The ``motion`` module assumes no motion when a number of consecutive samples equal to :ref:`CONFIG_DESKTOP_MOTION_SENSOR_EMPTY_SAMPLES_COUNT ` returns zero on both axis. @@ -227,6 +227,6 @@ You can perform the following actions to ensure that non-zero motion is reported * ``Simulated movement data`` Increase the value of the used scale factor or reduce time for transition between two points in the trajectory to increase the generated motion values. Keep in mind that the generated shape is periodically repeated, so the transition time between two points in the trajectory should not be too short. - If it is, it might cause the same point to generate twice which would also result in submitting a :c:struct:`motion_event` with values set to ``0`` for both axes. + If it is, it might cause the same point to generate twice, which would also result in submitting a :c:struct:`motion_event` with values set to ``0`` for both axes. See the :ref:`nrf_desktop_motion_configuration` section for details on how to modify configuration for a given implementation of the module. diff --git a/applications/nrf_desktop/doc/nrf_profiler_sync.rst b/applications/nrf_desktop/doc/nrf_profiler_sync.rst index 0e931d3461ff..2dfc8850311d 100644 --- a/applications/nrf_desktop/doc/nrf_profiler_sync.rst +++ b/applications/nrf_desktop/doc/nrf_profiler_sync.rst @@ -28,7 +28,7 @@ Configuration ************* A predefined signal on the GPIO is used to simultaneously generate synchronization nRF Profiler events on both devices. -For this reason, you must enable the :kconfig:option:`CONFIG_GPIO` option. +For this reason, you must enable the :kconfig:option:`CONFIG_GPIO` Kconfig option. You must also enable the :kconfig:option:`CONFIG_APP_EVENT_MANAGER_PROFILER_TRACER` Kconfig option. The nRF Profiler synchronization module generates an :ref:`nrf_profiler` event (:c:struct:`sync_event`) that is not an :ref:`app_event_manager` event. diff --git a/applications/nrf_desktop/doc/passkey.rst b/applications/nrf_desktop/doc/passkey.rst index 2828d80d19b2..1da0d082a300 100644 --- a/applications/nrf_desktop/doc/passkey.rst +++ b/applications/nrf_desktop/doc/passkey.rst @@ -28,17 +28,17 @@ The passkey input handling is based on ``button_event``. To configure the passkey module, complete the following steps: 1. Enable and configure the :ref:`caf_buttons`. -#. Enable the passkey module by using the :ref:`CONFIG_DESKTOP_PASSKEY_BUTTONS ` option. +#. Enable the passkey module by using the :ref:`CONFIG_DESKTOP_PASSKEY_BUTTONS ` Kconfig option. #. Define the maximum number of digits in the passkey by using the :ref:`CONFIG_DESKTOP_PASSKEY_MAX_LEN ` option. #. Define the IDs of the keys used by the passkey module in the :file:`passkey_buttons_def.h` file located in the board-specific directory in the :file:`configuration` directory. You must define the IDs of the following keys: - * Keys used to input the digits. + * Keys used to enter the digits. * Keys used to confirm the input. * Keys used to remove the last digit (short-press removes only the last digit, but if the key is held for longer than 2 seconds, the whole input is cleared). - You can define multiple sets of keys used to input the digits, but every set should contain keys used to input every digit. - This is to ensure that the user will be able to input the passkey. + You can define multiple sets of keys used to enter the digits, but every set should contain keys used to enter every digit. + This is to ensure that you can enter the passkey. The index of the key ID in the input configuration array represents the digit. The example configuration of the module can be found in the :file:`configuration/nrf52kbd_nrf52832/passkey_buttons_def.h` file. diff --git a/applications/nrf_desktop/doc/qos.rst b/applications/nrf_desktop/doc/qos.rst index a0690585289d..3ac2613d567d 100644 --- a/applications/nrf_desktop/doc/qos.rst +++ b/applications/nrf_desktop/doc/qos.rst @@ -32,9 +32,9 @@ Module events Configuration ************* -The module requires the basic Bluetooth® configuration, as described in :ref:`nrf_desktop_bluetooth_guide`. +The module requires the basic Bluetooth configuration, as described in :ref:`nrf_desktop_bluetooth_guide`. -The module is enabled with :ref:`CONFIG_DESKTOP_QOS_ENABLE ` option. +To enable the module, use the :ref:`CONFIG_DESKTOP_QOS_ENABLE ` Kconfig option. The module is available on the :ref:`peripheral devices ` only and requires the :ref:`nrf_desktop_ble_qos` to be enabled. Implementation details diff --git a/applications/nrf_desktop/doc/selector.rst b/applications/nrf_desktop/doc/selector.rst index 576dc8383371..30f45c1ed125 100644 --- a/applications/nrf_desktop/doc/selector.rst +++ b/applications/nrf_desktop/doc/selector.rst @@ -7,8 +7,8 @@ Selector module :local: :depth: 2 -The selector module is used to send ``selector_event`` that informs about the current selector state. -The module has one implementation, which uses hardware selectors (:file:`selector_hw.c`). +The selector module is used to send a ``selector_event`` that informs about the current selector state. +The module uses hardware selectors (:file:`selector_hw.c`). Module events ************* @@ -24,9 +24,9 @@ Configuration ************* The module implemented in :file:`selector_hw.c` uses the Zephyr :ref:`zephyr:gpio_api` driver to check the state of hardware selectors. -For this reason, you should set :kconfig:option:`CONFIG_GPIO` option. +For this reason, you must set the :kconfig:option:`CONFIG_GPIO` Kconfig option. -Set :ref:`CONFIG_DESKTOP_SELECTOR_HW_ENABLE ` option to enable the module. +To enable the module, use the :ref:`CONFIG_DESKTOP_SELECTOR_HW_ENABLE ` option. The configuration for this module is an array of :c:struct:`selector_config` pointers. The array is written in the :file:`selector_hw_def.h` file located in the board-specific directory in the application configuration directory. @@ -37,7 +37,7 @@ For every hardware selector, define the following parameters: * :c:member:`selector_config.pins_size` - Size of the array of :c:struct:`gpio_pin`. .. note:: - Each source of ``selector_event`` must have a unique ID to properly distinguish events from different sources. + Each source of a ``selector_event`` must have a unique ID to properly distinguish events from different sources. Implementation details ********************** @@ -49,8 +49,8 @@ The ``selector_event`` that the module sends to inform about the current hardwar When the application goes to sleep, selectors are not informing about the state change (interrupts are disabled). -If a selector is placed between states, it is in unknown state and ``selector_event`` is not sent. +If a selector is placed between states, it is in an unknown state and ``selector_event`` is not sent. -Recording of selector state changes is implemented using GPIO callbacks (:c:struct:`gpio_callback`) and work (:c:struct:`k_work_delayable`). +Recording of selector state changes is implemented using GPIO callbacks (:c:struct:`gpio_callback`) and a work (:c:struct:`k_work_delayable`). Each state change triggers an interrupt (GPIO interrupt for pin level high). -Callback of an interrupt submits work, which sends ``selector_event``. +The callback of an interrupt submits a work that sends the ``selector_event``. diff --git a/applications/nrf_desktop/doc/settings_loader.rst b/applications/nrf_desktop/doc/settings_loader.rst index d94544d1694f..41b8dfdb9c08 100644 --- a/applications/nrf_desktop/doc/settings_loader.rst +++ b/applications/nrf_desktop/doc/settings_loader.rst @@ -33,7 +33,11 @@ For details on the default configuration alignment, see the following sections. Settings backend ================ -By default, nRF Desktop devices use non-volatile storage settings backend (:kconfig:option:`CONFIG_SETTINGS_NVS`). +By default, the nRF Desktop application, depending on the non-volatile memory technology used by the device, uses one of the following settings backends: + +* :ref:`Zephyr Memory Storage (ZMS) ` - Used for the devices with non-volatile memory that do not require explicit erase (MRAM, RRAM). +* :ref:`Non-Volatile Storage (NVS) ` - Used for the devices with non-volatile memory that require explicit erase (FLASH). + The storage partition is located in the internal non-volatile memory. Settings load in a separate thread diff --git a/applications/nrf_desktop/doc/smp.rst b/applications/nrf_desktop/doc/smp.rst index da5f2ec8e3ed..837d9f9bea53 100644 --- a/applications/nrf_desktop/doc/smp.rst +++ b/applications/nrf_desktop/doc/smp.rst @@ -24,5 +24,5 @@ Module events Implementation details ********************** -nRF Desktop uses the |smp| from :ref:`lib_caf` (CAF). +nRF Desktop uses the |smp| from the :ref:`lib_caf` (CAF). See the :ref:`CAF module ` page for the implementation details and guide on how to perform the firmware update in the `nRF Connect Device Manager`_ application. diff --git a/applications/nrf_desktop/doc/swift_pair_app.rst b/applications/nrf_desktop/doc/swift_pair_app.rst index d25c04053683..aa56b6bce626 100644 --- a/applications/nrf_desktop/doc/swift_pair_app.rst +++ b/applications/nrf_desktop/doc/swift_pair_app.rst @@ -7,7 +7,7 @@ Swift Pair module :local: :depth: 2 -The Swift Pair module is used to enable or disable the Swift Pair Bluetooth advertising payload depending on the selected Bluetooth peer (used local identity). +The Swift Pair module is used to enable or disable the Swift Pair Bluetooth® advertising payload depending on the selected Bluetooth peer (used local identity). The module distinguishes between the dongle peer and the general Bluetooth peers. Module events @@ -23,6 +23,9 @@ Module events Configuration ************* +To enable the module, use the :ref:`CONFIG_DESKTOP_SWIFT_PAIR ` Kconfig option. +This option automatically selects the :ref:`CONFIG_DESKTOP_BLE_DONGLE_PEER_ID_INFO ` Kconfig option to enable the dongle peer ID information event. + To use the Swift Pair module, you must enable the following Kconfig options: * :kconfig:option:`CONFIG_BT_ADV_PROV_SWIFT_PAIR` - The nRF Desktop's :ref:`nrf_desktop_ble_adv` uses the :ref:`bt_le_adv_prov_readme` to generate advertising and scan response data. @@ -36,16 +39,12 @@ To use the Swift Pair module, you must enable the following Kconfig options: * :ref:`CONFIG_DESKTOP_SWIFT_PAIR_ADV_GENERAL_PEER ` If the dongle peer is disabled, there is no reason to use the module. - The Swift Pair advertising data provider can be simply enabled or disabled during a build time through a dedicated Kconfig option. - -Set the :ref:`CONFIG_DESKTOP_SWIFT_PAIR ` Kconfig option to enable the module. -This option automatically selects the :ref:`CONFIG_DESKTOP_BLE_DONGLE_PEER_ID_INFO ` Kconfig option to enable the dongle peer ID information event. Implementation details ********************** -The module is an early subscriber for :c:struct:`ble_peer_operation_event`. +The module is an early subscriber for a :c:struct:`ble_peer_operation_event`. This allows the module to enable or disable the Swift Pair advertising payload just before the Bluetooth advertising starts. -The module is a subscriber for :c:struct:`ble_dongle_peer_event`. +The module is a subscriber for a :c:struct:`ble_dongle_peer_event`. This allows the module to track the application local identity of the dongle peer. diff --git a/applications/nrf_desktop/doc/usb_state.rst b/applications/nrf_desktop/doc/usb_state.rst index 2c0fa7229719..7b5db06bff4f 100644 --- a/applications/nrf_desktop/doc/usb_state.rst +++ b/applications/nrf_desktop/doc/usb_state.rst @@ -23,26 +23,26 @@ Module events Configuration ************* -The module is enabled by selecting the :ref:`CONFIG_DESKTOP_USB_ENABLE ` option. +To enable the module, use the :ref:`CONFIG_DESKTOP_USB_ENABLE ` Kconfig option. The :ref:`CONFIG_DESKTOP_USB_ENABLE ` option is implied by the :ref:`CONFIG_DESKTOP_ROLE_HID_DONGLE ` option. The module is enabled by default for the nRF Desktop dongles because the dongles forward the HID data to the host connected over USB. See the :ref:`nrf_desktop_hid_configuration` documentation for details. -The module can be used with either the USB legacy stack or the USB next stack. -The USB stack is selected by enabling one of the following Kconfig choice options: +You can use the module with either the USB legacy stack or the USB next stack. +To select the USB stack, enable one of the following Kconfig choice options: * :ref:`CONFIG_DESKTOP_USB_STACK_LEGACY ` The option enables USB legacy stack (:kconfig:option:`CONFIG_USB_DEVICE_STACK`). The USB legacy stack is used by default. * :ref:`CONFIG_DESKTOP_USB_STACK_NEXT ` The option enables USB next stack (:kconfig:option:`CONFIG_USB_DEVICE_STACK_NEXT`). - This is the only USB stack that supports USB High-Speed and the nRF54H20 platform. + This is the only USB stack that supports USB High-Speed and the nRF54H20 devices. .. note:: - The USB next stack integration is :ref:`experimental `. - The HID boot protocol integration is not yet fully tested and may not work properly. - The secondary image slot background erase in :ref:`nrf_desktop_dfu` may cause missing USB HID subscriptions after a USB cable is attached. + The USB next stack integration is :ref:`experimental `. + The HID boot protocol integration is not yet fully tested and may not work properly. + The secondary image slot background erase in :ref:`nrf_desktop_dfu` may cause missing USB HID subscriptions after a USB cable is attached. Some of the properties are configured in the same way for both stacks, but part of the configuration is specific to the selected USB stack. See the following sections for details. @@ -102,10 +102,10 @@ See the subsections below for details. nRF Desktop peripheral ---------------------- -The nRF Desktop peripheral devices by default use only a single HID-class USB instance. +By default, the nRF Desktop peripheral devices use only a single HID-class USB instance. In that case, this instance is used for all the HID reports. -Enable :ref:`CONFIG_DESKTOP_USB_SELECTIVE_REPORT_SUBSCRIPTION ` to use more than one USB HID-class instance on the nRF Desktop peripheral. +Enable the :ref:`CONFIG_DESKTOP_USB_SELECTIVE_REPORT_SUBSCRIPTION ` Kconfig option to use more than one USB HID-class instance on the nRF Desktop peripheral. Make sure to configure additional HID-class USB instances and create an additional :file:`usb_state_def.h` header in the configuration. The header assigns HID input reports to the HID-class USB instances. A given HID report can be handled only by a single HID-class USB instance. @@ -143,14 +143,14 @@ The same instance is used after reconnection. USB HID configuration in USB legacy stack ----------------------------------------- -For the USB legacy stack, the :ref:`CONFIG_DESKTOP_USB_STACK_LEGACY ` selects the required dependencies: :kconfig:option:`CONFIG_USB_DEVICE_STACK` and :kconfig:option:`CONFIG_USB_DEVICE_HID` Kconfig options. -The number of HID-class USB instances in the USB legacy stack is specified by :kconfig:option:`CONFIG_USB_HID_DEVICE_COUNT`. +For the USB legacy stack, the :ref:`CONFIG_DESKTOP_USB_STACK_LEGACY ` Kconfig option selects the required dependencies: :kconfig:option:`CONFIG_USB_DEVICE_STACK` and :kconfig:option:`CONFIG_USB_DEVICE_HID`. +The number of HID-class USB instances in the USB legacy stack is specified by the :kconfig:option:`CONFIG_USB_HID_DEVICE_COUNT` option. The default value of this option is updated to match requirements for either an nRF Desktop peripheral or a dongle. Low latency device configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The module sets the default value of :kconfig:option:`CONFIG_USB_HID_POLL_INTERVAL_MS` to ``1``. +The module sets the default value of the :kconfig:option:`CONFIG_USB_HID_POLL_INTERVAL_MS` Kconfig option to ``1``. For low latency of HID reports, the device requests a polling rate of 1 ms. Boot protocol configuration @@ -236,17 +236,15 @@ The module sends the report using :c:struct:`hid_report_event`, that is handled nRF54H20 support ================ -Due to the characteristics of the nRF54H20 USB Device Controller (UDC), several changes have been made in the USB state module to support the nRF54H20 platform: +Due to the characteristics of the nRF54H20 USB Device Controller (UDC), following change has been made in the USB state module to support the nRF54H20 devices: -* The USB state module creates a separate thread to initialize, enable, and disable the USB stack. * The module disables the USB stack when the USB cable is disconnected and enables the stack when the cable is connected. -These changes are applicable to the nRF54H20 platform only. -They are necessary to ensure proper USB stack operation on the nRF54H20 platform. +This change is applicable to the nRF54H20 devices only. +It is necessary to ensure proper USB stack operation on the nRF54H20 devices. -The USB stack cannot be initialized from the system workqueue thread, because it causes a deadlock. -Because of that, a separate thread is used to initialize the USB stack. -For more details, see the :ref:`CONFIG_DESKTOP_USB_INIT_THREAD ` Kconfig option. +The :kconfig:option:`CONFIG_UDC_DWC2_USBHS_VBUS_READY_TIMEOUT` Kconfig option is set to a non-zero value to prevent the :c:func:`usbd_enable` function from blocking the application forever when the USB cable is not connected. +Instead, the function returns an error on timeout. The UDC is powered down whenever the USB cable is disconnected, failing to trigger the necessary callbacks to the USB stack. It may cause the USB stack to become non-functional. The USB stack is disabled upon disconnecting the cable to work around this issue. diff --git a/applications/nrf_desktop/doc/usb_state_pm.rst b/applications/nrf_desktop/doc/usb_state_pm.rst index 37a8cbdaf8fb..192ccb2a3b6f 100644 --- a/applications/nrf_desktop/doc/usb_state_pm.rst +++ b/applications/nrf_desktop/doc/usb_state_pm.rst @@ -23,8 +23,8 @@ Module events Configuration ************* -The module is enabled by selecting :ref:`CONFIG_DESKTOP_USB_PM_ENABLE ` option. -It depends on :ref:`CONFIG_DESKTOP_USB_ENABLE ` and :kconfig:option:`CONFIG_CAF_POWER_MANAGER` options. +To enable the module, use the :ref:`CONFIG_DESKTOP_USB_PM_ENABLE ` Kconfig option. +It depends on the options :ref:`CONFIG_DESKTOP_USB_ENABLE ` and :kconfig:option:`CONFIG_CAF_POWER_MANAGER`. The log level is inherited from the :ref:`nrf_desktop_usb_state`. diff --git a/applications/nrf_desktop/doc/watchdog.rst b/applications/nrf_desktop/doc/watchdog.rst index cc333d7eab1f..d5c70c45c701 100644 --- a/applications/nrf_desktop/doc/watchdog.rst +++ b/applications/nrf_desktop/doc/watchdog.rst @@ -25,23 +25,23 @@ Module events Configuration ************* +To enable the module, use the :ref:`CONFIG_DESKTOP_WATCHDOG_ENABLE ` Kconfig option. + The module uses Zephyr's :ref:`zephyr:watchdog_api` driver. For this reason, it automatically selects the :kconfig:option:`CONFIG_WATCHDOG` option. The ``watchdog0`` DTS alias determines the watchdog instance used by the module. -The module is enabled by the :ref:`CONFIG_DESKTOP_WATCHDOG_ENABLE ` option. - You must define :ref:`CONFIG_DESKTOP_WATCHDOG_TIMEOUT ` option. After this amount of time (in ms), the device will be restarted if the watchdog timer was not reset. .. note:: - The module is by default used only in the release configurations that do not enable logs. - When the :ref:`CONFIG_DESKTOP_LOG ` Kconfig option is enabled, enabling watchdog timer can cause losing logs, for example, when the logger is in the panic mode. + By default, the module is used only in the ``release`` configurations that do not enable logs. + When the :ref:`CONFIG_DESKTOP_LOG ` Kconfig option is set, enabling the watchdog timer can cause losing logs, for example, when the logger is in the panic mode. Implementation details ********************** -The watchdog timer is started when the :ref:`nrf_desktop_main` is ready (which is reported using :c:struct:`module_state_event`). +The watchdog timer is started when the :ref:`nrf_desktop_main` is ready (which is reported using the :c:struct:`module_state_event`). The module periodically resets the watchdog timer using :c:struct:`k_work_delayable`. -The work resubmits itself with delay equal to ``CONFIG_DESKTOP_WATCHDOG_TIMEOUT / 3``. -In case of the system hang, the work will not be processed, the watchdog timer will not be reset on time, and the system will be restarted. +The work resubmits itself with a delay equal to ``CONFIG_DESKTOP_WATCHDOG_TIMEOUT/3``. +In case of system hang, the work will not be processed, the watchdog timer will not be reset on time, and the system will be restarted. diff --git a/applications/nrf_desktop/doc/wheel.rst b/applications/nrf_desktop/doc/wheel.rst index c2ac76661450..8a60d3da547e 100644 --- a/applications/nrf_desktop/doc/wheel.rst +++ b/applications/nrf_desktop/doc/wheel.rst @@ -22,7 +22,7 @@ Module events Configuration ************* -Enable the module with the :ref:`CONFIG_DESKTOP_WHEEL_ENABLE ` Kconfig option. +To enable the module, use the :ref:`CONFIG_DESKTOP_WHEEL_ENABLE ` Kconfig option. For detecting rotation, the wheel module uses Zephyr's QDEC driver. You can enable the module only when QDEC is configured in DTS and the Zephyr's QDEC driver is enabled with the :kconfig:option:`CONFIG_QDEC_NRFX` Kconfig option. @@ -31,10 +31,10 @@ If your board supports only one QDEC instance, the module relies on the ``qdec`` The QDEC DTS configuration specifies how many steps are done during one full angle. The sensor reports the rotation data in angle degrees. -Then, :ref:`CONFIG_DESKTOP_WHEEL_SENSOR_VALUE_DIVIDER ` (a wheel configuration option) converts the angle value into a value that is passed with a ``wheel_event`` to the destination module. +The :ref:`CONFIG_DESKTOP_WHEEL_SENSOR_VALUE_DIVIDER ` (a wheel configuration option) converts the angle value into a value that is passed with a ``wheel_event`` to the destination module. For example, configuring QDEC with 24 steps means that for each step the sensor will report a rotation of 15 degrees. -For HID to see this rotation as increment of one, :ref:`CONFIG_DESKTOP_WHEEL_SENSOR_VALUE_DIVIDER ` should be set to 15. +For HID to see this rotation as increment of one, set the :ref:`CONFIG_DESKTOP_WHEEL_SENSOR_VALUE_DIVIDER ` Kconfig option to 15. Implementation details ********************** @@ -49,10 +49,10 @@ The wheel module can be in the following states: When in ``STATE_ACTIVE``, the module enables the QDEC driver and waits for callback that indicates rotation. The QDEC driver may consume power during its operation. -If no rotation is detected after the time specified in :ref:`CONFIG_DESKTOP_WHEEL_SENSOR_IDLE_TIMEOUT `, the wheel module switches to ``STATE_ACTIVE_IDLE``, in which QDEC is disabled. -In this state, the rotation is detected using GPIO interrupts. -When the rotation is detected, the module switches back to ``STATE_ACTIVE``. +If no rotation is detected after the time specified in the :ref:`CONFIG_DESKTOP_WHEEL_SENSOR_IDLE_TIMEOUT ` Kconfig option, the wheel module switches to ``STATE_ACTIVE_IDLE``, in which QDEC is disabled. +In this state, rotation is detected using GPIO interrupts. +When rotation is detected, the module switches back to ``STATE_ACTIVE``. -When the system enters the low power state, the wheel module goes to ``STATE_SUSPENDED``. -In this state, the rotation is detected using the GPIO interrupts. +When the system enters the low power state, the wheel module switches to ``STATE_SUSPENDED``. +In this state, rotation is detected using the GPIO interrupts. The module issues a system wake-up event on wheel movement. diff --git a/applications/nrf_desktop/fwupd.rst b/applications/nrf_desktop/fwupd.rst index b184b155042d..c4cf487dedaf 100644 --- a/applications/nrf_desktop/fwupd.rst +++ b/applications/nrf_desktop/fwupd.rst @@ -19,6 +19,11 @@ The fwupd project allows communication with multiple types of devices through va The communication protocols are implemented using plugins. The plugin associated with the DFU protocol realized through the :ref:`nrf_desktop_config_channel` is branded as ``nordic_hid``. +.. note:: + The format version of the :file:`dfu_application.zip` file generated by the build system was updated from ``0`` to ``1`` since the |NCS| v2.7.0 release. + The format version ``1`` is supported by the fwupd since the 1.9.25 release. + Older releases do not support the format version of ``1``. + Adding a new device ******************* diff --git a/applications/nrf_desktop/memory_layout.rst b/applications/nrf_desktop/memory_layout.rst index f0e3a00768ce..3749b9bbba9f 100644 --- a/applications/nrf_desktop/memory_layout.rst +++ b/applications/nrf_desktop/memory_layout.rst @@ -28,7 +28,7 @@ The memory layout is defined through one of the following methods: By default, a Zephyr-based application defines the memory layout in the DTS. If enabled, the :ref:`partition_manager` defines a new memory layout that is used instead of the memory layout defined in the DTS. You can use the :kconfig:option:`CONFIG_PARTITION_MANAGER_ENABLED` Kconfig option value to check whether the Partition Manager is enabled in the current build. -The option is automatically selected as part of the :ref:`ug_multi_image` feature to build the application with more than one image. +The option is automatically enabled when using Zephyr's :ref:`zephyr:sysbuild` (unless your board uses nRF54H SoC Series). Enabling the :ref:`nrf_desktop_bluetooth_guide_fast_pair` also results in using the Partition Manager. To store the Fast Pair Provisioning data, the Fast Pair integration in the |NCS| uses partition defined by the Partition Manager. diff --git a/applications/nrf_desktop/modules.rst b/applications/nrf_desktop/modules.rst index 69ff8302f840..3edae6a8e45c 100644 --- a/applications/nrf_desktop/modules.rst +++ b/applications/nrf_desktop/modules.rst @@ -43,12 +43,14 @@ These are valid for events that have many listeners or sources, and are gathered doc/dfu.rst doc/dfu_mcumgr.rst doc/dfu_lock.rst + doc/dvfs.rst doc/factory_reset.rst doc/failsafe.rst doc/fast_pair_app.rst doc/fn_keys.rst doc/bas.rst doc/hid_forward.rst + doc/hid_reportq.rst doc/hid_state.rst doc/hid_state_pm.rst doc/hids.rst diff --git a/applications/nrf_desktop/nRF21540ek_support.rst b/applications/nrf_desktop/nRF21540ek_support.rst index 18c8bcd55ebe..40c2eb9ca6b8 100644 --- a/applications/nrf_desktop/nRF21540ek_support.rst +++ b/applications/nrf_desktop/nRF21540ek_support.rst @@ -35,6 +35,6 @@ The command for ``nrf5340dk/nrf5340/cpuapp`` with ``nrf21540ek`` shield would lo .. code-block:: console - west build -b nrf5340dk/nrf5340/cpuapp -- -DSHIELD=nrf21540ek_fwd -Dipc_radio_SHIELD=nrf21540ek -DCONFIG_CAF_BLE_USE_LLPM=n + west build -b nrf5340dk/nrf5340/cpuapp -- -DSHIELD=nrf21540ek -Dipc_radio_SHIELD=nrf21540ek -DCONFIG_CAF_BLE_USE_LLPM=n For detailed information about building an application using the nRF21540 EK, see the :ref:`ug_radio_fem_nrf21540ek_programming` section in the Working with RF Front-end modules documentation. diff --git a/applications/nrf_desktop/pytest/test_mcuboot_kmu.py b/applications/nrf_desktop/pytest/test_mcuboot_kmu.py new file mode 100644 index 000000000000..f166327f35f5 --- /dev/null +++ b/applications/nrf_desktop/pytest/test_mcuboot_kmu.py @@ -0,0 +1,103 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +import os +import logging +import subprocess +import re +import shlex + +from twister_harness import DeviceAdapter +from twister_harness.helpers.utils import find_in_config + +logger = logging.getLogger(__name__) + +def run_command(command: list[str], timeout: int = 30): + try: + ret: subprocess.CompletedProcess = subprocess.run(command, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + timeout=timeout) + except subprocess.TimeoutExpired: + logger.error(f"Timeout expired for command: {shlex.join(command)}") + raise + + if ret.returncode: + logger.error(f"Command failed: {shlex.join(command)}") + logger.error(ret.stdout) + raise subprocess.CalledProcessError(ret.returncode, command) + + +def _mcuboot_key_path(dut: DeviceAdapter): + mcuboot_conf_path = os.path.join(str(dut.device_config.build_dir), "mcuboot", "zephyr", + ".config") + return find_in_config(mcuboot_conf_path, "CONFIG_BOOT_SIGNATURE_KEY_FILE") + + +def mcuboot_provision(dut: DeviceAdapter): + soc = dut.device_config.platform.split("/")[1] + key_path = _mcuboot_key_path(dut) + command = ["west", "ncs-provision", "upload", "-s", soc, "-k", key_path] + if dut.device_config.id: + command.extend(["--dev-id", dut.device_config.id]) + + logger.info("KMU provisioning") + run_command(command) + + +def board_reset(dut: DeviceAdapter): + command = ["nrfutil", "device", "reset"] + if dut.device_config.id: + command.extend(["--serial-number", dut.device_config.id]) + + logger.info("Resetting board") + run_command(command) + + +def logs_verify(dut: DeviceAdapter): + # Expected logs are sourced from nRF Desktop `sample.yaml` file. + expected_logs = [ + "app_event_manager: e:module_state_event module:main state:READY", + "ble_state: Bluetooth initialized", + "settings_loader: Settings loaded", + "ble_bond: Selected Bluetooth LE peers", + "(ble_adv: Advertising started)|(ble_scan: Scan started)", + "dfu: Secondary image slot is clean" + ] + error_log = "" + + expected_regexes = list(map(re.compile, expected_logs)) + + while True: + line = dut.readline(timeout=120) + + if line is None: + break + + assert error_log not in line + + for r in expected_regexes: + if r.search(line): + expected_regexes.remove(r) + + if len(expected_regexes) == 0: + break + + + # Expect to match all of the regexes + assert len(expected_regexes) == 0 + + +def test_boot(dut: DeviceAdapter): + # nRF Desktop and bootloader images are already programmed at this stage. + mcuboot_provision(dut) + + # Clear buffer to ensure proper state and then reset the board to start test. + dut.clear_buffer() + board_reset(dut) + + logs_verify(dut) diff --git a/applications/nrf_desktop/sample.yaml b/applications/nrf_desktop/sample.yaml index c3a8061c877d..edb7bf03bd0d 100644 --- a/applications/nrf_desktop/sample.yaml +++ b/applications/nrf_desktop/sample.yaml @@ -1,12 +1,13 @@ sample: name: nRF Desktop - HID reference design - description: The nRF Desktop is an HID reference design application. - It can be configured to function as a mouse, keyboard or USB dongle - bridging radio connected HID peripheral. + description: The nRF Desktop is an HID reference design application. It can be configured + to function as a mouse, keyboard or USB dongle bridging radio connected HID peripheral. common: sysbuild: true - tags: ci_build sysbuild ci_applications_nrf_desktop - harness: console + tags: + - ci_build + - sysbuild + - ci_applications_nrf_desktop harness_config: type: multi_line ordered: false @@ -18,19 +19,36 @@ common: - "(ble_adv: Advertising started)|(ble_scan: Scan started)" - "dfu: Secondary image slot is clean" tests: + applications.nrf_desktop.zdebug.uart.kmu_provision: + platform_allow: + - nrf54l15dk/nrf54l10/cpuapp + - nrf54l15dk/nrf54l15/cpuapp + integration_platforms: + - nrf54l15dk/nrf54l10/cpuapp + - nrf54l15dk/nrf54l15/cpuapp + timeout: 180 + harness: pytest applications.nrf_desktop.zdebug.uart: platform_allow: - nrf54h20dk/nrf54h20/cpuapp - - nrf54l15dk/nrf54l15/cpuapp integration_platforms: - nrf54h20dk/nrf54h20/cpuapp - - nrf54l15dk/nrf54l15/cpuapp + harness: console applications.nrf_desktop.zdebug: build_only: true - platform_allow: > - nrf52dmouse/nrf52832 nrf52kbd/nrf52832 nrf52810dmouse/nrf52810 nrf52820dongle/nrf52820 - nrf52833dk/nrf52820 nrf52833dk/nrf52833 nrf52833dongle/nrf52833 nrf52840dk/nrf52840 - nrf52840dongle/nrf52840 nrf52840gmouse/nrf52840 nrf5340dk/nrf5340/cpuapp + platform_allow: + - nrf52dmouse/nrf52832 + - nrf52kbd/nrf52832 + - nrf52810dmouse/nrf52810 + - nrf52820dongle/nrf52820 + - nrf52833dk/nrf52820 + - nrf52833dk/nrf52833 + - nrf52833dongle/nrf52833 + - nrf52840dk/nrf52840 + - nrf52840dongle/nrf52840 + - nrf52840gmouse/nrf52840 + - nrf5340dk/nrf5340/cpuapp + - nrf54l15dk/nrf54l05/cpuapp integration_platforms: - nrf52dmouse/nrf52832 - nrf52kbd/nrf52832 @@ -43,29 +61,38 @@ tests: - nrf52840dongle/nrf52840 - nrf52840gmouse/nrf52840 - nrf5340dk/nrf5340/cpuapp + - nrf54l15dk/nrf54l05/cpuapp applications.nrf_desktop.zdebug_wwcb: build_only: true platform_allow: nrf52840dk/nrf52840 integration_platforms: - nrf52840dk/nrf52840 extra_args: FILE_SUFFIX=wwcb - applications.nrf_desktop.zdebug_fast_pair.gmouse.uart: + applications.nrf_desktop.zdebug_fast_pair.gmouse.uart.kmu_provision: platform_allow: + - nrf54l15dk/nrf54l10/cpuapp - nrf54l15dk/nrf54l15/cpuapp integration_platforms: + - nrf54l15dk/nrf54l10/cpuapp - nrf54l15dk/nrf54l15/cpuapp - extra_args: FILE_SUFFIX=fast_pair - FP_MODEL_ID=0x8E717D - FP_ANTI_SPOOFING_KEY=dZxFzP7X9CcfLPC0apyRkmgsh3n2EbWo9NFNXfVuxAM= + extra_args: + - FILE_SUFFIX=fast_pair + - FP_MODEL_ID=0x8E717D + - FP_ANTI_SPOOFING_KEY=dZxFzP7X9CcfLPC0apyRkmgsh3n2EbWo9NFNXfVuxAM= + timeout: 180 + harness: pytest applications.nrf_desktop.zdebug_fast_pair.gmouse: build_only: true - platform_allow: nrf52840dk/nrf52840 nrf52840gmouse/nrf52840 + platform_allow: + - nrf52840dk/nrf52840 + - nrf52840gmouse/nrf52840 integration_platforms: - nrf52840dk/nrf52840 - nrf52840gmouse/nrf52840 - extra_args: FILE_SUFFIX=fast_pair - FP_MODEL_ID=0x8E717D - FP_ANTI_SPOOFING_KEY=dZxFzP7X9CcfLPC0apyRkmgsh3n2EbWo9NFNXfVuxAM= + extra_args: + - FILE_SUFFIX=fast_pair + - FP_MODEL_ID=0x8E717D + - FP_ANTI_SPOOFING_KEY=dZxFzP7X9CcfLPC0apyRkmgsh3n2EbWo9NFNXfVuxAM= applications.nrf_desktop.zdebug_mcuboot_qspi: build_only: true platform_allow: nrf52840dk/nrf52840 @@ -74,16 +101,22 @@ tests: extra_args: FILE_SUFFIX=mcuboot_qspi applications.nrf_desktop.zdebug_mcuboot_smp: build_only: true - platform_allow: nrf52840dk/nrf52840 nrf52840gmouse/nrf52840 + platform_allow: + - nrf52840dk/nrf52840 + - nrf52840gmouse/nrf52840 integration_platforms: - nrf52840dk/nrf52840 - nrf52840gmouse/nrf52840 extra_args: FILE_SUFFIX=mcuboot_smp applications.nrf_desktop.zdebugwithshell: build_only: true - platform_allow: > - nrf52kbd/nrf52832 nrf52833dk/nrf52833 nrf52833dongle/nrf52833 nrf52840dk/nrf52840 - nrf52840dongle/nrf52840 nrf52840gmouse/nrf52840 + platform_allow: + - nrf52kbd/nrf52832 + - nrf52833dk/nrf52833 + - nrf52833dongle/nrf52833 + - nrf52840dk/nrf52840 + - nrf52840dongle/nrf52840 + - nrf52840gmouse/nrf52840 integration_platforms: - nrf52kbd/nrf52832 - nrf52833dk/nrf52833 @@ -111,12 +144,16 @@ tests: integration_platforms: - nrf52840dk/nrf52840 extra_args: FILE_SUFFIX=dongle - applications.nrf_desktop.zdebug_keyboard.uart: + applications.nrf_desktop.zdebug_keyboard.uart.kmu_provision: platform_allow: + - nrf54l15dk/nrf54l10/cpuapp - nrf54l15dk/nrf54l15/cpuapp integration_platforms: + - nrf54l15dk/nrf54l10/cpuapp - nrf54l15dk/nrf54l15/cpuapp extra_args: FILE_SUFFIX=keyboard + timeout: 180 + harness: pytest applications.nrf_desktop.zdebug_keyboard: build_only: true platform_allow: @@ -124,6 +161,13 @@ tests: integration_platforms: - nrf52840dk/nrf52840 extra_args: FILE_SUFFIX=keyboard + applications.nrf_desktop.zrelease_keyboard: + build_only: true + platform_allow: + - nrf54l15dk/nrf54l05/cpuapp + integration_platforms: + - nrf54l15dk/nrf54l05/cpuapp + extra_args: FILE_SUFFIX=release_keyboard applications.nrf_desktop.zdebug_nrf21540ek: build_only: true platform_allow: nrf52840dk/nrf52840 @@ -137,8 +181,9 @@ tests: platform_allow: nrf5340dk/nrf5340/cpuapp integration_platforms: - nrf5340dk/nrf5340/cpuapp - extra_args: SHIELD=nrf21540ek_fwd - ipc_radio_SHIELD=nrf21540ek + extra_args: + - SHIELD=nrf21540ek + - ipc_radio_SHIELD=nrf21540ek extra_configs: - CONFIG_CAF_BLE_USE_LLPM=n applications.nrf_desktop.zrelease: @@ -156,6 +201,8 @@ tests: - nrf52840gmouse/nrf52840 - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - nrf54l15dk/nrf54l05/cpuapp + - nrf54l15dk/nrf54l10/cpuapp - nrf54l15dk/nrf54l15/cpuapp integration_platforms: - nrf52dmouse/nrf52832 @@ -170,6 +217,8 @@ tests: - nrf52840gmouse/nrf52840 - nrf5340dk/nrf5340/cpuapp - nrf54h20dk/nrf54h20/cpuapp + - nrf54l15dk/nrf54l05/cpuapp + - nrf54l15dk/nrf54l10/cpuapp - nrf54l15dk/nrf54l15/cpuapp extra_args: FILE_SUFFIX=release applications.nrf_desktop.zrelease_fast_pair.keyboard: @@ -177,17 +226,22 @@ tests: platform_allow: nrf52kbd/nrf52832 integration_platforms: - nrf52kbd/nrf52832 - extra_args: FILE_SUFFIX=release_fast_pair - FP_MODEL_ID=0x52FF02 - FP_ANTI_SPOOFING_KEY=8E8ulwhSIp/skZeg27xmWv2SxRxTOagypHrf2OdrhGY= + extra_args: + - FILE_SUFFIX=release_fast_pair + - FP_MODEL_ID=0x52FF02 + - FP_ANTI_SPOOFING_KEY=8E8ulwhSIp/skZeg27xmWv2SxRxTOagypHrf2OdrhGY= applications.nrf_desktop.zrelease_fast_pair.gmouse: build_only: true - platform_allow: nrf52840gmouse/nrf52840 + platform_allow: + - nrf52840gmouse/nrf52840 + - nrf54l15dk/nrf54l05/cpuapp integration_platforms: - nrf52840gmouse/nrf52840 - extra_args: FILE_SUFFIX=release_fast_pair - FP_MODEL_ID=0x8E717D - FP_ANTI_SPOOFING_KEY=dZxFzP7X9CcfLPC0apyRkmgsh3n2EbWo9NFNXfVuxAM= + - nrf54l15dk/nrf54l05/cpuapp + extra_args: + - FILE_SUFFIX=release_fast_pair + - FP_MODEL_ID=0x8E717D + - FP_ANTI_SPOOFING_KEY=dZxFzP7X9CcfLPC0apyRkmgsh3n2EbWo9NFNXfVuxAM= applications.nrf_desktop.zrelease_4llpmconn: build_only: true platform_allow: nrf52840dongle/nrf52840 @@ -196,8 +250,10 @@ tests: extra_args: FILE_SUFFIX=release_4llpmconn applications.nrf_desktop.zdebug.usb_next: build_only: true - platform_allow: > - nrf52840dk/nrf52840 nrf52840gmouse/nrf52840 nrf52840dongle/nrf52840 + platform_allow: + - nrf52840dk/nrf52840 + - nrf52840gmouse/nrf52840 + - nrf52840dongle/nrf52840 integration_platforms: - nrf52840dk/nrf52840 - nrf52840gmouse/nrf52840 diff --git a/applications/nrf_desktop/src/hw_interface/wheel.c b/applications/nrf_desktop/src/hw_interface/wheel.c index bb12cecac51f..e124fa5a0772 100644 --- a/applications/nrf_desktop/src/hw_interface/wheel.c +++ b/applications/nrf_desktop/src/hw_interface/wheel.c @@ -114,9 +114,16 @@ static void data_ready_handler(const struct device *dev, const struct sensor_tri k_spin_unlock(&lock, key); } + int err = sensor_sample_fetch_chan(qdec_dev, SENSOR_CHAN_ROTATION); + + if (err) { + LOG_ERR("Cannot fetch sensor sample (err %d)", err); + return; + } + struct sensor_value value; - int err = sensor_channel_get(qdec_dev, SENSOR_CHAN_ROTATION, &value); + err = sensor_channel_get(qdec_dev, SENSOR_CHAN_ROTATION, &value); if (err) { LOG_ERR("Cannot get sensor value"); return; diff --git a/applications/nrf_desktop/src/modules/Kconfig.ble_conn_params b/applications/nrf_desktop/src/modules/Kconfig.ble_conn_params index 7a02f80bdc0e..d6a7cae22e83 100644 --- a/applications/nrf_desktop/src/modules/Kconfig.ble_conn_params +++ b/applications/nrf_desktop/src/modules/Kconfig.ble_conn_params @@ -35,12 +35,25 @@ config DESKTOP_BLE_USB_MANAGED_CI_VALUE Connection interval used for all connected peers while the USB is in suspended state. +config DESKTOP_BLE_USB_MANAGED_LATENCY_VALUE + int "BLE peripheral latency when USB is suspended" + default 1 + depends on DESKTOP_BLE_USB_MANAGED_CI + range 1 10 + help + Peripheral latency used for all connected peers while the USB is in + suspended state. + if !DESKTOP_BLE_USB_MANAGED_CI config DESKTOP_BLE_USB_MANAGED_CI_VALUE int default 0 +config DESKTOP_BLE_USB_MANAGED_LATENCY_VALUE + int + default 0 + endif # !DESKTOP_BLE_USB_MANAGED_CI module = DESKTOP_BLE_CONN_PARAMS diff --git a/applications/nrf_desktop/src/modules/Kconfig.caf_settings_loader.default b/applications/nrf_desktop/src/modules/Kconfig.caf_settings_loader.default index 786dcd959f94..3667ee32c274 100644 --- a/applications/nrf_desktop/src/modules/Kconfig.caf_settings_loader.default +++ b/applications/nrf_desktop/src/modules/Kconfig.caf_settings_loader.default @@ -10,7 +10,8 @@ config DESKTOP_SETTINGS_LOADER bool "Settings loader module (CAF)" select CAF_SETTINGS_LOADER select SETTINGS - imply NVS + imply ZMS if (SOC_FLASH_NRF_RRAM || SOC_FLASH_NRF_MRAM) + imply NVS if !(SOC_FLASH_NRF_RRAM || SOC_FLASH_NRF_MRAM) imply FLASH imply FLASH_MAP imply FLASH_PAGE_LAYOUT @@ -18,17 +19,16 @@ config DESKTOP_SETTINGS_LOADER nRF Desktop uses settings loader module from Common Application Framework (CAF). - By default, nRF Desktop application uses non-volatile storage backend - and the settings partition is located in internal FLASH. + The settings partition is located in internal non-volatile memory. + By default, nRF Desktop application, depending on the non-volatile + memory technology used by the device, uses either the Zephyr Memory + Storage (ZMS) or Non-Volatile Storage (NVS) settings backend. + ZMS is used for the devices with the RRAM or MRAM non-volatile memory + that do not require explicit erase. Otherwise, the NVS is used. if DESKTOP_SETTINGS_LOADER -choice SETTINGS_BACKEND - default SETTINGS_NVS - help - By default, nRF Desktop application uses non-volatile storage - settings backend. -endchoice +if NVS config NVS_LOG_LEVEL default 2 @@ -36,6 +36,18 @@ config NVS_LOG_LEVEL The nRF Desktop shows only warning and error logs related to the NVS. This is done to avoid flooding logs. +endif # NVS + +if ZMS + +config ZMS_LOG_LEVEL + default 2 + help + The nRF Desktop shows only warning and error logs related to the ZMS. + This is done to avoid flooding logs. + +endif # ZMS + config SETTINGS_DYNAMIC_HANDLERS default n help diff --git a/applications/nrf_desktop/src/modules/Kconfig.dvfs b/applications/nrf_desktop/src/modules/Kconfig.dvfs index a7adaf0f28fa..8d83b5c6a936 100644 --- a/applications/nrf_desktop/src/modules/Kconfig.dvfs +++ b/applications/nrf_desktop/src/modules/Kconfig.dvfs @@ -5,8 +5,12 @@ # menuconfig DESKTOP_DVFS - bool "DVFS module" + bool "DVFS module [EXPERIMENTAL]" depends on SOC_NRF54H20_CPUAPP + select EXPERIMENTAL + select NRFS_DVFS_SERVICE_ENABLED + select CLOCK_CONTROL + select CLOCK_CONTROL_NRF2 default y help This option enable DVFS module which switches frequency and voltage according @@ -14,6 +18,18 @@ menuconfig DESKTOP_DVFS if DESKTOP_DVFS +config DESKTOP_DVFS_FREQ_HIGH + int + default 320000000 + +config DESKTOP_DVFS_FREQ_MED + int + default 128000000 + +config DESKTOP_DVFS_FREQ_LOW + int + default 64000000 + config DESKTOP_DVFS_RETRY_BUSY_TIMEOUT_MS int "Retry timeout" default 1 diff --git a/applications/nrf_desktop/src/modules/Kconfig.failsafe b/applications/nrf_desktop/src/modules/Kconfig.failsafe index 157e47bc024d..11da74324c2b 100644 --- a/applications/nrf_desktop/src/modules/Kconfig.failsafe +++ b/applications/nrf_desktop/src/modules/Kconfig.failsafe @@ -10,6 +10,7 @@ config DESKTOP_FAILSAFE_ENABLE bool "Enable failsafe" depends on WATCHDOG depends on !RESET_ON_FATAL_ERROR + select HWINFO help When a device is rebooted by watchdog or due to the CPU lockup, the settings partition will be erased. diff --git a/applications/nrf_desktop/src/modules/Kconfig.hid_forward b/applications/nrf_desktop/src/modules/Kconfig.hid_forward index 89e7fd313748..52b243b26825 100644 --- a/applications/nrf_desktop/src/modules/Kconfig.hid_forward +++ b/applications/nrf_desktop/src/modules/Kconfig.hid_forward @@ -18,6 +18,19 @@ config DESKTOP_HID_FORWARD_ENABLE if DESKTOP_HID_FORWARD_ENABLE +config DESKTOP_HID_FORWARD_SUBSCRIBER_COUNT + int "Number of HID subscribers" + range 1 255 + default DESKTOP_HID_DONGLE_BOND_COUNT + help + By default, the module uses a dedicated HID subscriber (USB HID class + instance) for every BLE bonded HID peripheral. Set this option to 1 to + forward all of the HID reports received from HID peripherals to one + subscriber (required if using a single USB HID instance). + + The configured number of HID subscribers must match number of USB HID + class instances. + config BT_HOGP_REPORTS_MAX default 12 help diff --git a/applications/nrf_desktop/src/modules/Kconfig.hotfixes b/applications/nrf_desktop/src/modules/Kconfig.hotfixes index edd22807078b..75724b7c0166 100644 --- a/applications/nrf_desktop/src/modules/Kconfig.hotfixes +++ b/applications/nrf_desktop/src/modules/Kconfig.hotfixes @@ -7,23 +7,55 @@ menu "Hotfix set" config DESKTOP_HFCLK_LOCK_ENABLE - bool "Keep HF clock enabled" + bool "Keep HF clock enabled [DEPRECATED]" + depends on CAF_BLE_USE_LLPM + depends on !SOC_SERIES_NRF54HX + select DEPRECATED help - Keeping the HF clock enabled is needed to reduce the latency before - the first packet (in a row) is transmitted over the BLE. - If disabled a startup delay of around 1.5 ms will be added to - overall latency of the first packet. - If enabled current consumption is increased. + The HF clock needs to be enabled during data transmission over BLE. + Enabling the HF clock right before the data transmission adds an extra + latency of around 1.4 ms (0.85 ms in case of nRF54L Series SoCs) for + the first packet (in a row) that is transmitted. The extra latency is + caused by the HF clock startup latency. Keeping the HF clock enabled + all the time removes the extra latency caused by the clock startup at + the cost of increased power consumption. + + The HF clock lock hotfix is not supported for nRF54H Series SoCs. For + these SoCs, a part of the Bluetooth stack runs on the radio core. + Keeping the HF clock enabled by the application running on application + core does not mitigate the extra HID report latency caused by the HF + clock startup, because the application cannot notify a part of the + Bluetooth stack running on the radio core that HF clock is already + enabled. The clock startup latency unconditionally affects the first + transmitted packet. + + The hotfix is deprecated and will be removed in the future. Use the + CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK instead. Setting the peripheral + latency LLPM connection parameter to `0` on a peripheral leads to + keeping the HF clock enabled. That mitigates the extra HID report + latency caused by the HF clock startup delay. config DESKTOP_CONSTLAT_ENABLE bool "Constant latency interrupts" + depends on !SOC_SERIES_NRF54LX + depends on !SOC_SERIES_NRF54HX + select NRFX_POWER help - When enabled SoC will use configuration for constant latency + When enabled, the SoC uses configuration for constant latency interrupts. This reduces interrupt propagation time but increases power consumption. + Currently, the nRF54L Series SoCs do not support the nrfx POWER driver + (CONFIG_NRFX_POWER). Because of that, the hotfix cannot be used by + these SoCs. + + nRF54H Series SoCs do not enable constant latency interrupts through + the nrfx POWER driver. This SoC series is currently not supported + by the hotfix. + config DESKTOP_CONSTLAT_DISABLE_ON_STANDBY bool "Disable constant latency interrupts on standby" + depends on CAF_PM_EVENTS depends on DESKTOP_CONSTLAT_ENABLE help When enabled constant latency interrupts will be disabled when diff --git a/applications/nrf_desktop/src/modules/Kconfig.usb_state b/applications/nrf_desktop/src/modules/Kconfig.usb_state index a0f7424236b6..f040a3350bfb 100644 --- a/applications/nrf_desktop/src/modules/Kconfig.usb_state +++ b/applications/nrf_desktop/src/modules/Kconfig.usb_state @@ -57,37 +57,6 @@ config DESKTOP_USB_HID_REPORT_SENT_ON_SOF report pipeline with two sequential reports is required to ensure that the USB peripheral can provide a HID report on every USB poll. -config DESKTOP_USB_INIT_THREAD - bool - default y if SOC_SERIES_NRF54HX - help - Initialize USB stack in a separate thread instead of doing it in - the context of the system workqueue. - For the nRF54HX SoC use-case, the usbd_init() function blocks while - waiting for a synchronization object that is received after the system - controller sends the USB service event through the NRFS and IPC with - the ICMSG backend to the application core. - The ICMSG backend uses the system workqueue context for both - initialization and on the incoming message handling, so calling the - usbd_init() function from the same context causes deadlock during - application boot. - -config DESKTOP_USB_INIT_THREAD_STACK_SIZE - int - default 2048 - -config DESKTOP_USB_INIT_THREAD_PRIORITY - int - default -1 - -config DESKTOP_USB_INIT_THREAD_DELAY_MS - int - default 30 - help - Due to an issue in the USB stack initialization on the nRF54HX SoC, - the usbd_init() cannot be called too early. The delay is introduced - to delay this call. - choice DESKTOP_USB_STACK prompt "USB stack" default DESKTOP_USB_STACK_LEGACY @@ -96,16 +65,9 @@ config DESKTOP_USB_STACK_NEXT bool "USB next stack [EXPERIMENTAL]" select EXPERIMENTAL select USB_DEVICE_STACK_NEXT - imply SOC_FLASH_NRF_PARTIAL_ERASE help Use experimental integration of USB next stack. - The option implies partial erase of nRF SoC flash in the driver - configuration to improve stability of the USB next stack. The partial - erase feature works around device errors that might be reported by - Windows USB host in Device Manager if USB cable is connected while - erasing secondary image slot in background. - config DESKTOP_USB_STACK_LEGACY bool "USB legacy stack" select USB_DEVICE_STACK @@ -206,20 +168,29 @@ config USBD_HID_IN_BUF_COUNT config DESKTOP_USB_STACK_NEXT_DISABLE_ON_VBUS_REMOVAL bool default y if SOC_SERIES_NRF54HX - depends on DESKTOP_USB_INIT_THREAD - select REBOOT - help - Disable USB stack on VBUS removal. This is a workaround for the USB - driver not working correctly on the nRF54HX SoC. After the USB cable - is removed, the USB driver is powered down and doesn't call appropriate - callbacks to the USB stack. It may lead to the USB stack ending in a - broken state. Calling usbd_disable() on VBUS removal workarounds this - issue. When this option is enabled, the usb_init_thread will be used to - call the usbd_enable() and usbd_disable() functions on VBUS events. This - is done because the usbd_enable() function blocks if the USB cable is - not connected. A separate thread allows the application to trigger a - reboot from the workqueue context to prevent blocking the application - forever. + help + Disable the USB stack on VBUS removal and enable it on VBUS ready to + workaround UDC driver limitations of the nRF54HX SoC. + + After the USB cable is removed, the USB driver is powered down and + doesn't call appropriate callbacks to the USB stack. It may lead to + the USB stack ending in a broken state. Calling usbd_disable() on VBUS + removal workarounds this issue. + + The usbd_enable() function blocks until USB cable is connected. If the + cable is not connected during the predefined wait period + (CONFIG_UDC_DWC2_USBHS_VBUS_READY_TIMEOUT), the function returns + earlier with a timeout error. The function is called on VBUS ready to + avoid calling usbd_enable() periodically. + +config UDC_DWC2_USBHS_VBUS_READY_TIMEOUT + int + depends on SOC_SERIES_NRF54HX + default 100 + help + For the nRF54HX SoC the timeout must be set to a non-zero value to + prevent the usbd_enable() function from blocking the application + forever when the USB cable is not connected. choice USBD_LOG_LEVEL_CHOICE default USBD_LOG_LEVEL_WRN diff --git a/applications/nrf_desktop/src/modules/ble_conn_params.c b/applications/nrf_desktop/src/modules/ble_conn_params.c index 3eb1637bcef4..7dafcee82445 100644 --- a/applications/nrf_desktop/src/modules/ble_conn_params.c +++ b/applications/nrf_desktop/src/modules/ble_conn_params.c @@ -37,11 +37,12 @@ LOG_MODULE_REGISTER(MODULE, CONFIG_DESKTOP_BLE_CONN_PARAMS_LOG_LEVEL); #define CONN_INTERVAL_MS_TO_REG(_x) (((_x) * USEC_PER_MSEC) / 1250U) /* REG = MS / 1,25 ms */ #define CONN_INTERVAL_USB_SUSPEND CONN_INTERVAL_MS_TO_REG(CONFIG_DESKTOP_BLE_USB_MANAGED_CI_VALUE) +#define CONN_LATENCY_USB_SUSPEND CONFIG_DESKTOP_BLE_USB_MANAGED_LATENCY_VALUE struct connected_peer { struct bt_conn *conn; bool discovered; - bool llpm_support; + bool use_llpm; uint16_t requested_latency; bool conn_param_update_pending; }; @@ -66,8 +67,6 @@ static struct connected_peer *find_connected_peer(const struct bt_conn *conn) static int set_le_conn_param(struct bt_conn *conn, uint16_t interval, uint16_t latency) { - int err; - struct bt_le_conn_param param = { .interval_min = interval, .interval_max = interval, @@ -75,14 +74,7 @@ static int set_le_conn_param(struct bt_conn *conn, uint16_t interval, uint16_t l .timeout = CONN_SUPERVISION_TIMEOUT, }; - err = bt_conn_le_param_update(conn, ¶m); - - if (err == -EALREADY) { - /* Connection parameters are already set. */ - err = 0; - } - - return err; + return bt_conn_le_param_update(conn, ¶m); } static int interval_reg_to_us(uint16_t reg) @@ -124,8 +116,11 @@ static int set_conn_params(struct connected_peer *peer) __ASSERT_NO_MSG(peer->conn); if (IS_ENABLED(CONFIG_DESKTOP_BLE_USB_MANAGED_CI) && usb_suspended) { - err = set_le_conn_param(peer->conn, CONN_INTERVAL_USB_SUSPEND, 0); - } else if (IS_ENABLED(CONFIG_CAF_BLE_USE_LLPM) && peer->llpm_support) { + err = set_le_conn_param(peer->conn, CONN_INTERVAL_USB_SUSPEND, + CONN_LATENCY_USB_SUSPEND); + } else if (peer->use_llpm) { + __ASSERT_NO_MSG(IS_ENABLED(CONFIG_CAF_BLE_USE_LLPM)); + struct bt_conn_info info; err = bt_conn_get_info(peer->conn, &info); @@ -136,9 +131,8 @@ static int set_conn_params(struct connected_peer *peer) uint32_t curr_ci_us = interval_reg_to_us(info.le.interval); if (curr_ci_us > CONN_INTERVAL_PRE_LLPM_MAX_US) { - err = set_le_conn_param(peer->conn, CONN_INTERVAL_BLE_REG, - peer->requested_latency); - peer->conn_param_update_pending = true; + err = set_le_conn_param(peer->conn, CONN_INTERVAL_BLE_REG, + peer->requested_latency); } else { err = set_llpm_conn_param(peer->conn, peer->requested_latency); } @@ -146,6 +140,10 @@ static int set_conn_params(struct connected_peer *peer) err = set_le_conn_param(peer->conn, CONN_INTERVAL_BLE_REG, peer->requested_latency); } + if (!err) { + peer->conn_param_update_pending = true; + } + return err; } @@ -168,10 +166,13 @@ static void update_peer_conn_params(struct connected_peer *peer) /* Retry to update the connection parameters after an error. */ k_work_reschedule(&conn_params_update, CONN_PARAMS_ERROR_TIMEOUT); } else { - LOG_INF("Conn params for peer: %p set: %s, latency: %"PRIu16, + LOG_INF("Update conn params for peer: %p (%s, requested latency: %" PRIu16 + ", USB suspended: %s)", (void *)peer->conn, - (IS_ENABLED(CONFIG_CAF_BLE_USE_LLPM) && peer->llpm_support) ? - "LLPM" : "BLE", peer->requested_latency); + peer->use_llpm ? "LLPM" : "BLE", + peer->requested_latency, + IS_ENABLED(CONFIG_DESKTOP_BLE_USB_MANAGED_CI) && usb_suspended ? + "true" : "false"); } } @@ -192,11 +193,12 @@ static bool conn_params_update_required(struct connected_peer *peer) __ASSERT_NO_MSG(info.role == BT_CONN_ROLE_CENTRAL); if (IS_ENABLED(CONFIG_DESKTOP_BLE_USB_MANAGED_CI) && usb_suspended) { - if (info.le.interval != CONN_INTERVAL_USB_SUSPEND) { + if ((info.le.interval != CONN_INTERVAL_USB_SUSPEND) || + (info.le.latency != CONN_LATENCY_USB_SUSPEND)) { return true; } - } else if ((peer->llpm_support && (info.le.interval != CONN_INTERVAL_LLPM_REG)) || - (!peer->llpm_support && (info.le.interval != CONN_INTERVAL_BLE_REG)) || + } else if ((peer->use_llpm && (info.le.interval != CONN_INTERVAL_LLPM_REG)) || + (!peer->use_llpm && (info.le.interval != CONN_INTERVAL_BLE_REG)) || (info.le.latency != peer->requested_latency)) { return true; } @@ -240,6 +242,7 @@ static void usb_state_event_handler(enum usb_state new_state) usb_suspended = true; break; + case USB_STATE_DISCONNECTED: case USB_STATE_ACTIVE: usb_suspended = false; break; @@ -273,7 +276,7 @@ static void peer_disconnected(struct bt_conn *conn) if (peer) { peer->conn = NULL; - peer->llpm_support = false; + peer->use_llpm = false; peer->discovered = false; peer->requested_latency = 0; peer->conn_param_update_pending = false; @@ -285,9 +288,9 @@ static void peer_discovered(struct bt_conn *conn, bool peer_llpm_support) struct connected_peer *peer = find_connected_peer(conn); if (peer) { - peer->llpm_support = peer_llpm_support; + peer->use_llpm = IS_ENABLED(CONFIG_CAF_BLE_USE_LLPM) && peer_llpm_support; peer->discovered = true; - update_peer_conn_params(peer); + k_work_reschedule(&conn_params_update, K_NO_WAIT); } } @@ -313,8 +316,7 @@ static bool app_event_handler(const struct app_event_header *aeh) const struct ble_discovery_complete_event *event = cast_ble_discovery_complete_event(aeh); - peer_discovered(bt_gatt_dm_conn_get(event->dm), - event->peer_llpm_support); + peer_discovered(bt_gatt_dm_conn_get(event->dm), event->peer_llpm_support); return false; } diff --git a/applications/nrf_desktop/src/modules/ble_scan.c b/applications/nrf_desktop/src/modules/ble_scan.c index d914dc7338d4..0e7d47101616 100644 --- a/applications/nrf_desktop/src/modules/ble_scan.c +++ b/applications/nrf_desktop/src/modules/ble_scan.c @@ -362,55 +362,6 @@ static int configure_filters(void) return err; } -static bool is_llpm_peer_connected(void) -{ - bool llpm_peer_connected = false; - - __ASSERT_NO_MSG(IS_ENABLED(CONFIG_CAF_BLE_USE_LLPM)); - - for (size_t i = 0; i < ARRAY_SIZE(subscribed_peers); i++) { - const bt_addr_le_t *addr = &subscribed_peers[i].addr; - - if (!bt_addr_le_cmp(addr, BT_ADDR_LE_NONE)) { - break; - } - - struct bt_conn *conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr); - - if (conn) { - bt_conn_unref(conn); - if (subscribed_peers[i].llpm_support) { - llpm_peer_connected = true; - break; - } - } - } - - return llpm_peer_connected; -} - -static void update_init_conn_params(bool llpm_peer_connected) -{ - struct bt_le_conn_param cp = { - .latency = 0, - .timeout = 400, - }; - - /* In case LLPM peer is already connected, the next peer has to be - * connected with 10 ms connection interval instead of 7.5 ms. - * Connecting with 7.5 ms may cause Bluetooth scheduling issues. - */ - if (llpm_peer_connected) { - cp.interval_min = 8; - cp.interval_max = 8; - } else { - cp.interval_min = 6; - cp.interval_max = 6; - } - - bt_scan_update_init_conn_params(&cp); -} - static int scan_start(void) { int err = scan_stop(); @@ -420,15 +371,6 @@ static int scan_start(void) return err; } - if (IS_ENABLED(CONFIG_CAF_BLE_USE_LLPM) && (CONFIG_BT_MAX_CONN == 2)) { - /* If the central supports the LLPM and more than two - * simultaneous Bluetooth connections, the BLE peers use the - * connection interval of 10 ms instead of 7.5 ms and there is - * no need to update the initial connection parameters. - */ - update_init_conn_params(is_llpm_peer_connected()); - } - err = configure_filters(); if (err) { LOG_ERR("Cannot set filters (err %d)", err); diff --git a/applications/nrf_desktop/src/modules/constlat.c b/applications/nrf_desktop/src/modules/constlat.c index ef7340a047c8..3c12ccb5951b 100644 --- a/applications/nrf_desktop/src/modules/constlat.c +++ b/applications/nrf_desktop/src/modules/constlat.c @@ -5,7 +5,7 @@ */ #include -#include +#include #define MODULE constlat #include @@ -25,8 +25,8 @@ static void constlat_on(void) return; } - nrf_power_task_trigger(NRF_POWER, NRF_POWER_TASK_CONSTLAT); - LOG_INF("Constant latency enabled"); + (void)nrfx_power_constlat_mode_request(); + LOG_INF("Constant latency requested"); enabled = true; } @@ -37,8 +37,8 @@ static void constlat_off(void) return; } - nrf_power_task_trigger(NRF_POWER, NRF_POWER_TASK_LOWPWR); - LOG_INF("Constant latency disabled"); + (void)nrfx_power_constlat_mode_free(); + LOG_INF("Constant latency freed"); enabled = false; } diff --git a/applications/nrf_desktop/src/modules/dvfs.c b/applications/nrf_desktop/src/modules/dvfs.c index 472a5f492a33..8198838229e5 100644 --- a/applications/nrf_desktop/src/modules/dvfs.c +++ b/applications/nrf_desktop/src/modules/dvfs.c @@ -16,7 +16,28 @@ #include LOG_MODULE_REGISTER(MODULE, CONFIG_DESKTOP_DVFS_LOG_LEVEL); -#include +#include +#include + +#define CLOCK_NODE DT_ALIAS(nrfdesktop_dvfs_clock) + +#if !DT_NODE_HAS_STATUS(CLOCK_NODE, okay) +#error "Alias 'nrfdesktop-dvfs-clock' is not defined in the device tree!" +#endif + +static const struct device *dvfs_clock_dev = DEVICE_DT_GET(CLOCK_NODE); +static struct onoff_client cli; + +/* The used nrf_clock_control driver implementation does not support + * clock precision and clock accuracy ppm. + */ +#define DESKTOP_DVFS_CLOCK_PRECISION 0 +#define DESKTOP_DVFS_CLOCK_ACCURACY_PPM 0 + +static struct nrf_clock_spec spec = { + .accuracy = DESKTOP_DVFS_CLOCK_ACCURACY_PPM, + .precision = DESKTOP_DVFS_CLOCK_PRECISION, +}; #define DVFS_RETRY_INITIALIZATION_TIMEOUT K_MSEC(CONFIG_DESKTOP_DVFS_RETRY_INIT_TIMEOUT_MS) #define DVFS_RETRY_BUSY_TIMEOUT K_MSEC(CONFIG_DESKTOP_DVFS_RETRY_BUSY_TIMEOUT_MS) @@ -66,16 +87,33 @@ enum dvfs_state { LIST_FOR_DVFS_STATE(DVFS_STATE) }; -static const uint8_t dvfs_high_freq_bitmask = INITIALIZE_DVFS_FREQ_MASK(ACTIVE_FREQ_HIGH); -static const uint8_t dvfs_medlow_freq_bitmask = INITIALIZE_DVFS_FREQ_MASK(ACTIVE_FREQ_MEDLOW); +struct dvfs_frequency { + uint32_t freq; + uint8_t bitmask; +}; + +static const struct dvfs_frequency dvfs_freq_array[] = { + { + .freq = CONFIG_DESKTOP_DVFS_FREQ_HIGH, + .bitmask = INITIALIZE_DVFS_FREQ_MASK(ACTIVE_FREQ_HIGH) + }, + { + .freq = CONFIG_DESKTOP_DVFS_FREQ_MED, + .bitmask = INITIALIZE_DVFS_FREQ_MASK(ACTIVE_FREQ_MEDLOW) + }, + { + .freq = CONFIG_DESKTOP_DVFS_FREQ_LOW, + .bitmask = UINT8_MAX + }, +}; /* Binary mask tracking which states are requested. */ static uint8_t dfvs_requests_state_bitmask; -static enum dvfs_frequency_setting current_freq = DVFS_FREQ_HIGH; +/* SoC starts with 320MHz frequency */ +static uint32_t current_freq = dvfs_freq_array[0].freq; -BUILD_ASSERT(sizeof(dvfs_high_freq_bitmask) == sizeof(dfvs_requests_state_bitmask)); -BUILD_ASSERT(sizeof(dvfs_medlow_freq_bitmask) == sizeof(dfvs_requests_state_bitmask)); +BUILD_ASSERT(sizeof(dvfs_freq_array[0].bitmask) == sizeof(dfvs_requests_state_bitmask)); BUILD_ASSERT(CHAR_BIT * sizeof(dfvs_requests_state_bitmask) >= DVFS_STATE_COUNT); static struct dvfs_retry { @@ -88,20 +126,14 @@ struct dvfs_state_timeout { uint16_t timeout_ms; }; +static struct k_work dvfs_notify_work; +static uint32_t requested_freq; +static bool request_in_progress; + static struct dvfs_state_timeout dvfs_state_timeouts[DVFS_STATE_COUNT] = { LIST_FOR_DVFS_STATE(INITIALIZE_DVFS_STATE_TIMEOUT) }; -static const char *get_dvfs_frequency_setting_name(enum dvfs_frequency_setting setting) -{ - switch (setting) { - case DVFS_FREQ_HIGH: return "DVFS_FREQ_HIGH"; - case DVFS_FREQ_MEDLOW: return "DVFS_FREQ_MEDLOW"; - case DVFS_FREQ_LOW: return "DVFS_FREQ_LOW"; - default: return "Unknown"; - } -} - static const char *get_dvfs_state_name(enum dvfs_state state) { switch (state) { @@ -111,19 +143,21 @@ static const char *get_dvfs_state_name(enum dvfs_state state) } } -static void cancel_dvfs_retry_work(void) +static void dvfs_fatal_error(void) { + module_set_state(MODULE_STATE_ERROR); + module_state = STATE_ERROR; (void) k_work_cancel_delayable(&dvfs_retry.retry_work); - dvfs_retry.retries_cnt = 0; + for (size_t i = 0; i < ARRAY_SIZE(dvfs_state_timeouts); i++) { + (void) k_work_cancel_delayable(&dvfs_state_timeouts[i].timeout_work); + } } static void handle_dvfs_error(int32_t err) { if (dvfs_retry.retries_cnt >= DVFS_NUMBER_OF_RETRIES) { LOG_ERR("DVFS retry count exceeded."); - module_set_state(MODULE_STATE_ERROR); - module_state = STATE_ERROR; - cancel_dvfs_retry_work(); + dvfs_fatal_error(); return; } dvfs_retry.retries_cnt++; @@ -137,39 +171,106 @@ static void handle_dvfs_error(int32_t err) timeout = DVFS_RETRY_INITIALIZATION_TIMEOUT; } else { LOG_ERR("DVFS freq change returned with error: %d", err); - module_set_state(MODULE_STATE_ERROR); - module_state = STATE_ERROR; - cancel_dvfs_retry_work(); + dvfs_fatal_error(); return; } (void) k_work_reschedule(&dvfs_retry.retry_work, timeout); } -static void set_dvfs_freq(enum dvfs_frequency_setting target_freq) +static uint32_t check_required_frequency(void) +{ + for (size_t i = 0; i < ARRAY_SIZE(dvfs_freq_array) - 1; i++) { + if (dfvs_requests_state_bitmask & dvfs_freq_array[i].bitmask) { + return dvfs_freq_array[i].freq; + } + } + + /* If no state is active, return the lowest frequency. */ + return dvfs_freq_array[ARRAY_SIZE(dvfs_freq_array) - 1].freq; +} + +static void dvfs_notify_cb(struct onoff_manager *srv, + struct onoff_client *cli, + uint32_t state, + int res) { - int32_t ret = dvfs_service_handler_change_freq_setting(target_freq); + (void) k_work_submit(&dvfs_notify_work); +} + +static void set_dvfs_freq(uint32_t target_freq) +{ + int ret; + + if (spec.frequency != 0) { + ret = nrf_clock_control_release(dvfs_clock_dev, &spec); + if (ret < 0) { + LOG_ERR("Failed to release requested clock specs, error: %d", ret); + dvfs_fatal_error(); + return; + } + } + + sys_notify_init_callback(&cli.notify, dvfs_notify_cb); + spec.frequency = target_freq; + ret = nrf_clock_control_request(dvfs_clock_dev, &spec, &cli); if (ret) { handle_dvfs_error(ret); } else { - current_freq = target_freq; - LOG_INF("Have requested %s frequency", - get_dvfs_frequency_setting_name(target_freq)); - cancel_dvfs_retry_work(); + LOG_INF("Have requested %" PRIu32 " frequency", target_freq); + requested_freq = target_freq; + request_in_progress = true; } } -static enum dvfs_frequency_setting check_required_frequency(void) +static void dvfs_frequency_update(void) { - if (dfvs_requests_state_bitmask & dvfs_high_freq_bitmask) { - return DVFS_FREQ_HIGH; - } else if (dfvs_requests_state_bitmask & dvfs_medlow_freq_bitmask) { - return DVFS_FREQ_MEDLOW; - } else { - return DVFS_FREQ_LOW; + uint32_t required_freq = check_required_frequency(); + + if ((!k_work_delayable_is_pending(&dvfs_retry.retry_work)) && + !request_in_progress && (required_freq != current_freq)) { + set_dvfs_freq(required_freq); + } else if ((required_freq == current_freq) && + (k_work_delayable_is_pending(&dvfs_retry.retry_work))) { + (void) k_work_cancel_delayable(&dvfs_retry.retry_work); + /* retry_cnt should be only cleared on successful frequency change. */ } } +static void dvfs_notify_work_handler(struct k_work *work) +{ + int res; + int ret = sys_notify_fetch_result(&cli.notify, &res); + + if (ret < 0) { + LOG_ERR("Work not completed, verify usage of notify API"); + dvfs_fatal_error(); + return; + } + + __ASSERT_NO_MSG(request_in_progress); + request_in_progress = false; + + if (res < 0) { + handle_dvfs_error(res); + return; + } + + /* + * Clock control request success means current_freq is now at minimum + * requested_freq. In current solution it is assumed that no other + * module will change cpu frequency, so current_freq is effectively + * equal to requested_freq. + */ + current_freq = requested_freq; + + dvfs_retry.retries_cnt = 0; + LOG_INF("DVFS completed, current frequency is: %" PRIu32, current_freq); + + /* Check if there were any new requests. */ + dvfs_frequency_update(); +} + static void process_dvfs_states(enum dvfs_state state, bool turn_on) { if (module_state == STATE_ERROR) { @@ -184,15 +285,7 @@ static void process_dvfs_states(enum dvfs_state state, bool turn_on) LOG_DBG("%s NOT ACTIVE", get_dvfs_state_name(state)); } - enum dvfs_frequency_setting required_freq = check_required_frequency(); - - if ((required_freq != current_freq) && - (!k_work_delayable_is_pending(&dvfs_retry.retry_work))) { - set_dvfs_freq(required_freq); - } else if ((required_freq == current_freq) && - (k_work_delayable_is_pending(&dvfs_retry.retry_work))) { - cancel_dvfs_retry_work(); - } + dvfs_frequency_update(); } static bool handle_ble_peer_conn_params_event(const struct ble_peer_conn_params_event *event) @@ -226,10 +319,9 @@ static void dvfs_retry_work_handler(struct k_work *work) { LOG_DBG("Retrying to change DVFS frequency."); - enum dvfs_frequency_setting required_freq = check_required_frequency(); + uint32_t required_freq = check_required_frequency(); __ASSERT_NO_MSG(required_freq != current_freq); - set_dvfs_freq(required_freq); } @@ -252,27 +344,29 @@ static bool app_event_handler(const struct app_event_header *aeh) const struct module_state_event *event = cast_module_state_event(aeh); if (check_state(event, MODULE_ID(main), MODULE_STATE_READY)) { - __ASSERT_NO_MSG((dvfs_high_freq_bitmask & dvfs_medlow_freq_bitmask) == 0); + BUILD_ASSERT(ARRAY_SIZE(dvfs_freq_array) == 3, + "Add asserts if frequency array is extended"); + __ASSERT_NO_MSG((dvfs_freq_array[0].bitmask & + dvfs_freq_array[1].bitmask) == 0); - k_work_init_delayable(&dvfs_retry.retry_work, - dvfs_retry_work_handler); + k_work_init(&dvfs_notify_work, dvfs_notify_work_handler); + k_work_init_delayable(&dvfs_retry.retry_work, dvfs_retry_work_handler); for (size_t i = 0; i < ARRAY_SIZE(dvfs_state_timeouts); i++) { k_work_init_delayable(&dvfs_state_timeouts[i].timeout_work, dvfs_state_timeout_work_handler); } + module_state = STATE_READY; if (IS_ENABLED(CONFIG_DESKTOP_DVFS_STATE_INITIALIZING_ENABLE)) { - if (module_flags_check_zero(&req_modules_bm)) { + get_req_modules(&req_modules_bm); + if (!module_flags_check_zero(&req_modules_bm)) { process_dvfs_states(DVFS_STATE_INITIALIZING, true); + } else { + dvfs_frequency_update(); } - get_req_modules(&req_modules_bm); } else { - enum dvfs_frequency_setting required_freq = - check_required_frequency(); - if (required_freq != current_freq) { - set_dvfs_freq(required_freq); - } + dvfs_frequency_update(); } } diff --git a/applications/nrf_desktop/src/modules/failsafe.c b/applications/nrf_desktop/src/modules/failsafe.c index fac0fd68b8c0..c0debf183e98 100644 --- a/applications/nrf_desktop/src/modules/failsafe.c +++ b/applications/nrf_desktop/src/modules/failsafe.c @@ -5,7 +5,7 @@ */ #include -#include +#include #include #define MODULE failsafe @@ -15,17 +15,27 @@ LOG_MODULE_REGISTER(MODULE, CONFIG_DESKTOP_FAILSAFE_LOG_LEVEL); -static bool failsafe_check(void) +static int failsafe_check(bool *failure_detected) { - uint32_t mask = NRFX_RESET_REASON_DOG_MASK | - NRFX_RESET_REASON_LOCKUP_MASK; + int err; + uint32_t reas = 0; + static const uint32_t mask = RESET_WATCHDOG | RESET_CPU_LOCKUP; - uint32_t reas = nrfx_reset_reason_get(); + err = hwinfo_get_reset_cause(&reas); + if (err) { + LOG_ERR("Failed to fetch reset cause: %d", err); + return err; + } + + *failure_detected = ((reas & mask) != 0); - return (reas & mask) != 0; + LOG_INF("Reset reason (0x%08X) trigger %s", reas, + *failure_detected ? "active" : "inactive"); + + return err; } -static void failsafe_erase(void) +static int failsafe_erase(void) { const struct flash_area *flash_area; int err = flash_area_open(FIXED_PARTITION_ID(storage_partition), @@ -37,15 +47,24 @@ static void failsafe_erase(void) } if (err) { - LOG_ERR("Failsafe cannot erase settings"); + LOG_ERR("Failsafe cannot erase settings: %d", err); } else { LOG_WRN("Failsafe erased settings"); } + + return err; } -static void failsafe_clear(void) +static int failsafe_clear(void) { - nrfx_reset_reason_clear(nrfx_reset_reason_get()); + int err; + + err = hwinfo_clear_reset_cause(); + if (err) { + LOG_ERR("Failed to clear reset cause: %d", err); + } + + return err; } static bool app_event_handler(const struct app_event_header *aeh) @@ -55,17 +74,27 @@ static bool app_event_handler(const struct app_event_header *aeh) cast_module_state_event(aeh); if (check_state(event, MODULE_ID(main), MODULE_STATE_READY)) { + int err; + bool failure_detected; static bool initialized; __ASSERT_NO_MSG(!initialized); initialized = true; - if (failsafe_check()) { - failsafe_erase(); + err = failsafe_check(&failure_detected); + if (!err && failure_detected) { + err = failsafe_erase(); } - failsafe_clear(); - module_set_state(MODULE_STATE_READY); + if (!err) { + err = failsafe_clear(); + } + + if (!err) { + module_set_state(MODULE_STATE_READY); + } else { + module_set_state(MODULE_STATE_ERROR); + } } return false; diff --git a/applications/nrf_desktop/src/modules/hid_forward.c b/applications/nrf_desktop/src/modules/hid_forward.c index ae69d587ac8f..250342ad141f 100644 --- a/applications/nrf_desktop/src/modules/hid_forward.c +++ b/applications/nrf_desktop/src/modules/hid_forward.c @@ -58,7 +58,7 @@ struct hids_peripheral { uint8_t sub_id; }; -static struct subscriber subscribers[CONFIG_DESKTOP_HID_DONGLE_BOND_COUNT]; +static struct subscriber subscribers[CONFIG_DESKTOP_HID_FORWARD_SUBSCRIBER_COUNT]; static bt_addr_le_t peripheral_address[CONFIG_BT_MAX_PAIRED]; static struct hids_peripheral peripherals[CONFIG_BT_MAX_CONN]; static uint8_t peripheral_cache[CONFIG_BT_MAX_CONN]; @@ -68,7 +68,7 @@ static bool suspended; static void hogp_out_rep_write_cb(struct bt_hogp *hogp, struct bt_hogp_rep_info *rep, uint8_t err); static int send_hid_out_report(struct bt_hogp *hogp, const uint8_t *data, size_t size); -#if CONFIG_DESKTOP_HID_DONGLE_BOND_COUNT > 1 +#if CONFIG_DESKTOP_HID_FORWARD_SUBSCRIBER_COUNT > 1 static void verify_data(const struct bt_bond_info *info, void *user_data) { for (size_t i = 0; i < ARRAY_SIZE(peripheral_address); i++) { @@ -116,7 +116,7 @@ static int verify_peripheral_address(void) SETTINGS_STATIC_HANDLER_DEFINE(hid_forward, MODULE_NAME, NULL, settings_set, verify_peripheral_address, NULL); -#endif /* CONFIG_DESKTOP_HID_DONGLE_BOND_COUNT > 1 */ +#endif /* CONFIG_DESKTOP_HID_FORWARD_SUBSCRIBER_COUNT > 1 */ static int store_peripheral_address(void) { diff --git a/applications/nrf_desktop/src/modules/usb_state.c b/applications/nrf_desktop/src/modules/usb_state.c index 7c375b891586..129e33e7597c 100644 --- a/applications/nrf_desktop/src/modules/usb_state.c +++ b/applications/nrf_desktop/src/modules/usb_state.c @@ -11,8 +11,6 @@ #include #include #include -#include -#include #include #include @@ -131,26 +129,17 @@ BUILD_ASSERT(!IS_ENABLED(CONFIG_DESKTOP_HID_STATE_ENABLE) || IS_ENABLED(CONFIG_DESKTOP_USB_SELECTIVE_REPORT_SUBSCRIPTION) || (ARRAY_SIZE(usb_hid_device) <= 1)); +#if CONFIG_SOC_SERIES_NRF54HX +BUILD_ASSERT(CONFIG_UDC_DWC2_USBHS_VBUS_READY_TIMEOUT > 0, + "Timeout must be set to prevent the usbd_enable() function from blocking the " + "application forever when the USB cable is not connected."); +#endif + static struct usbd_context *usbd_ctx; static bool usb_enabled; static struct config_channel_transport cfg_chan_transport; -static struct k_thread usb_init_thread; -static K_THREAD_STACK_DEFINE(usb_init_thread_stack, CONFIG_DESKTOP_USB_INIT_THREAD_STACK_SIZE); - -#define USB_REQ_TIMEOUT_MS 100 - -/* USB events */ -enum { - USB_REQ_ENABLE = BIT(0), - USB_REQ_DISABLE = BIT(1), - USB_RSP_SUCCESS = BIT(2), - USB_RSP_FAIL = BIT(3), -}; - -static K_EVENT_DEFINE(usb_event); - static void report_sent(struct usb_hid_device *usb_hid, struct usb_hid_buf *buf, bool error); static uint8_t usb_hid_buf_get_report_id(struct usb_hid_buf *buf) @@ -1204,39 +1193,6 @@ static int usb_init_next_hids_init(void) return err; } -static int usb_thread_req_send(bool enable) -{ - uint32_t events; - int err; - - __ASSERT_NO_MSG(!k_event_test(&usb_event, USB_REQ_ENABLE | USB_REQ_DISABLE)); - - LOG_DBG("%sabling USB", enable ? "En" : "Dis"); - (void) k_event_set(&usb_event, enable ? USB_REQ_ENABLE : USB_REQ_DISABLE); - events = k_event_wait(&usb_event, - USB_RSP_SUCCESS | USB_RSP_FAIL, - false, - K_MSEC(USB_REQ_TIMEOUT_MS)); - (void) k_event_clear(&usb_event, events); - - if (events & USB_RSP_SUCCESS) { - LOG_DBG("USB %sabled", enable ? "en" : "dis"); - usb_enabled = enable; - err = 0; - } else if (events & USB_RSP_FAIL) { - LOG_ERR("Failed to %sable USB", enable ? "en" : "dis"); - module_set_state(MODULE_STATE_ERROR); - err = -EIO; - } else { - LOG_ERR("Fatal error - USB %sable timeout. Rebooting...", enable ? "en" : "dis"); - LOG_PANIC(); - sys_reboot(SYS_REBOOT_WARM); - err = -EIO; - } - - return err; -} - static int handle_usbd_state_on_status_change(enum usbd_msg_type type) { int err = 0; @@ -1244,13 +1200,32 @@ static int handle_usbd_state_on_status_change(enum usbd_msg_type type) switch (type) { case USBD_MSG_VBUS_READY: if (!usb_enabled) { - err = usb_thread_req_send(true); + err = usbd_enable(usbd_ctx); + if (err == -ETIMEDOUT) { + /* Probably the USB cable was disconnected before the usbd_enable + * was executed. Ignoring the error. The USB will be enabled once + * the cable is connected again. + */ + LOG_WRN("usbd_enable timed out"); + err = 0; + } else if (err) { + LOG_ERR("usbd_enable failed (err: %d)", err); + module_set_state(MODULE_STATE_ERROR); + } else { + usb_enabled = true; + } } break; case USBD_MSG_VBUS_REMOVED: if (usb_enabled) { - err = usb_thread_req_send(false); + err = usbd_disable(usbd_ctx); + if (err) { + LOG_ERR("usbd_disable failed (err: %d)", err); + module_set_state(MODULE_STATE_ERROR); + } else { + usb_enabled = false; + } } break; @@ -1553,57 +1528,6 @@ static int usb_init(void) return err; } -static void wait_for_usb_requests(void) -{ - while (true) { - uint32_t events; - int err; - - events = k_event_wait(&usb_event, - USB_REQ_ENABLE | USB_REQ_DISABLE, - false, - K_FOREVER); - (void) k_event_clear(&usb_event, events); - __ASSERT_NO_MSG(!(events & USB_REQ_ENABLE) || !(events & USB_REQ_DISABLE)); - - __ASSERT_NO_MSG(usbd_ctx); - if (events & USB_REQ_ENABLE) { - err = usbd_enable(usbd_ctx); - if (err) { - LOG_ERR("usbd_enable failed (err: %d)", err); - } - } else if (events & USB_REQ_DISABLE) { - err = usbd_disable(usbd_ctx); - if (err) { - LOG_ERR("usbd_disable failed (err: %d)", err); - } - } else { - __ASSERT_NO_MSG(false); - err = -EINVAL; - } - - __ASSERT_NO_MSG(!k_event_test(&usb_event, USB_RSP_FAIL | USB_RSP_SUCCESS)); - (void) k_event_post(&usb_event, err ? USB_RSP_FAIL : USB_RSP_SUCCESS); - } -} - -static void usb_init_thread_fn(void *dummy0, void *dummy1, void *dummy2) -{ - ARG_UNUSED(dummy0); - ARG_UNUSED(dummy1); - ARG_UNUSED(dummy2); - - if (usb_init()) { - module_set_state(MODULE_STATE_ERROR); - } else { - module_set_state(MODULE_STATE_READY); - } - - if (IS_ENABLED(CONFIG_DESKTOP_USB_STACK_NEXT_DISABLE_ON_VBUS_REMOVAL)) { - wait_for_usb_requests(); - } -} - static bool app_event_handler(const struct app_event_header *aeh) { if (is_hid_report_event(aeh)) { @@ -1619,17 +1543,10 @@ static bool app_event_handler(const struct app_event_header *aeh) __ASSERT_NO_MSG(!initialized); initialized = true; - if (IS_ENABLED(CONFIG_DESKTOP_USB_INIT_THREAD)) { - (void) k_thread_create( - &usb_init_thread, - usb_init_thread_stack, - K_THREAD_STACK_SIZEOF(usb_init_thread_stack), - usb_init_thread_fn, - NULL, NULL, NULL, - CONFIG_DESKTOP_USB_INIT_THREAD_PRIORITY, 0, - K_MSEC(CONFIG_DESKTOP_USB_INIT_THREAD_DELAY_MS)); + if (usb_init()) { + module_set_state(MODULE_STATE_ERROR); } else { - usb_init_thread_fn(NULL, NULL, NULL); + module_set_state(MODULE_STATE_READY); } } diff --git a/applications/nrf_desktop/src/util/config_channel_transport.h b/applications/nrf_desktop/src/util/config_channel_transport.h index bb6ec74d109b..19e8a7c1636b 100644 --- a/applications/nrf_desktop/src/util/config_channel_transport.h +++ b/applications/nrf_desktop/src/util/config_channel_transport.h @@ -16,6 +16,10 @@ #include "config_event.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * @brief Parse the configuration channel report. * @@ -130,6 +134,10 @@ bool config_channel_transport_rsp_receive(struct config_channel_transport *trans */ void config_channel_transport_disconnect(struct config_channel_transport *transport); +#ifdef __cplusplus +} +#endif + /** * @} */ diff --git a/applications/nrf_desktop/src/util/dfu_lock.h b/applications/nrf_desktop/src/util/dfu_lock.h index 94271659ebf9..e28ef8654c7f 100644 --- a/applications/nrf_desktop/src/util/dfu_lock.h +++ b/applications/nrf_desktop/src/util/dfu_lock.h @@ -16,6 +16,10 @@ * @{ */ +#ifdef __cplusplus +extern "C" { +#endif + /** @brief DFU lock owner descriptor. */ struct dfu_lock_owner { /** Owner name. */ @@ -69,6 +73,10 @@ int dfu_lock_claim(const struct dfu_lock_owner *new_owner); */ int dfu_lock_release(const struct dfu_lock_owner *owner); +#ifdef __cplusplus +} +#endif + /** * @} */ diff --git a/applications/nrf_desktop/src/util/hid_reportq.h b/applications/nrf_desktop/src/util/hid_reportq.h index ae06603f2a90..23bb070deb65 100644 --- a/applications/nrf_desktop/src/util/hid_reportq.h +++ b/applications/nrf_desktop/src/util/hid_reportq.h @@ -58,6 +58,12 @@ const void *hid_reportq_get_sub_id(struct hid_reportq *q); /** * @brief Add a HID report to the queue. * + * The function returns an error if HID report subscription is disabled for the added HID report. + * + * If number of enqueued reports with a given report ID exceeds limit defined by the configuration + * (@kconfig{CONFIG_DESKTOP_HID_REPORTQ_MAX_ENQUEUED_REPORTS}), the oldest enqueued HID report with + * the ID is dropped. + * * @param[in] q Pointer to the queue instance. * @param[in] src_id ID of HID report source. * @param[in] rep_id HID report ID. @@ -99,6 +105,9 @@ void hid_reportq_subscribe(struct hid_reportq *q, uint8_t rep_id); /** * @brief Unsubscribe from HID report with given ID. * + * Disabling subscription for a given HID report ID, drops all of the enqueued HID reports related + * to the ID. + * * @param[in] q Pointer to the queue instance. * @param[in] rep_id HID report ID. */ diff --git a/applications/nrf_desktop/src/util/hwid.h b/applications/nrf_desktop/src/util/hwid.h index 9f753e4cccfd..75fde6d5af9e 100644 --- a/applications/nrf_desktop/src/util/hwid.h +++ b/applications/nrf_desktop/src/util/hwid.h @@ -7,8 +7,16 @@ #ifndef _HWID_H_ #define _HWID_H_ +#ifdef __cplusplus +extern "C" { +#endif + #define HWID_LEN 8 void hwid_get(uint8_t *buf, size_t buf_size); +#ifdef __cplusplus +} +#endif + #endif /* _HWID_H_ */ diff --git a/applications/nrf_desktop/sysbuild/CMakeLists.txt b/applications/nrf_desktop/sysbuild/CMakeLists.txt index 119d1ea1350b..3ce4b76ebad7 100644 --- a/applications/nrf_desktop/sysbuild/CMakeLists.txt +++ b/applications/nrf_desktop/sysbuild/CMakeLists.txt @@ -7,11 +7,9 @@ # The application uses the configuration/ scheme for configuration files. set(SB_APPLICATION_CONFIG_DIR "${CMAKE_CURRENT_LIST_DIR}/../configuration/\${NORMALIZED_BOARD_TARGET}") -# Redirect images' configuration directories to use those in the board configuration directory -set(nrf_desktop_APPLICATION_CONFIG_DIR - "${CMAKE_CURRENT_LIST_DIR}/../configuration/\${NORMALIZED_BOARD_TARGET}" - CACHE INTERNAL "Application configuration dir controlled by sysbuild" -) +# The main application configuration directory is defined by the main application's +# `CMakeLists.txt` file (this allows to avoid dependency on main application name). +# Redirect other images' configuration directories to redefine configuration. set(mcuboot_APPLICATION_CONFIG_DIR "${CMAKE_CURRENT_LIST_DIR}/../configuration/\${NORMALIZED_BOARD_TARGET}/images/mcuboot" CACHE INTERNAL "Application configuration dir controlled by sysbuild" @@ -28,3 +26,15 @@ set(ipc_radio_APPLICATION_CONFIG_DIR find_package(Sysbuild REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(sysbuild LANGUAGES) + +if(SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU) + message(WARNING " + ------------------------------------------------------------------------------ + --- WARNING: MCUboot uses KMU stored keys for signature verification. Make --- + --- sure to use `west ncs-provision` to manually provision the bootloader. --- + --- Application would fail to boot if MCUboot is not provisioned. For more --- + --- details, see the `Building and running` section from `Application --- + --- description` page in nRF Desktop application documentation. --- + ------------------------------------------------------------------------------ + ") +endif() diff --git a/applications/sdp/gpio/CMakeLists.txt b/applications/sdp/gpio/CMakeLists.txt index 2e996f5b15ca..859f6b705548 100644 --- a/applications/sdp/gpio/CMakeLists.txt +++ b/applications/sdp/gpio/CMakeLists.txt @@ -7,8 +7,17 @@ cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) -project(emulated_gpio) +project(sdp_gpio) + +sdp_assembly_generate("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") +sdp_assembly_check("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") +sdp_assembly_prepare_install("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") target_sources(app PRIVATE src/main.c) -target_sources_ifdef(CONFIG_GPIO_NRFE_EGPIO_BACKEND_ICMSG app PRIVATE src/backend/backend_icmsg.c) -target_sources_ifdef(CONFIG_GPIO_NRFE_EGPIO_BACKEND_MBOX app PRIVATE src/backend/backend_mbox.c) +target_sources(app PRIVATE src/hrt/hrt.s) + +target_sources_ifdef(CONFIG_SDP_GPIO_BACKEND_ICMSG app PRIVATE src/backend/backend_icmsg.c) +target_sources_ifdef(CONFIG_SDP_GPIO_BACKEND_ICBMSG app PRIVATE src/backend/backend_icmsg.c) +target_sources_ifdef(CONFIG_SDP_GPIO_BACKEND_MBOX app PRIVATE src/backend/backend_mbox.c) + +add_dependencies(app asm_check) diff --git a/applications/sdp/gpio/Kconfig b/applications/sdp/gpio/Kconfig new file mode 100644 index 000000000000..255713a8a4f7 --- /dev/null +++ b/applications/sdp/gpio/Kconfig @@ -0,0 +1,18 @@ +choice SDP_GPIO_BACKEND + prompt "Backend" + default SDP_GPIO_BACKEND_ICMSG + +config SDP_GPIO_BACKEND_MBOX + bool "mbox" + +config SDP_GPIO_BACKEND_ICMSG + bool "icmsg" + select IPC_SERVICE + +config SDP_GPIO_BACKEND_ICBMSG + bool "icbmsg" + select IPC_SERVICE + +endchoice + +source "Kconfig.zephyr" diff --git a/applications/sdp/gpio/README.rst b/applications/sdp/gpio/README.rst new file mode 100644 index 000000000000..04e4006b2870 --- /dev/null +++ b/applications/sdp/gpio/README.rst @@ -0,0 +1,35 @@ +.. _sdp_gpio: + +SDP GPIO +######## + +This application demonstrates how to create SDP on FLPR in Zephyr threadless mode by implementing a subset of Zephyr GPIO API. +It is intended for use with Zephyr's :zephyr:code-sample:`blinky` sample. + +You can use the following IPC backends: + +* mbox (:kconfig:option:`SB_CONFIG_SDP_GPIO_BACKEND_MBOX`) +* icmsg (:kconfig:option:`SB_CONFIG_SDP_GPIO_BACKEND_ICMSG`) +* icbmsg (:kconfig:option:`SB_CONFIG_SDP_GPIO_BACKEND_ICBMSG`) + +Requirements +************ + +The firmware supports the following development kit: + +.. table-from-sample-yaml:: + +Building and running +******************** + +You must include code for both the application core and FLPR core. +The recommended method is to build the :zephyr:code-sample:`blinky` with the necessary sysbuild configuration. + +For example, to build with icmsg backend, run the following commands: + + .. code-block:: console + + west build -b nrf54l15dk/nrf54l15/cpuapp -- -DSB_CONFIG_PARTITION_MANAGER=n -DSB_CONFIG_SDP=y -DSB_CONFIG_SDP_GPIO=y -DSB_CONFIG_SDP_GPIO_BACKEND_ICMSG=y -DEXTRA_DTC_OVERLAY_FILE="./boards/nrf54l15dk_nrf54l15_cpuapp_egpio.overlay" + west flash + +Upon successful execution, **LED0** will start flashing. diff --git a/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr.overlay b/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr.overlay index ccbed019993a..165da128bfc3 100644 --- a/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr.overlay +++ b/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr.overlay @@ -4,28 +4,6 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/ { - soc { - reserved-memory { - #address-cells = <1>; - #size-cells = <1>; - - sram_tx: memory@2003c000 { - reg = <0x2003c000 0x0800>; - }; - - sram_rx: memory@2003c800 { - reg = <0x2003c800 0x0800>; - }; - }; - }; -}; - -&cpuflpr_sram { - reg = <0x2003d000 DT_SIZE_K(12)>; - ranges = <0x0 0x2003d000 0x3000>; -}; - &cpuflpr_vevif_rx { status = "okay"; interrupts = <16 NRF_DEFAULT_IRQ_PRIORITY>; diff --git a/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr_icmsg.overlay b/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr_icmsg.overlay deleted file mode 100644 index 8413634b2dae..000000000000 --- a/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr_icmsg.overlay +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause - */ - -/ { - ipc { - ipc0: ipc0 { - compatible = "zephyr,ipc-icmsg"; - tx-region = <&sram_tx>; - rx-region = <&sram_rx>; - mboxes = <&cpuflpr_vevif_rx 16>, <&cpuflpr_vevif_tx 20>; - mbox-names = "rx", "tx"; - status = "okay"; - }; - }; -}; diff --git a/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr_mbox.overlay b/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr_mbox.overlay deleted file mode 100644 index 747ef88e440c..000000000000 --- a/applications/sdp/gpio/boards/nrf54l15dk_nrf54l15_cpuflpr_mbox.overlay +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor ASA - * - * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause - */ - -/ { - mbox_consumer: mbox_consumer { - compatible = "vnd,mbox-consumer"; - mboxes = <&cpuflpr_vevif_rx 16>, <&cpuflpr_vevif_tx 20>; - mbox-names = "rx", "tx"; - }; -}; diff --git a/applications/sdp/gpio/sample.yaml b/applications/sdp/gpio/sample.yaml index 05eaef699158..6fecd3430975 100644 --- a/applications/sdp/gpio/sample.yaml +++ b/applications/sdp/gpio/sample.yaml @@ -1,28 +1,39 @@ sample: - name: eGPIO application - description: SW-defined GPIO application + name: SDP GPIO application + description: SDP GPIO application common: integration_platforms: - nrf54l15dk/nrf54l15/cpuflpr tests: - applications.sdp.egpio_mbox: + applications.sdp.gpio.mbox: build_only: true sysbuild: true platform_allow: nrf54l15dk/nrf54l15/cpuflpr - tags: ci_build sysbuild gpio - extra_args: - EXTRA_DTC_OVERLAY_FILE="./boards/nrf54l15dk_nrf54l15_cpuflpr_mbox.overlay" - extra_configs: - - CONFIG_GPIO_NRFE_EGPIO_BACKEND_MBOX=y + tags: + - ci_build + - sysbuild + - gpio + required_snippets: + - sdp-gpio-mbox - applications.sdp.egpio_icmsg: + applications.sdp.gpio.icmsg: build_only: true sysbuild: true platform_allow: nrf54l15dk/nrf54l15/cpuflpr - tags: ci_build sysbuild gpio - extra_args: - EXTRA_DTC_OVERLAY_FILE="./boards/nrf54l15dk_nrf54l15_cpuflpr_icmsg.overlay" - extra_configs: - - CONFIG_GPIO_NRFE_EGPIO_BACKEND_ICMSG=y - - CONFIG_IPC_SERVICE=y - - CONFIG_IPC_SERVICE_BACKEND_ICMSG=y + tags: + - ci_build + - sysbuild + - gpio + required_snippets: + - sdp-gpio-icmsg + + applications.sdp.gpio.icbmsg: + sysbuild: true + build_only: true + platform_allow: nrf54l15dk/nrf54l15/cpuflpr + tags: + - ci_build + - sysbuild + - gpio + required_snippets: + - sdp-gpio-icbmsg diff --git a/applications/sdp/gpio/src/backend/backend.h b/applications/sdp/gpio/src/backend/backend.h index 02e6bb37541e..379eefd0af85 100644 --- a/applications/sdp/gpio/src/backend/backend.h +++ b/applications/sdp/gpio/src/backend/backend.h @@ -9,7 +9,9 @@ #include -#if !defined(CONFIG_GPIO_NRFE_EGPIO_BACKEND_ICMSG) && !defined(CONFIG_GPIO_NRFE_EGPIO_BACKEND_MBOX) +#if !defined(CONFIG_SDP_GPIO_BACKEND_ICMSG) && \ + !defined(CONFIG_SDP_GPIO_BACKEND_MBOX) && \ + !defined(CONFIG_SDP_GPIO_BACKEND_ICBMSG) #error "Define communication backend type" #endif diff --git a/applications/sdp/gpio/src/backend/backend_mbox.c b/applications/sdp/gpio/src/backend/backend_mbox.c index ff8ccae4e4b2..def1431b9c4e 100644 --- a/applications/sdp/gpio/src/backend/backend_mbox.c +++ b/applications/sdp/gpio/src/backend/backend_mbox.c @@ -34,8 +34,9 @@ static void mbox_callback(const struct device *instance, uint32_t channel, void nrfe_gpio_mbox_data_t *rx_data = (nrfe_gpio_mbox_data_t *)user_data; /* Try and get lock for the shared data structure */ - if (atomic_flag_test_and_set(&rx_data->lock.locked)) { - /* Return in case lock is not acquired (used by other core)*/ + if (!atomic_cas(&rx_data->lock.locked, DATA_LOCK_STATE_WITH_DATA, DATA_LOCK_STATE_BUSY)) { + /* Return in case buffer is without data */ + atomic_set(&rx_data->lock.locked, DATA_LOCK_STATE_READY); return; } @@ -49,7 +50,7 @@ static void mbox_callback(const struct device *instance, uint32_t channel, void rx_data->lock.data_size = 0; /* We are finished with the shared data structure, so we can release the lock */ - atomic_flag_clear(&rx_data->lock.locked); + atomic_set(&rx_data->lock.locked, DATA_LOCK_STATE_READY); } /** @@ -88,8 +89,8 @@ int backend_init(backend_callback_t callback) } /* clear the buffer locks and their size holders */ - atomic_flag_clear(&rx_data->lock.locked); rx_data->lock.data_size = 0; + atomic_set(&rx_data->lock.locked, DATA_LOCK_STATE_READY); return 0; } diff --git a/applications/sdp/gpio/src/hrt/hrt.c b/applications/sdp/gpio/src/hrt/hrt.c new file mode 100644 index 000000000000..b7b2fc1339ce --- /dev/null +++ b/applications/sdp/gpio/src/hrt/hrt.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ +#include "hrt.h" +#include + +extern volatile uint16_t irq_arg; + +void hrt_set_bits(void) +{ + uint16_t outs = nrf_vpr_csr_vio_out_get(); + + nrf_vpr_csr_vio_out_set(outs | irq_arg); +} + +void hrt_clear_bits(void) +{ + uint16_t outs = nrf_vpr_csr_vio_out_get(); + + nrf_vpr_csr_vio_out_set(outs & ~irq_arg); +} + +void hrt_toggle_bits(void) +{ + nrf_vpr_csr_vio_out_toggle_set(irq_arg); +} diff --git a/applications/sdp/gpio/src/hrt/hrt.h b/applications/sdp/gpio/src/hrt/hrt.h new file mode 100644 index 000000000000..53b54822e042 --- /dev/null +++ b/applications/sdp/gpio/src/hrt/hrt.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#ifndef _HRT_H__ +#define _HRT_H__ + +void hrt_set_bits(void); + +void hrt_clear_bits(void); + +void hrt_toggle_bits(void); + +#endif /* _HRT_H__ */ diff --git a/applications/sdp/gpio/src/hrt/hrt.s b/applications/sdp/gpio/src/hrt/hrt.s new file mode 100644 index 000000000000..1279d5c6f479 --- /dev/null +++ b/applications/sdp/gpio/src/hrt/hrt.s @@ -0,0 +1,55 @@ + .file "hrt.c" + .option nopic + .attribute arch, "rv32e1p9_m2p0_c2p0_zicsr2p0" + .attribute unaligned_access, 0 + .attribute stack_align, 4 + .text + .section .text.hrt_set_bits,"ax",@progbits + .align 1 + .globl hrt_set_bits + .type hrt_set_bits, @function +hrt_set_bits: + #APP + csrr a4, 3008 + #NO_APP + lui a5,%hi(irq_arg) + lhu a5,%lo(irq_arg)(a5) + or a5,a5,a4 + slli a5,a5,16 + srli a5,a5,16 + #APP + csrw 3008, a5 + #NO_APP + ret + .size hrt_set_bits, .-hrt_set_bits + .section .text.hrt_clear_bits,"ax",@progbits + .align 1 + .globl hrt_clear_bits + .type hrt_clear_bits, @function +hrt_clear_bits: + #APP + csrr a4, 3008 + #NO_APP + lui a5,%hi(irq_arg) + lhu a5,%lo(irq_arg)(a5) + not a5,a5 + and a5,a5,a4 + slli a5,a5,16 + srli a5,a5,16 + #APP + csrw 3008, a5 + #NO_APP + ret + .size hrt_clear_bits, .-hrt_clear_bits + .section .text.hrt_toggle_bits,"ax",@progbits + .align 1 + .globl hrt_toggle_bits + .type hrt_toggle_bits, @function +hrt_toggle_bits: + lui a5,%hi(irq_arg) + lhu a5,%lo(irq_arg)(a5) + #APP + csrw 3024, a5 + #NO_APP + ret + .size hrt_toggle_bits, .-hrt_toggle_bits diff --git a/applications/sdp/gpio/src/main.c b/applications/sdp/gpio/src/main.c index 8fdf18083961..5afad4675610 100644 --- a/applications/sdp/gpio/src/main.c +++ b/applications/sdp/gpio/src/main.c @@ -5,6 +5,8 @@ */ #include "./backend/backend.h" +#include "./hrt/hrt.h" + #include #include #include @@ -13,6 +15,16 @@ #include #include +#define HRT_IRQ_PRIORITY 2 +#define HRT_VEVIF_IDX_GPIO_CLEAR 17 +#define HRT_VEVIF_IDX_GPIO_SET 18 +#define HRT_VEVIF_IDX_GPIO_TOGGLE 19 + +#define VEVIF_IRQN(vevif) VEVIF_IRQN_1(vevif) +#define VEVIF_IRQN_1(vevif) VPRCLIC_##vevif##_IRQn + +volatile uint16_t irq_arg; + static nrf_gpio_pin_pull_t get_pull(gpio_flags_t flags) { if (flags & GPIO_PULL_UP) { @@ -93,25 +105,6 @@ static int gpio_nrfe_pin_configure(uint8_t port, uint16_t pin, uint32_t flags) return 0; } -static void gpio_nrfe_port_set_bits_raw(uint16_t set_mask) -{ - uint16_t outs = nrf_vpr_csr_vio_out_get(); - - nrf_vpr_csr_vio_out_set(outs | set_mask); -} - -static void gpio_nrfe_port_clear_bits_raw(uint16_t clear_mask) -{ - uint16_t outs = nrf_vpr_csr_vio_out_get(); - - nrf_vpr_csr_vio_out_set(outs & ~clear_mask); -} - -static void gpio_nrfe_port_toggle_bits(uint16_t toggle_mask) -{ - nrf_vpr_csr_vio_out_toggle_set(toggle_mask); -} - void process_packet(nrfe_gpio_data_packet_t *packet) { if (packet->port != 2) { @@ -124,15 +117,18 @@ void process_packet(nrfe_gpio_data_packet_t *packet) break; } case NRFE_GPIO_PIN_CLEAR: { - gpio_nrfe_port_clear_bits_raw(packet->pin); + irq_arg = packet->pin; + nrf_vpr_clic_int_pending_set(NRF_VPRCLIC, VEVIF_IRQN(HRT_VEVIF_IDX_GPIO_CLEAR)); break; } case NRFE_GPIO_PIN_SET: { - gpio_nrfe_port_set_bits_raw(packet->pin); + irq_arg = packet->pin; + nrf_vpr_clic_int_pending_set(NRF_VPRCLIC, VEVIF_IRQN(HRT_VEVIF_IDX_GPIO_SET)); break; } case NRFE_GPIO_PIN_TOGGLE: { - gpio_nrfe_port_toggle_bits(packet->pin); + irq_arg = packet->pin; + nrf_vpr_clic_int_pending_set(NRF_VPRCLIC, VEVIF_IRQN(HRT_VEVIF_IDX_GPIO_TOGGLE)); break; } default: { @@ -141,6 +137,26 @@ void process_packet(nrfe_gpio_data_packet_t *packet) } } +#define HRT_CONNECT(vevif, handler) \ + IRQ_DIRECT_CONNECT(vevif, HRT_IRQ_PRIORITY, handler, 0); \ + nrf_vpr_clic_int_enable_set(NRF_VPRCLIC, VEVIF_IRQN(vevif), true) + + +__attribute__ ((interrupt)) void hrt_handler_clear_bits(void) +{ + hrt_clear_bits(); +} + +__attribute__ ((interrupt)) void hrt_handler_set_bits(void) +{ + hrt_set_bits(); +} + +__attribute__ ((interrupt)) void hrt_handler_toggle_bits(void) +{ + hrt_toggle_bits(); +} + int main(void) { int ret = 0; @@ -150,9 +166,11 @@ int main(void) return 0; } - if (!nrf_vpr_csr_rtperiph_enable_check()) { - nrf_vpr_csr_rtperiph_enable_set(true); - } + HRT_CONNECT(HRT_VEVIF_IDX_GPIO_CLEAR, hrt_handler_clear_bits); + HRT_CONNECT(HRT_VEVIF_IDX_GPIO_SET, hrt_handler_set_bits); + HRT_CONNECT(HRT_VEVIF_IDX_GPIO_TOGGLE, hrt_handler_toggle_bits); + + nrf_vpr_csr_rtperiph_enable_set(true); while (true) { k_cpu_idle(); diff --git a/applications/sdp/mspi/CMakeLists.txt b/applications/sdp/mspi/CMakeLists.txt new file mode 100644 index 000000000000..338d1d7ad562 --- /dev/null +++ b/applications/sdp/mspi/CMakeLists.txt @@ -0,0 +1,19 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +cmake_minimum_required(VERSION 3.20.0) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(sdp_mspi) + +sdp_assembly_generate("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") +sdp_assembly_check("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") +sdp_assembly_prepare_install("${CMAKE_SOURCE_DIR}/src/hrt/hrt.c") + +target_sources(app PRIVATE src/main.c) +target_sources(app PRIVATE src/hrt/hrt.s) + +add_dependencies(app asm_check) diff --git a/applications/sdp/mspi/boards/nrf54l15dk_nrf54l15_cpuflpr.conf b/applications/sdp/mspi/boards/nrf54l15dk_nrf54l15_cpuflpr.conf new file mode 100644 index 000000000000..21b98e3b93ad --- /dev/null +++ b/applications/sdp/mspi/boards/nrf54l15dk_nrf54l15_cpuflpr.conf @@ -0,0 +1,48 @@ +# Single-threaded +CONFIG_MULTITHREADING=n +CONFIG_KERNEL_MEM_POOL=n +CONFIG_LOG=n + +# Drivers and peripherals +CONFIG_I2C=n +CONFIG_WATCHDOG=n +CONFIG_GPIO=n +CONFIG_PINCTRL=n +CONFIG_SPI=n +CONFIG_SERIAL=n +CONFIG_FLASH=n + +# Power management +CONFIG_PM=n + +# Interrupts +CONFIG_DYNAMIC_INTERRUPTS=n +CONFIG_IRQ_OFFLOAD=n +CONFIG_GEN_SW_ISR_TABLE=n + +# Memory protection +CONFIG_THREAD_STACK_INFO=n +CONFIG_THREAD_CUSTOM_DATA=n +CONFIG_FPU=n + +# Boot +CONFIG_BOOT_BANNER=n +CONFIG_NCS_BOOT_BANNER=n + +# Console +CONFIG_CONSOLE=n +CONFIG_UART_CONSOLE=n +CONFIG_STDOUT_CONSOLE=n +CONFIG_PRINTK=n +CONFIG_EARLY_CONSOLE=n + +# Build +CONFIG_SIZE_OPTIMIZATIONS=y + +# No timer support in the kernel +CONFIG_SYS_CLOCK_EXISTS=n + +CONFIG_OUTPUT_DISASSEMBLY=y +CONFIG_COMMON_LIBC_MALLOC=n + +CONFIG_COMPILER_OPT="-fshort-enums" diff --git a/applications/sdp/mspi/boards/nrf54l15dk_nrf54l15_cpuflpr.overlay b/applications/sdp/mspi/boards/nrf54l15dk_nrf54l15_cpuflpr.overlay new file mode 100644 index 000000000000..c3c8081a6be0 --- /dev/null +++ b/applications/sdp/mspi/boards/nrf54l15dk_nrf54l15_cpuflpr.overlay @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/ { + soc { + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + + sram_tx: memory@2003c000 { + reg = <0x2003c000 0x0800>; + }; + + sram_rx: memory@2003c800 { + reg = <0x2003c800 0x0800>; + }; + }; + }; + + ipc { + ipc0: ipc0 { + compatible = "zephyr,ipc-icmsg"; + tx-region = <&sram_tx>; + rx-region = <&sram_rx>; + mboxes = <&cpuflpr_vevif_rx 16>, <&cpuflpr_vevif_tx 20>; + mbox-names = "rx", "tx"; + status = "okay"; + }; + }; +}; + +&cpuflpr_rram { + reg = <0x17a000 DT_SIZE_K(12)>; +}; + +&cpuflpr_code_partition { + reg = <0x0 DT_SIZE_K(12)>; +}; + +&cpuflpr_sram { + reg = <0x2003d000 DT_SIZE_K(12)>; + ranges = <0x0 0x2003d000 0x3000>; +}; + +&cpuflpr_vevif_rx { + status = "okay"; + interrupts = <16 NRF_DEFAULT_IRQ_PRIORITY>; + nordic,tasks = <1>; + nordic,tasks-mask = <0x00010000>; +}; + +&cpuflpr_vevif_tx { + status = "okay"; +}; + +&gpio0 { + status = "disabled"; +}; + +&gpio1 { + status = "disabled"; +}; + +&gpio2 { + status = "disabled"; +}; + +&gpiote20 { + status = "disabled"; +}; + +&gpiote30 { + status = "disabled"; +}; + +&grtc { + status = "disabled"; +}; + +&uart20 { + status = "disabled"; +}; + +&uart30 { + status = "disabled"; +}; + +&pwm20 { + status = "disabled"; +}; diff --git a/applications/sdp/mspi/prj.conf b/applications/sdp/mspi/prj.conf new file mode 100644 index 000000000000..5db8be05d329 --- /dev/null +++ b/applications/sdp/mspi/prj.conf @@ -0,0 +1,3 @@ +CONFIG_MBOX=y +CONFIG_IPC_SERVICE=y +CONFIG_IPC_SERVICE_BACKEND_ICMSG=y diff --git a/applications/sdp/mspi/sample.yaml b/applications/sdp/mspi/sample.yaml new file mode 100644 index 000000000000..46e595632fe4 --- /dev/null +++ b/applications/sdp/mspi/sample.yaml @@ -0,0 +1,15 @@ +sample: + name: SDP mSPI application + description: SDP mSPI application +common: + integration_platforms: + - nrf54l15dk/nrf54l15/cpuflpr +tests: + applications.sdp.mspi: + build_only: true + sysbuild: true + platform_allow: nrf54l15dk/nrf54l15/cpuflpr + tags: + - ci_build + - sysbuild + - mspi diff --git a/applications/sdp/mspi/src/hrt/hrt.c b/applications/sdp/mspi/src/hrt/hrt.c new file mode 100644 index 000000000000..ecf16c0f153b --- /dev/null +++ b/applications/sdp/mspi/src/hrt/hrt.c @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ +#include "hrt.h" +#include +#include + +/* Hardware requirement, to get n shifts SHIFTCNTB register has to be set to n-1*/ +#define SHIFTCNTB_VALUE(shift_count) (shift_count - 1) + +/** @brief Shift control configuration. */ +typedef struct { + uint8_t shift_count; + nrf_vpr_csr_vio_shift_t out_mode; + uint8_t frame_width; + nrf_vpr_csr_vio_mode_in_t in_mode; +} nrf_vpr_csr_vio_shift_ctrl_t; + +NRF_STATIC_INLINE void +nrf_vpr_csr_vio_shift_ctrl_buffered_set(nrf_vpr_csr_vio_shift_ctrl_t const *p_shift_ctrl) +{ + uint32_t reg = + ((p_shift_ctrl->shift_count << VPRCSR_NORDIC_SHIFTCTRLB_SHIFTCNTB_VALUE_Pos) & + VPRCSR_NORDIC_SHIFTCTRLB_SHIFTCNTB_VALUE_Msk) | + ((p_shift_ctrl->out_mode << VPRCSR_NORDIC_SHIFTCTRLB_OUTMODEB_MODE_Pos) & + VPRCSR_NORDIC_SHIFTCTRLB_OUTMODEB_MODE_Msk) | + ((p_shift_ctrl->frame_width << VPRCSR_NORDIC_SHIFTCTRLB_OUTMODEB_FRAMEWIDTH_Pos) & + VPRCSR_NORDIC_SHIFTCTRLB_OUTMODEB_FRAMEWIDTH_Msk) | + ((p_shift_ctrl->in_mode << VPRCSR_NORDIC_SHIFTCTRLB_INMODEB_MODE_Pos) & + VPRCSR_NORDIC_SHIFTCTRLB_INMODEB_MODE_Msk); + + nrf_csr_write(VPRCSR_NORDIC_SHIFTCTRLB, reg); +} + +NRF_STATIC_INLINE void nrf_vpr_csr_vio_out_or_set(uint16_t value) +{ + nrf_csr_set_bits(VPRCSR_NORDIC_OUT, value); +} + +NRF_STATIC_INLINE void nrf_vpr_csr_vio_out_clear_set(uint16_t value) +{ + nrf_csr_clear_bits(VPRCSR_NORDIC_OUT, value); +} + +static const nrf_vpr_csr_vio_shift_ctrl_t write_final_shift_ctrl_cfg = { + .shift_count = 1, + .out_mode = NRF_VPR_CSR_VIO_SHIFT_NONE, + .frame_width = 4, + .in_mode = NRF_VPR_CSR_VIO_MODE_IN_CONTINUOUS, +}; + +static void hrt_tx(volatile hrt_xfer_data_t *xfer_data, uint8_t frame_width, bool *counter_running, + uint16_t counter_value) +{ + if (xfer_data->word_count == 0) { + return; + } + + nrf_vpr_csr_vio_shift_ctrl_t xfer_shift_ctrl = { + .shift_count = SHIFTCNTB_VALUE(BITS_IN_WORD / frame_width), + .out_mode = NRF_VPR_CSR_VIO_SHIFT_OUTB_TOGGLE, + .frame_width = frame_width, + .in_mode = NRF_VPR_CSR_VIO_MODE_IN_CONTINUOUS, + }; + + nrf_vpr_csr_vio_shift_ctrl_buffered_set(&xfer_shift_ctrl); + + for (uint32_t i = 0; i < xfer_data->word_count; i++) { + + switch (xfer_data->word_count - i) { + case 1: /* Last transfer */ + xfer_shift_ctrl.shift_count = SHIFTCNTB_VALUE(xfer_data->last_word_clocks); + nrf_vpr_csr_vio_shift_ctrl_buffered_set(&xfer_shift_ctrl); + + xfer_data->vio_out_set(xfer_data->last_word); + break; + case 2: /* Last but one transfer.*/ + xfer_shift_ctrl.shift_count = + SHIFTCNTB_VALUE(xfer_data->penultimate_word_clocks); + nrf_vpr_csr_vio_shift_ctrl_buffered_set(&xfer_shift_ctrl); + default: /* Intentional fallthrough */ + xfer_data->vio_out_set(((uint32_t *)xfer_data->data)[i]); + } + + if ((i == 0) && (!*counter_running)) { + /* Start counter */ + nrf_vpr_csr_vtim_simple_counter_set(0, counter_value); + *counter_running = true; + } + } +} + +void hrt_write(hrt_xfer_t *hrt_xfer_params) +{ + hrt_frame_element_t first_element = HRT_FE_DATA; + bool counter_running = false; + + nrf_vpr_csr_vio_mode_out_t out_mode = {.mode = NRF_VPR_CSR_VIO_SHIFT_OUTB_TOGGLE}; + + /* Configure clock and pins */ + nrf_vpr_csr_vio_dir_set(hrt_xfer_params->tx_direction_mask); + + for (uint8_t i = 0; i < HRT_FE_MAX; i++) { + + if (hrt_xfer_params->xfer_data[i].word_count != 0) { + first_element = i; + break; + } + } + + switch (first_element) { + case HRT_FE_COMMAND: + out_mode.frame_width = hrt_xfer_params->bus_widths.command; + break; + case HRT_FE_ADDRESS: + out_mode.frame_width = hrt_xfer_params->bus_widths.address; + break; + case HRT_FE_DATA: + out_mode.frame_width = hrt_xfer_params->bus_widths.data; + break; + default: + break; + } + + nrf_vpr_csr_vtim_count_mode_set(0, NRF_VPR_CSR_VTIM_COUNT_RELOAD); + nrf_vpr_csr_vtim_simple_counter_top_set(0, hrt_xfer_params->counter_value); + nrf_vpr_csr_vio_mode_in_set(NRF_VPR_CSR_VIO_MODE_IN_CONTINUOUS); + + nrf_vpr_csr_vio_mode_out_set(&out_mode); + + switch (hrt_xfer_params->xfer_data[first_element].word_count) { + case 1: + nrf_vpr_csr_vio_shift_cnt_out_set( + hrt_xfer_params->xfer_data[first_element].last_word_clocks); + break; + case 2: + nrf_vpr_csr_vio_shift_cnt_out_set( + hrt_xfer_params->xfer_data[first_element].penultimate_word_clocks); + break; + default: + nrf_vpr_csr_vio_shift_cnt_out_set(BITS_IN_WORD / out_mode.frame_width); + } + + /* Enable CE */ + if (hrt_xfer_params->ce_polarity == MSPI_CE_ACTIVE_LOW) { + nrf_vpr_csr_vio_out_clear_set(BIT(hrt_xfer_params->ce_vio)); + } else { + nrf_vpr_csr_vio_out_or_set(BIT(hrt_xfer_params->ce_vio)); + } + + /* Transfer command */ + hrt_tx(&hrt_xfer_params->xfer_data[HRT_FE_COMMAND], hrt_xfer_params->bus_widths.command, + &counter_running, hrt_xfer_params->counter_value); + /* Transfer address */ + hrt_tx(&hrt_xfer_params->xfer_data[HRT_FE_ADDRESS], hrt_xfer_params->bus_widths.address, + &counter_running, hrt_xfer_params->counter_value); + /* Transfer data */ + hrt_tx(&hrt_xfer_params->xfer_data[HRT_FE_DATA], hrt_xfer_params->bus_widths.data, + &counter_running, hrt_xfer_params->counter_value); + + if (hrt_xfer_params->eliminate_last_pulse) { + + /* Wait until the last word is sent */ + while (nrf_vpr_csr_vio_shift_cnt_out_get() != 0) { + } + + /* This is a partial solution to surplus clock edge problem in modes 1 and 3. + * This solution works only for counter values above 20. + */ + nrf_vpr_csr_vtim_simple_wait_set(0, false, 0); + } + + /* Final configuration */ + nrf_vpr_csr_vio_shift_ctrl_buffered_set(&write_final_shift_ctrl_cfg); + nrf_vpr_csr_vio_out_buffered_reversed_word_set(0x00); + + /* Stop counter */ + nrf_vpr_csr_vtim_count_mode_set(0, NRF_VPR_CSR_VTIM_COUNT_STOP); + + /* Disable CE */ + if (!hrt_xfer_params->ce_hold) { + + if (hrt_xfer_params->ce_polarity == MSPI_CE_ACTIVE_LOW) { + nrf_vpr_csr_vio_out_or_set(BIT(hrt_xfer_params->ce_vio)); + } else { + nrf_vpr_csr_vio_out_clear_set(BIT(hrt_xfer_params->ce_vio)); + } + } +} diff --git a/applications/sdp/mspi/src/hrt/hrt.h b/applications/sdp/mspi/src/hrt/hrt.h new file mode 100644 index 000000000000..3a81f15be37a --- /dev/null +++ b/applications/sdp/mspi/src/hrt/hrt.h @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#ifndef _HRT_H__ +#define _HRT_H__ + +#include +#include +#include +#include + +#define VPRCSR_NORDIC_OUT_HIGH 1 +#define VPRCSR_NORDIC_OUT_LOW 0 + +#define VPRCSR_NORDIC_DIR_OUTPUT 1 +#define VPRCSR_NORDIC_DIR_INPUT 0 + +#define BITS_IN_WORD 32 +#define BITS_IN_BYTE 8 + +typedef enum { + HRT_FE_COMMAND, + HRT_FE_ADDRESS, + HRT_FE_DATA, + HRT_FE_MAX +} hrt_frame_element_t; + +/** @brief Structure for holding bus width of different xfer parts */ +typedef struct { + uint8_t command; + uint8_t address; + uint8_t data; +} hrt_xfer_bus_widths_t; + +typedef struct { + /** @brief Buffer for RX/TX data */ + volatile uint8_t *data; + + /** @brief Data length in 4 byte words, + * calculated as CEIL(buffer_length_bits/32). + */ + uint32_t word_count; + + /** @brief Amount of clock pulses for last word. + * Due to hardware limitation, in case when last word clock pulse count is 1, + * the penultimate word has to share its bits with last word, + * for example: + * buffer length = 36bits, + * bus_width = QUAD, + * last_word_clocks would be:(buffer_length%32)/QUAD = 1 + * so: + * penultimate_word_clocks = 32-BITS_IN_BYTE + * last_word_clocks = (buffer_length%32)/QUAD + BITS_IN_BYTE + * last_word = penultimate_word>>24 | last_word<<8 + */ + uint8_t last_word_clocks; + + /** @brief Amount of clock pulses for penultimate word. + * For more info see last_word_clocks. + */ + uint8_t penultimate_word_clocks; + + /** @brief Value of last word. + * For more info see last_word_clocks. + */ + uint32_t last_word; + + /** @brief Function for writing to buffered out register. */ + void (*vio_out_set)(uint32_t value); +} hrt_xfer_data_t; + +/** @brief Hrt transfer parameters. */ +typedef struct { + + /** @brief Data for all transfer parts */ + hrt_xfer_data_t xfer_data[HRT_FE_MAX]; + + /** @brief Bus widths for different transfer parts (command, address, and data). */ + hrt_xfer_bus_widths_t bus_widths; + + /** @brief Timer value, used for setting clock frequency + */ + uint16_t counter_value; + + /** @brief Index of CE VIO pin */ + uint8_t ce_vio; + + /** @brief If true chip enable pin will be left active after transfer */ + bool ce_hold; + + /** @brief Chip enable pin polarity in enabled state. */ + enum mspi_ce_polarity ce_polarity; + + /** @brief When true clock signal makes 1 transition less. + * It is required for spi modes 1 and 3 due to hardware issue. + */ + bool eliminate_last_pulse; + + /** @brief Tx mode mask for csr dir register */ + uint16_t tx_direction_mask; + + /** @brief Rx mode mask for csr dir register */ + uint16_t rx_direction_mask; + +} hrt_xfer_t; + +/** @brief Write. + * + * Function to be used to write data on MSPI. + * + * @param[in] hrt_xfer_params Hrt transfer parameters and data. + */ +void hrt_write(hrt_xfer_t *hrt_xfer_params); + +#endif /* _HRT_H__ */ diff --git a/applications/sdp/mspi/src/hrt/hrt.s b/applications/sdp/mspi/src/hrt/hrt.s new file mode 100644 index 000000000000..6cfc1b95db80 --- /dev/null +++ b/applications/sdp/mspi/src/hrt/hrt.s @@ -0,0 +1,240 @@ + .file "hrt.c" + .option nopic + .attribute arch, "rv32e1p9_m2p0_c2p0_zicsr2p0" + .attribute unaligned_access, 0 + .attribute stack_align, 4 + .text + .section .text.hrt_tx,"ax",@progbits + .align 1 + .type hrt_tx, @function +hrt_tx: + addi sp,sp,-24 + sw ra,20(sp) + sw s0,16(sp) + sw s1,12(sp) + lw a4,4(a0) + sw a2,0(sp) + sw a3,4(sp) + beq a4,zero,.L1 + slli a3,a1,12 + li a4,126976 + and a3,a3,a4 + li a4,32 + div a4,a4,a1 + mv s0,a0 + addi a4,a4,-1 + andi a4,a4,63 + or a4,a4,a3 + ori a4,a4,1024 + #APP + csrw 3019, a4 + #NO_APP + li s1,0 +.L3: + lw a4,4(s0) + bltu s1,a4,.L9 +.L1: + lw ra,20(sp) + lw s0,16(sp) + lw s1,12(sp) + addi sp,sp,24 + jr ra +.L9: + lw a4,4(s0) + li a1,1 + sub a4,a4,s1 + beq a4,a1,.L4 + li a1,2 + beq a4,a1,.L5 +.L6: + lw a1,16(s0) + lw a4,0(s0) + slli a0,s1,2 + sw a3,8(sp) + add a4,a4,a0 + lw a0,0(a4) + jalr a1 + j .L12 +.L4: + lbu a4,8(s0) + sw a3,8(sp) + addi a4,a4,-1 + andi a4,a4,63 + or a4,a4,a3 + ori a4,a4,1024 + #APP + csrw 3019, a4 + #NO_APP + lw a4,16(s0) + lw a0,12(s0) + jalr a4 +.L12: + lw a3,8(sp) + bne s1,zero,.L8 + lw a5,0(sp) + lbu a4,0(a5) + bne a4,zero,.L8 + lw a5,4(sp) + #APP + csrw 2005, a5 + #NO_APP + lw a5,0(sp) + li a4,1 + sb a4,0(a5) +.L8: + addi s1,s1,1 + j .L3 +.L5: + lbu a4,9(s0) + addi a4,a4,-1 + andi a4,a4,63 + or a4,a4,a3 + ori a4,a4,1024 + #APP + csrw 3019, a4 + #NO_APP + j .L6 + .size hrt_tx, .-hrt_tx + .section .text.hrt_write,"ax",@progbits + .align 1 + .globl hrt_write + .type hrt_write, @function +hrt_write: + addi sp,sp,-16 + sw s0,8(sp) + sw ra,12(sp) + lhu a5,70(a0) + mv s0,a0 + sb zero,3(sp) + #APP + csrw 3009, a5 + #NO_APP + lw a5,4(a0) + beq a5,zero,.L14 + lbu a3,60(a0) + li a5,0 +.L15: + #APP + csrw 2000, 2 + #NO_APP + lhu a4,64(s0) + #APP + csrr a2, 2003 + #NO_APP + li a1,-65536 + and a2,a2,a1 + or a4,a4,a2 + #APP + csrw 2003, a4 + csrw 3011, 0 + #NO_APP + li a2,2031616 + slli a4,a3,16 + and a4,a4,a2 + ori a4,a4,4 + #APP + csrw 3043, a4 + #NO_APP + li a4,20 + mul a5,a5,a4 + li a2,1 + add a5,s0,a5 + lw a4,4(a5) + beq a4,a2,.L17 + li a2,2 + beq a4,a2,.L18 + li a5,32 + div a5,a5,a3 + j .L33 +.L14: + lw a5,24(a0) + beq a5,zero,.L16 + lbu a3,61(a0) + li a5,1 + j .L15 +.L16: + lbu a3,62(a0) + li a5,2 + j .L15 +.L17: + lbu a5,8(a5) +.L33: + #APP + csrw 3022, a5 + #NO_APP + lbu a4,66(s0) + li a5,1 + sll a5,a5,a4 + lbu a4,68(s0) + slli a5,a5,16 + srli a5,a5,16 + bne a4,zero,.L21 + #APP + csrc 3008, a5 + #NO_APP +.L22: + lhu a3,64(s0) + lbu a1,60(s0) + addi a2,sp,3 + mv a0,s0 + call hrt_tx + lhu a3,64(s0) + lbu a1,61(s0) + addi a2,sp,3 + addi a0,s0,20 + call hrt_tx + lhu a3,64(s0) + lbu a1,62(s0) + addi a2,sp,3 + addi a0,s0,40 + call hrt_tx + lbu a5,69(s0) + beq a5,zero,.L23 +.L24: + #APP + csrr a5, 3022 + #NO_APP + andi a5,a5,0xff + bne a5,zero,.L24 + #APP + csrw 2010, 0 + #NO_APP +.L23: + li a5,16384 + addi a5,a5,1 + #APP + csrw 3019, a5 + csrw 3017, 0 + csrw 2000, 0 + #NO_APP + lbu a5,67(s0) + bne a5,zero,.L13 + lbu a4,66(s0) + li a5,1 + sll a5,a5,a4 + lbu a4,68(s0) + slli a5,a5,16 + srli a5,a5,16 + bne a4,zero,.L26 + #APP + csrs 3008, a5 + #NO_APP +.L13: + lw ra,12(sp) + lw s0,8(sp) + addi sp,sp,16 + jr ra +.L18: + lbu a5,9(a5) + j .L33 +.L21: + #APP + csrs 3008, a5 + #NO_APP + j .L22 +.L26: + #APP + csrc 3008, a5 + #NO_APP + j .L13 + .size hrt_write, .-hrt_write diff --git a/applications/sdp/mspi/src/main.c b/applications/sdp/mspi/src/main.c new file mode 100644 index 000000000000..bc7bc597f1bf --- /dev/null +++ b/applications/sdp/mspi/src/main.c @@ -0,0 +1,373 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "hrt/hrt.h" + +#include +#include +#include + +#include +#include +#include +#include + +#include + +#define CE_PINS_MAX 9 +#define DATA_PINS_MAX 8 +#define VIO_COUNT 11 + +#define SUPPORTED_IO_MODES_COUNT 7 + +#define HRT_IRQ_PRIORITY 2 +#define HRT_VEVIF_IDX_WRITE 18 + +#define VEVIF_IRQN(vevif) VEVIF_IRQN_1(vevif) +#define VEVIF_IRQN_1(vevif) VPRCLIC_##vevif##_IRQn + +/* In OCTAL mode 4 bytes for address + 32 bytes for up to 32 dummy cycles*/ +#define ADDR_AND_CYCLES_MAX_SIZE 36 + +static const uint8_t pin_to_vio_map[VIO_COUNT] = { + 4, /* Physical pin 0 */ + 0, /* Physical pin 1 */ + 1, /* Physical pin 2 */ + 3, /* Physical pin 3 */ + 2, /* Physical pin 4 */ + 5, /* Physical pin 5 */ + 6, /* Physical pin 6 */ + 7, /* Physical pin 7 */ + 8, /* Physical pin 8 */ + 9, /* Physical pin 9 */ + 10, /* Physical pin 10 */ +}; + +static const hrt_xfer_bus_widths_t io_modes[SUPPORTED_IO_MODES_COUNT] = { + {1, 1, 1}, /* MSPI_IO_MODE_SINGLE */ + {2, 2, 2}, /* MSPI_IO_MODE_DUAL */ + {1, 1, 2}, /* MSPI_IO_MODE_DUAL_1_1_2 */ + {1, 2, 2}, /* MSPI_IO_MODE_DUAL_1_2_2 */ + {4, 4, 4}, /* MSPI_IO_MODE_QUAD */ + {1, 1, 4}, /* MSPI_IO_MODE_QUAD_1_1_4 */ + {1, 4, 4}, /* MSPI_IO_MODE_QUAD_1_4_4 */ +}; + +static volatile uint8_t ce_vios_count; +static volatile uint8_t ce_vios[CE_PINS_MAX]; +static volatile uint8_t data_vios_count; +static volatile uint8_t data_vios[DATA_PINS_MAX]; +static volatile struct mspi_cfg nrfe_mspi_cfg; +static volatile struct mspi_dev_cfg nrfe_mspi_dev_cfg; +static volatile struct mspi_xfer nrfe_mspi_xfer; +static volatile hrt_xfer_t xfer_params; +static volatile uint8_t address_and_dummy_cycles[ADDR_AND_CYCLES_MAX_SIZE]; + +static struct ipc_ept ep; +static atomic_t ipc_atomic_sem = ATOMIC_INIT(0); + +static void adjust_tail(volatile hrt_xfer_data_t *xfer_data, uint16_t frame_width, + uint32_t data_length) +{ + if (data_length == 0) { + return; + } + + /* Due to hardware limitation, it is not possible to send only 1 + * clock pulse. + */ + NRFX_ASSERT(data_length / frame_width >= 1); + NRFX_ASSERT(data_vios_count >= frame_width); + NRFX_ASSERT(data_length % frame_width == 0); + + uint8_t last_word_length = data_length % BITS_IN_WORD; + uint8_t penultimate_word_length = BITS_IN_WORD; + + xfer_data->word_count = NRFX_CEIL_DIV(data_length, BITS_IN_WORD); + xfer_data->last_word = ((uint32_t *)xfer_data->data)[xfer_data->word_count - 1]; + + /* Due to hardware limitations it is not possible to send only 1 + * clock cycle. Therefore when data_length%32==FRAME_WIDTH last + * word is sent shorter (24bits) and the remaining byte and + * FRAME_WIDTH number of bits are bit is sent together. + */ + if (last_word_length == 0) { + + last_word_length = BITS_IN_WORD; + xfer_data->last_word = ((uint32_t *)xfer_data->data)[xfer_data->word_count - 1]; + + } else if ((last_word_length / frame_width == 1) && (xfer_data->word_count > 1)) { + + penultimate_word_length -= BITS_IN_BYTE; + last_word_length += BITS_IN_BYTE; + + xfer_data->last_word = ((uint32_t *)xfer_data->data)[xfer_data->word_count - 2] >> + (BITS_IN_WORD - BITS_IN_BYTE) | + ((uint32_t *)xfer_data->data)[xfer_data->word_count - 1] + << BITS_IN_BYTE; + } + + xfer_data->last_word_clocks = last_word_length / frame_width; + xfer_data->penultimate_word_clocks = penultimate_word_length / frame_width; +} + +static void configure_clock(enum mspi_cpp_mode cpp_mode) +{ + nrf_vpr_csr_vio_config_t vio_config = { + .input_sel = false, + .stop_cnt = true, + }; + uint16_t out = nrf_vpr_csr_vio_out_get(); + + switch (cpp_mode) { + case MSPI_CPP_MODE_0: { + vio_config.clk_polarity = 0; + WRITE_BIT(out, pin_to_vio_map[NRFE_MSPI_SCK_PIN_NUMBER], VPRCSR_NORDIC_OUT_LOW); + xfer_params.eliminate_last_pulse = false; + break; + } + case MSPI_CPP_MODE_1: { + vio_config.clk_polarity = 1; + WRITE_BIT(out, pin_to_vio_map[NRFE_MSPI_SCK_PIN_NUMBER], VPRCSR_NORDIC_OUT_LOW); + xfer_params.eliminate_last_pulse = true; + break; + } + case MSPI_CPP_MODE_2: { + vio_config.clk_polarity = 1; + WRITE_BIT(out, pin_to_vio_map[NRFE_MSPI_SCK_PIN_NUMBER], VPRCSR_NORDIC_OUT_HIGH); + xfer_params.eliminate_last_pulse = false; + break; + } + case MSPI_CPP_MODE_3: { + vio_config.clk_polarity = 0; + WRITE_BIT(out, pin_to_vio_map[NRFE_MSPI_SCK_PIN_NUMBER], VPRCSR_NORDIC_OUT_HIGH); + xfer_params.eliminate_last_pulse = true; + break; + } + } + nrf_vpr_csr_vio_out_set(out); + nrf_vpr_csr_vio_config_set(&vio_config); +} + +static void xfer_execute(struct mspi_xfer_packet xfer_packet) +{ + NRFX_ASSERT(nrfe_mspi_dev_cfg.ce_num < ce_vios_count); + NRFX_ASSERT(nrfe_mspi_dev_cfg.io_mode < SUPPORTED_IO_MODES_COUNT); + + xfer_params.counter_value = 4; + xfer_params.ce_vio = ce_vios[nrfe_mspi_dev_cfg.ce_num]; + xfer_params.ce_hold = nrfe_mspi_xfer.hold_ce; + xfer_params.ce_polarity = nrfe_mspi_dev_cfg.ce_polarity; + xfer_params.bus_widths = io_modes[nrfe_mspi_dev_cfg.io_mode]; + + /* Fix position of command if command length is < BITS_IN_WORD, + * so that leading zeros would not be printed instead of data bits. + */ + xfer_packet.cmd = xfer_packet.cmd + << (BITS_IN_WORD - nrfe_mspi_xfer.cmd_length * BITS_IN_BYTE); + + xfer_params.xfer_data[HRT_FE_COMMAND].vio_out_set = + &nrf_vpr_csr_vio_out_buffered_reversed_word_set; + xfer_params.xfer_data[HRT_FE_COMMAND].data = (uint8_t *)&xfer_packet.cmd; + xfer_params.xfer_data[HRT_FE_COMMAND].word_count = 0; + + adjust_tail(&xfer_params.xfer_data[HRT_FE_COMMAND], xfer_params.bus_widths.command, + nrfe_mspi_xfer.cmd_length * BITS_IN_BYTE); + + /* Reverse address byte order so that address values are sent instead of zeros */ + for (uint8_t i = 0; i < nrfe_mspi_xfer.addr_length; i++) { + address_and_dummy_cycles[i] = + *(((uint8_t *)&xfer_packet.address) + nrfe_mspi_xfer.addr_length - i - 1); + } + + for (uint8_t i = nrfe_mspi_xfer.addr_length; i < ADDR_AND_CYCLES_MAX_SIZE; i++) { + address_and_dummy_cycles[i] = 0; + } + + xfer_params.xfer_data[HRT_FE_ADDRESS].vio_out_set = + &nrf_vpr_csr_vio_out_buffered_reversed_byte_set; + xfer_params.xfer_data[HRT_FE_ADDRESS].data = address_and_dummy_cycles; + xfer_params.xfer_data[HRT_FE_ADDRESS].word_count = 0; + + adjust_tail(&xfer_params.xfer_data[HRT_FE_ADDRESS], xfer_params.bus_widths.address, + nrfe_mspi_xfer.addr_length * BITS_IN_BYTE + + nrfe_mspi_xfer.tx_dummy * xfer_params.bus_widths.address); + + xfer_params.xfer_data[HRT_FE_DATA].vio_out_set = + &nrf_vpr_csr_vio_out_buffered_reversed_byte_set; + xfer_params.xfer_data[HRT_FE_DATA].data = xfer_packet.data_buf; + xfer_params.xfer_data[HRT_FE_DATA].word_count = 0; + + adjust_tail(&xfer_params.xfer_data[HRT_FE_DATA], xfer_params.bus_widths.data, + xfer_packet.num_bytes * BITS_IN_BYTE); + + nrf_vpr_clic_int_pending_set(NRF_VPRCLIC, VEVIF_IRQN(HRT_VEVIF_IDX_WRITE)); +} + +static void config_pins(nrfe_mspi_pinctrl_soc_pin_t *pins_cfg) +{ + ce_vios_count = 0; + data_vios_count = 0; + xfer_params.tx_direction_mask = 0; + xfer_params.rx_direction_mask = 0; + + for (uint8_t i = 0; i < NRFE_MSPI_PINS_MAX; i++) { + uint32_t psel = NRF_GET_PIN(pins_cfg->pin[i]); + uint32_t fun = NRF_GET_FUN(pins_cfg->pin[i]); + + uint8_t pin_number = NRF_PIN_NUMBER_TO_PIN(psel); + + NRFX_ASSERT(pin_number < VIO_COUNT) + + if ((fun >= NRF_FUN_SDP_MSPI_CS0) && (fun <= NRF_FUN_SDP_MSPI_CS4)) { + + ce_vios[ce_vios_count] = pin_to_vio_map[pin_number]; + WRITE_BIT(xfer_params.tx_direction_mask, ce_vios[ce_vios_count], + VPRCSR_NORDIC_DIR_OUTPUT); + WRITE_BIT(xfer_params.rx_direction_mask, ce_vios[ce_vios_count], + VPRCSR_NORDIC_DIR_OUTPUT); + ce_vios_count++; + + } else if ((fun >= NRF_FUN_SDP_MSPI_DQ0) && (fun <= NRF_FUN_SDP_MSPI_DQ7)) { + + data_vios[data_vios_count] = pin_to_vio_map[pin_number]; + WRITE_BIT(xfer_params.tx_direction_mask, data_vios[data_vios_count], + VPRCSR_NORDIC_DIR_OUTPUT); + WRITE_BIT(xfer_params.rx_direction_mask, data_vios[data_vios_count], + VPRCSR_NORDIC_DIR_INPUT); + data_vios_count++; + } else if (fun == NRF_FUN_SDP_MSPI_SCK) { + WRITE_BIT(xfer_params.tx_direction_mask, + pin_to_vio_map[NRFE_MSPI_SCK_PIN_NUMBER], + VPRCSR_NORDIC_DIR_OUTPUT); + WRITE_BIT(xfer_params.rx_direction_mask, + pin_to_vio_map[NRFE_MSPI_SCK_PIN_NUMBER], + VPRCSR_NORDIC_DIR_OUTPUT); + } + } + nrf_vpr_csr_vio_dir_set(xfer_params.tx_direction_mask); + nrf_vpr_csr_vio_out_set(VPRCSR_NORDIC_OUT_HIGH << pin_to_vio_map[NRFE_MSPI_CS0_PIN_NUMBER]); +} + +static void ep_bound(void *priv) +{ + atomic_set_bit(&ipc_atomic_sem, NRFE_MSPI_EP_BOUNDED); +} + +static void ep_recv(const void *data, size_t len, void *priv) +{ + (void)priv; + (void)len; + nrfe_mspi_flpr_response_t response; + uint8_t opcode = *(uint8_t *)data; + + response.opcode = opcode; + + switch (opcode) { + case NRFE_MSPI_CONFIG_PINS: { + nrfe_mspi_pinctrl_soc_pin_t *pins_cfg = (nrfe_mspi_pinctrl_soc_pin_t *)data; + + config_pins(pins_cfg); + break; + } + case NRFE_MSPI_CONFIG_CTRL: { + nrfe_mspi_cfg_t *cfg = (nrfe_mspi_cfg_t *)data; + + nrfe_mspi_cfg = cfg->cfg; + break; + } + case NRFE_MSPI_CONFIG_DEV: { + nrfe_mspi_dev_cfg_t *cfg = (nrfe_mspi_dev_cfg_t *)data; + + nrfe_mspi_dev_cfg = cfg->cfg; + configure_clock(nrfe_mspi_dev_cfg.cpp); + break; + } + case NRFE_MSPI_CONFIG_XFER: { + nrfe_mspi_xfer_t *xfer = (nrfe_mspi_xfer_t *)data; + + nrfe_mspi_xfer = xfer->xfer; + break; + } + case NRFE_MSPI_TX: + case NRFE_MSPI_TXRX: { + nrfe_mspi_xfer_packet_t *packet = (nrfe_mspi_xfer_packet_t *)data; + + if (packet->packet.dir == MSPI_RX) { + /* TODO: Process received data */ + } else if (packet->packet.dir == MSPI_TX) { + xfer_execute(packet->packet); + } + break; + } + default: + response.opcode = NRFE_MSPI_WRONG_OPCODE; + break; + } + + ipc_service_send(&ep, (const void *)&response.opcode, sizeof(response)); +} + +static const struct ipc_ept_cfg ep_cfg = { + .cb = {.bound = ep_bound, .received = ep_recv}, +}; + +static int backend_init(void) +{ + int ret = 0; + const struct device *ipc0_instance; + volatile uint32_t delay = 0; + +#if !defined(CONFIG_SYS_CLOCK_EXISTS) + /* Wait a little bit for IPC service to be ready on APP side */ + while (delay < 1000) { + delay++; + } +#endif + + ipc0_instance = DEVICE_DT_GET(DT_NODELABEL(ipc0)); + + ret = ipc_service_open_instance(ipc0_instance); + if ((ret < 0) && (ret != -EALREADY)) { + return ret; + } + + ret = ipc_service_register_endpoint(ipc0_instance, &ep, &ep_cfg); + if (ret < 0) { + return ret; + } + + /* Wait for endpoint to be bound */ + while (!atomic_test_and_clear_bit(&ipc_atomic_sem, NRFE_MSPI_EP_BOUNDED)) { + } + + return 0; +} + +__attribute__((interrupt)) void hrt_handler_write(void) +{ + hrt_write((hrt_xfer_t *)&xfer_params); +} + +int main(void) +{ + int ret = backend_init(); + + if (ret < 0) { + return 0; + } + + IRQ_DIRECT_CONNECT(HRT_VEVIF_IDX_WRITE, HRT_IRQ_PRIORITY, hrt_handler_write, 0); + nrf_vpr_clic_int_enable_set(NRF_VPRCLIC, VEVIF_IRQN(HRT_VEVIF_IDX_WRITE), true); + + nrf_vpr_csr_rtperiph_enable_set(true); + + while (true) { + k_cpu_idle(); + } + + return 0; +} diff --git a/applications/sdp/mspi/sysbuild.conf b/applications/sdp/mspi/sysbuild.conf new file mode 100644 index 000000000000..6408669a8474 --- /dev/null +++ b/applications/sdp/mspi/sysbuild.conf @@ -0,0 +1 @@ +SB_CONFIG_PARTITION_MANAGER=n diff --git a/applications/serial_lte_modem/doc/CARRIER_AT_commands.rst b/applications/serial_lte_modem/doc/CARRIER_AT_commands.rst index 2442bab0bfdf..6f4c1888c2dc 100644 --- a/applications/serial_lte_modem/doc/CARRIER_AT_commands.rst +++ b/applications/serial_lte_modem/doc/CARRIER_AT_commands.rst @@ -174,7 +174,7 @@ The ```` command is a string, and can be used as follows: * ``AT#XCARRIER="app_data_create",,`` - Create an empty resource instance of the Data resource (ID: 0) of the Binary App Data Containet object (ID: 19). + Create an empty resource instance of the Data resource (ID: 0) of the Binary App Data Container object (ID: 19). ```` indicates the target object instance. @@ -441,12 +441,6 @@ The ```` command is a string, and can be used as follows: This command accepts two possible input parameters: ``0`` to disable or ``1`` to enable. This command is not available when the :kconfig:option:`CONFIG_SLM_CARRIER_AUTO_STARTUP` Kconfig option is enabled. -* ``AT#XCARRIERCFG="bootstrap_smartcard"[,<0|1>]`` - - Configure the LwM2M carrier library to allow bootstrap from Smartcard. - This command accepts two possible input parameters: ``0`` to disable or ``1`` to enable. - For details, see the :kconfig:option:`CONFIG_LWM2M_CARRIER_BOOTSTRAP_SMARTCARD` Kconfig option. - * ``AT#XCARRIERCFG="carriers"[,"all"|[,[,...[,]]]]`` Configure the networks in which the LwM2M carrier library will apply (see the :ref:`general_options_lwm2m` section of the library's documentation). diff --git a/applications/serial_lte_modem/doc/GNSS_AT_commands.rst b/applications/serial_lte_modem/doc/GNSS_AT_commands.rst index 3eae66d65c69..509f45c453e4 100644 --- a/applications/serial_lte_modem/doc/GNSS_AT_commands.rst +++ b/applications/serial_lte_modem/doc/GNSS_AT_commands.rst @@ -97,7 +97,7 @@ In periodic navigation mode, the ```` and ```` parameters are When using P-GPS, make sure that the value of the :kconfig:option:`CONFIG_SLM_PGPS_INJECT_FIX_DATA` Kconfig option matches your use case. It is enabled by default but should be disabled if the device is expected to move distances longer than a few dozen kilometers between fix attempts. -As an alternative to GNSS-based positioning, see :ref:`#XNRFCLOUDPOS ` for cellular and Wi-Fi positioning. +As an alternative to GNSS-based positioning, see :ref:`#XNRFCLOUDPOS ` for cellular and Wi-Fi® positioning. Unsolicited notification ~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/applications/serial_lte_modem/doc/NRFCLOUD_AT_commands.rst b/applications/serial_lte_modem/doc/NRFCLOUD_AT_commands.rst index 6f2290debdd6..e737fa51d512 100644 --- a/applications/serial_lte_modem/doc/NRFCLOUD_AT_commands.rst +++ b/applications/serial_lte_modem/doc/NRFCLOUD_AT_commands.rst @@ -196,7 +196,7 @@ nRF Cloud location ================== The ``#XNRFCLOUDPOS`` command sends a request to nRF Cloud to determine the device's location. -The request uses information from the cellular network, Wi-Fi access points, or both. +The request uses information from the cellular network, Wi-Fi® access points, or both. .. note:: To use ``#XNRFCLOUDPOS``, the following preconditions apply: diff --git a/applications/serial_lte_modem/doc/SOCKET_AT_commands.rst b/applications/serial_lte_modem/doc/SOCKET_AT_commands.rst index 3b25511d0854..57f4bf041e63 100644 --- a/applications/serial_lte_modem/doc/SOCKET_AT_commands.rst +++ b/applications/serial_lte_modem/doc/SOCKET_AT_commands.rst @@ -1284,6 +1284,7 @@ Syntax * The ```` parameter is a string. * The ```` parameter is an integer that gives a hint for DNS query on address family. + * ``0`` means unspecified address family. * ``1`` means IPv4 address family. * ``2`` means IPv6 address family. diff --git a/applications/serial_lte_modem/doc/TCPUDP_AT_commands.rst b/applications/serial_lte_modem/doc/TCPUDP_AT_commands.rst index 2ce80c3dea9e..d68112c442ad 100644 --- a/applications/serial_lte_modem/doc/TCPUDP_AT_commands.rst +++ b/applications/serial_lte_modem/doc/TCPUDP_AT_commands.rst @@ -716,11 +716,10 @@ UDP receive data :: - #XUDPDATA notification comes only when SLM is not operating in :ref:`data mode `. - #XUDPDATA: ,, +* ``#XUDPDATA`` notification comes only when SLM is not operating in :ref:`data mode `. * The ```` value is an integer that represents the actual number of bytes received. * The ```` value is a string that represents the IPv4 or IPv6 address of the remote peer. * The ```` value is an integer that represents the UDP port of the remote peer. diff --git a/applications/serial_lte_modem/doc/nRF91_as_Zephyr_modem.rst b/applications/serial_lte_modem/doc/nRF91_as_Zephyr_modem.rst index 584ea108d3f4..6e394bbe6364 100644 --- a/applications/serial_lte_modem/doc/nRF91_as_Zephyr_modem.rst +++ b/applications/serial_lte_modem/doc/nRF91_as_Zephyr_modem.rst @@ -11,7 +11,7 @@ Overview ******** Starting with |NCS| v2.6.0, the Serial LTE Modem (SLM) application can be used to turn an nRF91 Series SiP into a standalone modem that can be used through Zephyr's cellular modem driver. -This means that the controlling chip can run a Zephyr application that seamlessly uses Zephyr's IP stack instead of offloaded sockets via AT commands. +This means that the controlling chip can run a Zephyr application that seamlessly uses Zephyr's IP stack instead of offloaded sockets through AT commands. This is made possible by SLM's support of CMUX and PPP and Zephyr's cellular modem driver. @@ -121,7 +121,7 @@ If SLM is running on the nRF9160 DK, the **PROG/DEBUG SW10** switch needs to be However, for convenience you may want to redirect SLM's logs to the SiP's UART 0 so that you do not need to reconnect the RTT client every time the board is reset. See the :ref:`slm_additional_config` section for information on how to do this. -The logs output via UART can be seen by connecting to the appropriate UART with a serial communication program. +The logs output through UART can be seen by connecting to the appropriate UART with a serial communication program. Under Linux, if the controlling chip is the nRF52840 of the nRF9160 DK, the device file of its UART 0 will typically be :file:`/dev/ttyACM1`. After both applications have been flashed to their respective chips and you are connected to receive logs, you can reset the controlling chip. diff --git a/applications/serial_lte_modem/doc/slm_description.rst b/applications/serial_lte_modem/doc/slm_description.rst index 70794bc0d6e9..1f1ff3c352ec 100644 --- a/applications/serial_lte_modem/doc/slm_description.rst +++ b/applications/serial_lte_modem/doc/slm_description.rst @@ -311,6 +311,13 @@ The following configuration files are provided: * :file:`overlay-carrier.conf` - Configuration file that adds |NCS| :ref:`liblwm2m_carrier_readme` support. See :ref:`slm_carrier_library_support` for more information on how to connect to an operator's device management platform. +* :file:`overlay-carrier-softbank.conf` and :file:`sysbuild-softbank.conf` - Configuration files that add SoftBank configurations needed by the carrier library. + Used in conjunction with :file:`overlay-carrier.conf`. + For more information, see the :ref:`lwm2m_carrier_dependent` section of the :ref:`liblwm2m_carrier_readme` documentation. +* :file:`overlay-carrier-lgu.conf` - This configuration file adds LG U+ configurations needed by the carrier library. + Used in conjunction with :file:`overlay-carrier.conf`. + For more information, see the :ref:`lwm2m_carrier_dependent` section of the :ref:`liblwm2m_carrier_readme` documentation. + * :file:`overlay-full_fota.conf` - Configuration file that adds full modem FOTA support. See :ref:`SLM_AT_FOTA` for more information on how to use full modem FOTA functionality. @@ -407,18 +414,18 @@ To connect to an nRF91 Series DK with a PC: 1. Verify that ``UART_0`` is selected in the application. It is defined in the default configuration. -2. Use `nRF Connect Serial Terminal`_ to connect to the development kit. +2. Use the `Serial Terminal app`_ to connect to the development kit. See :ref:`serial_terminal_connect` for instructions. - You can also use the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor`_ app to open the Serial Terminal. - Using the Cellular Monitor app in combination with the nRF Connect Serial Terminal shows how the modem responds to the different modem commands. + You can also use the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor app`_ to open the Serial Terminal app. + Using the Cellular Monitor app in combination with the Serial Terminal app shows how the modem responds to the different modem commands. You can then use this connection to send or receive AT commands over UART, and to see the log output of the development kit. - Instead of using nRF Connect Serial Terminal, you can use PuTTY to establish a terminal connection to the development kit, using the :ref:`default serial port connection settings `. + Instead of using the Serial Terminal app, you can use PuTTY to establish a terminal connection to the development kit, using the :ref:`default serial port connection settings `. .. note:: The default AT command terminator is a carriage return followed by a line feed (``\r\n``). - nRF Connect Serial Terminal supports this format. + The Serial Terminal app supports this format. If you want to use another terminal emulator, make sure that the configured AT command terminator corresponds to the line terminator of your terminal. When using PuTTY, you must set the :ref:`CONFIG_SLM_CR_TERMINATION ` SLM configuration option. See :ref:`slm_config_options` for more details. @@ -642,8 +649,8 @@ If you have an nRF52 Series DK running a client application, you can also use th |test_sample| 1. |connect_kit| -#. :ref:`Connect to the kit with nRF Connect Serial Terminal `. - You can also use the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor`_ app to open the Serial Terminal. +#. :ref:`Connect to the kit with the Serial Terminal app `. + You can also use the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor app`_ to open the Serial Terminal app. If you want to use a different terminal emulator, see :ref:`slm_connecting_91dk_pc`. #. Reset the kit. #. Observe that the development kit sends a ``Ready\r\n`` message on UART. @@ -677,7 +684,7 @@ This application uses the following |NCS| libraries: * :ref:`lib_ftp_client` * :ref:`sms_readme` * :ref:`lib_fota_download` -* :ref:`lib_download_client` +* :ref:`lib_downloader` * :ref:`lib_nrf_cloud` * :ref:`lib_nrf_cloud_agnss` * :ref:`lib_nrf_cloud_pgps` diff --git a/applications/serial_lte_modem/doc/slm_testing.rst b/applications/serial_lte_modem/doc/slm_testing.rst index 5bc3daf2dc29..0cc74a8bd08f 100644 --- a/applications/serial_lte_modem/doc/slm_testing.rst +++ b/applications/serial_lte_modem/doc/slm_testing.rst @@ -377,8 +377,8 @@ TLS client Before completing this test, you must update the CA certificate, the client certificate, and the private key to be used for the TLS connection in the modem. The credentials must use the security tag 16842755. -To store the credentials in the modem, use the Cellular Monitor app. -See `Managing credentials`_ in the Cellular Monitor User Guide for instructions. +To store the credentials in the modem, use the `Cellular Monitor app`_. +See `Managing credentials`_ in the Cellular Monitor app documentation for instructions. You must register the corresponding credentials on the server side. diff --git a/applications/serial_lte_modem/overlay-carrier-lgu.conf b/applications/serial_lte_modem/overlay-carrier-lgu.conf new file mode 100644 index 000000000000..029ac73c65dd --- /dev/null +++ b/applications/serial_lte_modem/overlay-carrier-lgu.conf @@ -0,0 +1,15 @@ +# +# Copyright (c) 2024 Nordic Semiconductor +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +# LG U+ +CONFIG_LWM2M_CARRIER_LG_UPLUS=y + +# Application FOTA +CONFIG_DFU_TARGET_MCUBOOT=y +CONFIG_IMG_MANAGER=y +CONFIG_STREAM_FLASH=y +CONFIG_STREAM_FLASH_ERASE=y +CONFIG_FLASH_MAP=y diff --git a/applications/serial_lte_modem/overlay-carrier-softbank.conf b/applications/serial_lte_modem/overlay-carrier-softbank.conf new file mode 100644 index 000000000000..a5eb6bc9d921 --- /dev/null +++ b/applications/serial_lte_modem/overlay-carrier-softbank.conf @@ -0,0 +1,16 @@ +# +# Copyright (c) 2024 Nordic Semiconductor +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +# SoftBank +CONFIG_LWM2M_CARRIER_SOFTBANK=y +CONFIG_LWM2M_CARRIER_SOFTBANK_DIVIDED_FOTA=y + +# Application FOTA +CONFIG_DFU_TARGET_MCUBOOT=y +CONFIG_IMG_MANAGER=y +CONFIG_STREAM_FLASH=y +CONFIG_STREAM_FLASH_ERASE=y +CONFIG_FLASH_MAP=y diff --git a/applications/serial_lte_modem/overlay-carrier.conf b/applications/serial_lte_modem/overlay-carrier.conf index c0f1e53d429d..6f18ebe451f2 100644 --- a/applications/serial_lte_modem/overlay-carrier.conf +++ b/applications/serial_lte_modem/overlay-carrier.conf @@ -13,7 +13,7 @@ CONFIG_FP_HARDABI=y CONFIG_PDN=y # Download client for DFU -CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE=230 +CONFIG_DOWNLOADER_MAX_FILENAME_SIZE=230 # Modem info CONFIG_MODEM_INFO_BUFFER_SIZE=512 @@ -28,3 +28,6 @@ CONFIG_LWM2M_CARRIER_SETTINGS=y # DFU target library CONFIG_DFU_TARGET=y + +# IPv4 (IPv6 is enabled by default) +CONFIG_NET_IPV4=y diff --git a/applications/serial_lte_modem/overlay-native_tls.conf b/applications/serial_lte_modem/overlay-native_tls.conf index 2b00c7d02509..47842f5b1ae9 100644 --- a/applications/serial_lte_modem/overlay-native_tls.conf +++ b/applications/serial_lte_modem/overlay-native_tls.conf @@ -38,6 +38,8 @@ CONFIG_MBEDTLS_DTLS=y CONFIG_MBEDTLS_SSL_DTLS_CONNECTION_ID=y CONFIG_NET_SOCKETS_ENABLE_DTLS=y CONFIG_NET_IPV4=y +# Maximum timeout for TCP, TLS and DTLS connections +CONFIG_NET_SOCKETS_CONNECT_TIMEOUT=30000 # Enable AES CONFIG_MBEDTLS_AES_C=y CONFIG_MBEDTLS_CCM_C=y diff --git a/applications/serial_lte_modem/prj.conf b/applications/serial_lte_modem/prj.conf index 8130326d3728..222c1d3acd9e 100644 --- a/applications/serial_lte_modem/prj.conf +++ b/applications/serial_lte_modem/prj.conf @@ -62,9 +62,9 @@ CONFIG_HTTP_PARSER_URL=y CONFIG_FOTA_DOWNLOAD=y CONFIG_FOTA_DOWNLOAD_PROGRESS_EVT=y CONFIG_DFU_TARGET=y -CONFIG_DOWNLOAD_CLIENT=y -CONFIG_DOWNLOAD_CLIENT_STACK_SIZE=4096 -CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE=2048 +CONFIG_DOWNLOADER=y +CONFIG_DOWNLOADER_STACK_SIZE=4096 +CONFIG_DOWNLOADER_MAX_FILENAME_SIZE=2048 CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_IMG_MANAGER=y diff --git a/applications/serial_lte_modem/sample.yaml b/applications/serial_lte_modem/sample.yaml index f83b76876841..c7da81025ba6 100644 --- a/applications/serial_lte_modem/sample.yaml +++ b/applications/serial_lte_modem/sample.yaml @@ -18,7 +18,9 @@ tests: - nrf9131ek/nrf9131/ns - thingy91/nrf9160/ns - thingy91x/nrf9151/ns - tags: ci_build sysbuild + tags: + - ci_build + - sysbuild applications.serial_lte_modem.native_tls: sysbuild: true build_only: true @@ -32,7 +34,9 @@ tests: integration_platforms: - nrf9160dk/nrf9160/ns - nrf9161dk/nrf9161/ns - tags: ci_build sysbuild + tags: + - ci_build + - sysbuild applications.serial_lte_modem.lwm2m_carrier: sysbuild: true build_only: true @@ -46,14 +50,43 @@ tests: integration_platforms: - nrf9160dk/nrf9160/ns - nrf9161dk/nrf9161/ns - tags: ci_build sysbuild + tags: + - ci_build + - sysbuild + applications.serial_lte_modem.lwm2m_carrier.softbank: + sysbuild: true + build_only: true + extra_args: + - EXTRA_CONF_FILE="overlay-carrier.conf;overlay-carrier-softbank.conf" + - SB_EXTRA_CONF_FILE=sysbuild-softbank.conf + platform_allow: + - nrf9160dk/nrf9160/ns + integration_platforms: + - nrf9160dk/nrf9160/ns + tags: + - ci_build + - sysbuild + applications.serial_lte_modem.lwm2m_carrier.lgu: + sysbuild: true + build_only: true + extra_args: EXTRA_CONF_FILE="overlay-carrier.conf;overlay-carrier-lgu.conf" + platform_allow: + - nrf9151dk/nrf9151/ns + integration_platforms: + - nrf9151dk/nrf9151/ns + tags: + - ci_build + - sysbuild applications.serial_lte_modem.lwm2m_carrier.thingy91: sysbuild: true build_only: true - extra_args: EXTRA_CONF_FILE=overlay-carrier.conf - SB_CONFIG_THINGY91_STATIC_PARTITIONS_LWM2M_CARRIER=y + extra_args: + - EXTRA_CONF_FILE=overlay-carrier.conf + - SB_CONFIG_THINGY91_STATIC_PARTITIONS_LWM2M_CARRIER=y platform_allow: - thingy91/nrf9160/ns integration_platforms: - thingy91/nrf9160/ns - tags: ci_build sysbuild + tags: + - ci_build + - sysbuild diff --git a/applications/serial_lte_modem/src/gnss/slm_at_gnss.c b/applications/serial_lte_modem/src/gnss/slm_at_gnss.c index 56d2e73a2f87..3964d0ce3aa7 100644 --- a/applications/serial_lte_modem/src/gnss/slm_at_gnss.c +++ b/applications/serial_lte_modem/src/gnss/slm_at_gnss.c @@ -688,8 +688,7 @@ static void gnss_event_handler(int event) } } -SLM_AT_CMD_CUSTOM(xgps_set, "AT#XGPS=", handle_at_gps); -SLM_AT_CMD_CUSTOM(xgps_read, "AT#XGPS?", handle_at_gps); +SLM_AT_CMD_CUSTOM(xgps, "AT#XGPS", handle_at_gps); static int handle_at_gps(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t param_count) { diff --git a/applications/serial_lte_modem/src/gpio/slm_at_gpio.c b/applications/serial_lte_modem/src/gpio/slm_at_gpio.c index 70bade89c176..04d30e8f8dd6 100644 --- a/applications/serial_lte_modem/src/gpio/slm_at_gpio.c +++ b/applications/serial_lte_modem/src/gpio/slm_at_gpio.c @@ -224,8 +224,7 @@ static int handle_at_gpio_configure(enum at_parser_cmd_type cmd_type, return err; } -SLM_AT_CMD_CUSTOM(xgpio_set, "AT#XGPIO=", handle_at_gpio_operate); -SLM_AT_CMD_CUSTOM(xgpio_read, "AT#XGPIO?", handle_at_gpio_operate); +SLM_AT_CMD_CUSTOM(xgpio, "AT#XGPIO", handle_at_gpio_operate); static int handle_at_gpio_operate(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t) { diff --git a/applications/serial_lte_modem/src/http_c/slm_at_httpc.c b/applications/serial_lte_modem/src/http_c/slm_at_httpc.c index f237f33eb2fb..352298132ee2 100644 --- a/applications/serial_lte_modem/src/http_c/slm_at_httpc.c +++ b/applications/serial_lte_modem/src/http_c/slm_at_httpc.c @@ -41,6 +41,7 @@ enum slm_httpccon_operation { /**@brief HTTP client state */ enum httpc_state { HTTPC_INIT, + HTTPC_ONGOING, HTTPC_REQ_DONE, HTTPC_RSP_HEADER_DONE, HTTPC_COMPLETE @@ -518,6 +519,7 @@ static void httpc_thread_fn(void *arg1, void *arg2, void *arg3) } LOG_INF("HTTP thread terminated"); + httpc.state = HTTPC_INIT; } #define HTTP_CRLF_STR "\\r\\n" @@ -581,6 +583,11 @@ static int handle_at_httpc_request(enum at_parser_cmd_type cmd_type, switch (cmd_type) { case AT_PARSER_CMD_TYPE_SET: + if (httpc.state > HTTPC_INIT) { + LOG_ERR("Previous HTTP request is not finished."); + return -EEXIST; + } + memset(slm_data_buf, 0, sizeof(slm_data_buf)); /* Get method string */ size = HTTPC_METHOD_LEN; @@ -641,7 +648,7 @@ static int handle_at_httpc_request(enum at_parser_cmd_type cmd_type, } } httpc.total_sent = 0; - httpc.state = HTTPC_INIT; + httpc.state = HTTPC_ONGOING; httpc.rsp_header_length = 0; httpc.rsp_body_length = 0; /* start http request thread */ diff --git a/applications/serial_lte_modem/src/lwm2m_carrier/slm_at_carrier_cfg.c b/applications/serial_lte_modem/src/lwm2m_carrier/slm_at_carrier_cfg.c index 75f0ec92d798..2cff1be78060 100644 --- a/applications/serial_lte_modem/src/lwm2m_carrier/slm_at_carrier_cfg.c +++ b/applications/serial_lte_modem/src/lwm2m_carrier/slm_at_carrier_cfg.c @@ -101,35 +101,6 @@ static int do_cfg_auto_register(enum at_parser_cmd_type, struct at_parser *parse return lwm2m_settings_auto_register_set(auto_register); } -/* AT#XCARRIERCFG="bootstrap_smartcard"[,<0|1>] */ -SLM_AT_CMD_CUSTOM(xcarriercfg_bootstrap_smartcard, "AT#XCARRIERCFG=\"bootstrap_smartcard\"", - do_cfg_bootstrap_from_smartcard); -static int do_cfg_bootstrap_from_smartcard(enum at_parser_cmd_type, struct at_parser *parser, - uint32_t param_count) -{ - if (param_count == 2) { - rsp_send("\r\n#XCARRIERCFG: %u\r\n", lwm2m_settings_bootstrap_from_smartcard_get()); - return 0; - } else if (param_count != 3) { - return -EINVAL; - } - - int ret; - uint16_t enabled; - - ret = at_parser_num_get(parser, 2, &enabled); - if (ret) { - return ret; - } - - if (enabled > 1) { - LOG_ERR("AT#XCARRIERCFG=\"bootstrap_smartcard\" failed: must be 0 or 1"); - return -EINVAL; - } - - return lwm2m_settings_bootstrap_from_smartcard_set(enabled); -} - const static uint32_t carriers_enabled_map[] = { LWM2M_CARRIER_GENERIC, LWM2M_CARRIER_VERIZON, diff --git a/applications/serial_lte_modem/src/main.c b/applications/serial_lte_modem/src/main.c index b31b1b5a7117..1fb06d7db12a 100644 --- a/applications/serial_lte_modem/src/main.c +++ b/applications/serial_lte_modem/src/main.c @@ -428,6 +428,8 @@ int lte_auto_connect(void) { int err = 0; #if defined(CONFIG_SLM_AUTO_CONNECT) + int ret; + int n; int stat; struct network_config { /* Refer to AT command manual of %XSYSTEMMODE for system mode settings */ @@ -447,8 +449,8 @@ int lte_auto_connect(void) #include "slm_auto_connect.h" }; - err = slm_util_at_scanf("AT+CEREG?", "+CEREG: %d", &stat); - if (err != 1 || (stat == 1 || stat == 5)) { + ret = slm_util_at_scanf("AT+CEREG?", "+CEREG: %d,%d", &n, &stat); + if (ret != 2 || (stat == 1 || stat == 5)) { return 0; } diff --git a/applications/serial_lte_modem/src/nrfcloud/slm_at_nrfcloud.c b/applications/serial_lte_modem/src/nrfcloud/slm_at_nrfcloud.c index b7c39fe141b4..13ac80633371 100644 --- a/applications/serial_lte_modem/src/nrfcloud/slm_at_nrfcloud.c +++ b/applications/serial_lte_modem/src/nrfcloud/slm_at_nrfcloud.c @@ -540,8 +540,7 @@ static int nrf_cloud_datamode_callback(uint8_t op, const uint8_t *data, int len, return ret; } -SLM_AT_CMD_CUSTOM(xnrfcloud_set, "AT#XNRFCLOUD=", handle_at_nrf_cloud); -SLM_AT_CMD_CUSTOM(xnrfcloud_read, "AT#XNRFCLOUD?", handle_at_nrf_cloud); +SLM_AT_CMD_CUSTOM(xnrfcloud, "AT#XNRFCLOUD", handle_at_nrf_cloud); static int handle_at_nrf_cloud(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t param_count) { diff --git a/applications/serial_lte_modem/src/slm_at_fota.c b/applications/serial_lte_modem/src/slm_at_fota.c index 4fffd1dad74d..962b9ee5f8b0 100644 --- a/applications/serial_lte_modem/src/slm_at_fota.c +++ b/applications/serial_lte_modem/src/slm_at_fota.c @@ -26,10 +26,10 @@ LOG_MODULE_REGISTER(slm_fota, CONFIG_SLM_LOG_LEVEL); /* file_uri: scheme://hostname[:port]path[?parameters] */ -#define FILE_URI_MAX CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE +#define FILE_URI_MAX CONFIG_DOWNLOADER_MAX_FILENAME_SIZE #define SCHEMA_HTTP "http" #define SCHEMA_HTTPS "https" -#define URI_HOST_MAX CONFIG_DOWNLOAD_CLIENT_MAX_HOSTNAME_SIZE +#define URI_HOST_MAX CONFIG_DOWNLOADER_MAX_HOSTNAME_SIZE #define URI_SCHEMA_MAX 8 #define ERASE_POLL_TIME 2 diff --git a/applications/serial_lte_modem/src/slm_at_host.c b/applications/serial_lte_modem/src/slm_at_host.c index e395a5bd06bf..3bfff4ba328a 100644 --- a/applications/serial_lte_modem/src/slm_at_host.c +++ b/applications/serial_lte_modem/src/slm_at_host.c @@ -220,21 +220,14 @@ K_TIMER_DEFINE(inactivity_timer, inactivity_timer_handler, NULL); /* Search for quit_str and send data prior to that. Tracks quit_str over several calls. */ static size_t raw_rx_handler(const uint8_t *buf, const size_t len) { + k_mutex_lock(&mutex_data, K_FOREVER); + const char *const quit_str = CONFIG_SLM_DATAMODE_TERMINATOR; size_t processed; bool quit_str_match = false; - bool prev_quit_str_match = false; - uint8_t quit_str_match_count; - uint8_t prev_quit_str_match_count; - - k_mutex_lock(&mutex_data, K_FOREVER); - - /* Initialize from previous time.*/ - prev_quit_str_match_count = quit_str_partial_match; - quit_str_match_count = prev_quit_str_match_count; - if (prev_quit_str_match_count != 0) { - prev_quit_str_match = true; - } + uint8_t quit_str_match_count = quit_str_partial_match; + uint8_t prev_quit_str_match_count = quit_str_partial_match; + uint8_t prev_quit_str_match_count_original = quit_str_partial_match; /* Find quit_str or partial match at the end of the buffer. */ for (processed = 0; processed < len && quit_str_match == false; processed++) { @@ -243,22 +236,37 @@ static size_t raw_rx_handler(const uint8_t *buf, const size_t len) if (quit_str_match_count == strlen(quit_str)) { quit_str_match = true; } - } else { - /* No match. Possible previous partial quit_str match is data. */ - quit_str_match_count = 0; - prev_quit_str_match = false; + } else if (quit_str_match_count > 0) { + /* Check if we match a beginning of a new quit_str. + * We either match the first character, or in the edge case of + * quit_str starting with multiple same characters, e.g. "aaabbb", + * we match all but the current character (with input aaaa). + */ + for (int i = 0; i < quit_str_match_count; i++) { + if (buf[processed] != quit_str[i]) { + quit_str_match_count = i; + break; + } + } + if (quit_str_match_count == 0) { + /* No match. + * Previous partial quit_str is data. + */ + prev_quit_str_match_count = 0; + } else if (prev_quit_str_match_count > 0) { + /* Partial match. + * Part of the previous partial quit_str is data. + */ + prev_quit_str_match_count--; + } } } - if (prev_quit_str_match == false) { - /* Write data which was previously interpreted as a possible partial quit_str. */ - write_data_buf(quit_str, prev_quit_str_match_count); + /* Write data which was previously interpreted as a possible partial quit_str. */ + write_data_buf(quit_str, prev_quit_str_match_count_original - prev_quit_str_match_count); - /* Write data from buf until the start of the possible (partial) quit_str. */ - write_data_buf(buf, processed - quit_str_match_count); - } else { - /* Nothing to write this round.*/ - } + /* Write data from buf until the start of the possible (partial) quit_str. */ + write_data_buf(buf, processed - (quit_str_match_count - prev_quit_str_match_count)); if (quit_str_match) { raw_send(SLM_DATAMODE_FLAGS_NONE); diff --git a/applications/serial_lte_modem/src/slm_at_socket.c b/applications/serial_lte_modem/src/slm_at_socket.c index ddc667d947cf..fb5f9f17fc24 100644 --- a/applications/serial_lte_modem/src/slm_at_socket.c +++ b/applications/serial_lte_modem/src/slm_at_socket.c @@ -972,8 +972,7 @@ static int socket_datamode_callback(uint8_t op, const uint8_t *data, int len, ui return ret; } -SLM_AT_CMD_CUSTOM(xsocket_set, "AT#XSOCKET=", handle_at_socket); -SLM_AT_CMD_CUSTOM(xsocket_read, "AT#XSOCKET?", handle_at_socket); +SLM_AT_CMD_CUSTOM(xsocket, "AT#XSOCKET", handle_at_socket); static int handle_at_socket(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t param_count) { @@ -1040,8 +1039,7 @@ static int handle_at_socket(enum at_parser_cmd_type cmd_type, struct at_parser * return err; } -SLM_AT_CMD_CUSTOM(xssocket_set, "AT#XSSOCKET=", handle_at_secure_socket); -SLM_AT_CMD_CUSTOM(xssocket_read, "AT#XSSOCKET?", handle_at_secure_socket); +SLM_AT_CMD_CUSTOM(xssocket, "AT#XSSOCKET", handle_at_secure_socket); static int handle_at_secure_socket(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t param_count) { @@ -1405,16 +1403,6 @@ SLM_AT_CMD_CUSTOM(xsend, "AT#XSEND", handle_at_send); static int handle_at_send(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t param_count) { - char at_cmd[32] = {0}; - size_t at_cmd_size = sizeof(at_cmd); - - if (util_string_get(parser, 0, at_cmd, &at_cmd_size)) { - return -EINVAL; - } - if (!strncasecmp(at_cmd, "AT#XSENDTO", strlen("AT#XSENDTO"))) { - return handle_at_sendto(cmd_type, parser, param_count); - } - int err = -EINVAL; char data[SLM_MAX_PAYLOAD_SIZE + 1] = {0}; int size; @@ -1440,8 +1428,7 @@ static int handle_at_send(enum at_parser_cmd_type cmd_type, struct at_parser *pa return err; } -SLM_AT_CMD_CUSTOM(xrecv_set, "AT#XRECV=", handle_at_recv); -SLM_AT_CMD_CUSTOM(xrecv_read, "AT#XRECV?", handle_at_recv); +SLM_AT_CMD_CUSTOM(xrecv, "AT#XRECV", handle_at_recv); static int handle_at_recv(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t param_count) { diff --git a/applications/serial_lte_modem/src/slm_ppp.c b/applications/serial_lte_modem/src/slm_ppp.c index 35aee1ce35d7..0b93df11f12a 100644 --- a/applications/serial_lte_modem/src/slm_ppp.c +++ b/applications/serial_lte_modem/src/slm_ppp.c @@ -200,33 +200,48 @@ static int ppp_start_failure(int ret) return ret; } +static unsigned int ppp_retrieve_mtu(void) +{ + struct pdn_dynamic_info populated_info = { 0 }; + + if (!pdn_dynamic_info_get(PDP_CID, &populated_info)) { + if (populated_info.ipv6_mtu) { + /* Set the PPP MTU to that of the LTE link. */ + /* IPv6's MTU has more priority on dual-stack. + * Because, it must be at least 1280 for IPv6, + * while MTU of IPv4 may be less. + */ + return MIN(populated_info.ipv6_mtu, sizeof(ppp_data_buf)); + } + if (populated_info.ipv4_mtu) { + /* Set the PPP MTU to that of the LTE link. */ + return MIN(populated_info.ipv4_mtu, sizeof(ppp_data_buf)); + } + } + + LOG_DBG("Could not retrieve MTU, using fallback value."); + BUILD_ASSERT(sizeof(ppp_data_buf) >= CONFIG_SLM_PPP_FALLBACK_MTU); + return CONFIG_SLM_PPP_FALLBACK_MTU; +} + +static void ppp_set_mtu(void) +{ + const unsigned int mtu = ppp_retrieve_mtu(); + + net_if_set_mtu(ppp_iface, mtu); + LOG_DBG("MTU set to %u.", mtu); +} + static int ppp_start_internal(void) { int ret; - unsigned int mtu; struct ppp_context *const ctx = net_if_l2_data(ppp_iface); if (!configure_ppp_link_ip_addresses(ctx)) { return -EADDRNOTAVAIL; } - ret = pdn_dynamic_params_get(PDP_CID, &ctx->ipcp.my_options.dns1_address, - &ctx->ipcp.my_options.dns2_address, &mtu); - if (ret) { - return ret; - } - - if (mtu) { - /* Set the PPP MTU to that of the LTE link. */ - mtu = MIN(mtu, sizeof(ppp_data_buf)); - } else { - LOG_DBG("Could not retrieve MTU, using fallback value."); - mtu = CONFIG_SLM_PPP_FALLBACK_MTU; - BUILD_ASSERT(sizeof(ppp_data_buf) >= CONFIG_SLM_PPP_FALLBACK_MTU); - } - - net_if_set_mtu(ppp_iface, mtu); - LOG_DBG("MTU set to %u.", mtu); + ppp_set_mtu(); ret = net_if_up(ppp_iface); if (ret) { diff --git a/applications/serial_lte_modem/src/twi/slm_at_twi.c b/applications/serial_lte_modem/src/twi/slm_at_twi.c index 6018ccc06739..17bc1f38776a 100644 --- a/applications/serial_lte_modem/src/twi/slm_at_twi.c +++ b/applications/serial_lte_modem/src/twi/slm_at_twi.c @@ -160,8 +160,7 @@ static int handle_at_twi_list(enum at_parser_cmd_type cmd_type, struct at_parser return err; } -SLM_AT_CMD_CUSTOM(xtwiw_set, "AT#XTWIW=", handle_at_twi_write); -SLM_AT_CMD_CUSTOM(xtwiw_read, "AT#XTWIW?", handle_at_twi_write); +SLM_AT_CMD_CUSTOM(xtwiw, "AT#XTWIW", handle_at_twi_write); static int handle_at_twi_write(enum at_parser_cmd_type cmd_type, struct at_parser *parser, uint32_t param_count) { diff --git a/applications/serial_lte_modem/sysbuild-softbank.conf b/applications/serial_lte_modem/sysbuild-softbank.conf new file mode 100644 index 000000000000..a2fbf01176bb --- /dev/null +++ b/applications/serial_lte_modem/sysbuild-softbank.conf @@ -0,0 +1,7 @@ +# +# Copyright (c) 2024 Nordic Semiconductor +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +SB_CONFIG_LWM2M_CARRIER_DIVIDED_DFU=y diff --git a/applications/serial_lte_modem/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf b/applications/serial_lte_modem/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf index d8ebd794fa15..7c2042de649c 100644 --- a/applications/serial_lte_modem/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf +++ b/applications/serial_lte_modem/sysbuild/mcuboot/boards/thingy91x_nrf9151.conf @@ -14,3 +14,8 @@ CONFIG_UART_CONSOLE=n CONFIG_MCUBOOT_SERIAL=y CONFIG_MCUBOOT_SERIAL_DIRECT_IMAGE_UPLOAD=y CONFIG_BOOT_SERIAL_IMG_GRP_IMAGE_STATE=y + +CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y +CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y + +CONFIG_FW_INFO_FIRMWARE_VERSION=2 diff --git a/applications/serial_lte_modem/sysbuild/mcuboot/boards/thingy91x_nrf9151.overlay b/applications/serial_lte_modem/sysbuild/mcuboot/boards/thingy91x_nrf9151.overlay new file mode 100644 index 000000000000..7f2818c0d280 --- /dev/null +++ b/applications/serial_lte_modem/sysbuild/mcuboot/boards/thingy91x_nrf9151.overlay @@ -0,0 +1,4 @@ +&uart0 { + status = "okay"; + current-speed = < 1000000 >; +}; diff --git a/applications/zigbee_weather_station/README.rst b/applications/zigbee_weather_station/README.rst index 4773d618cf13..5e1df9a588e0 100644 --- a/applications/zigbee_weather_station/README.rst +++ b/applications/zigbee_weather_station/README.rst @@ -7,6 +7,8 @@ Thingy:53: Zigbee weather station :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The Zigbee weather station is an out-of-the-box application for the Nordic Thingy:53. It allows you to build a weather station that uses the Thingy:53's sensors to remotely gather different kinds of data, such as temperature, air pressure, and relative humidity. The application uses the Zigbee protocol, meaning the device can be paired and controlled remotely over a Zigbee network. diff --git a/applications/zigbee_weather_station/sample.yaml b/applications/zigbee_weather_station/sample.yaml index 7eb7238a8881..012354c8f56f 100644 --- a/applications/zigbee_weather_station/sample.yaml +++ b/applications/zigbee_weather_station/sample.yaml @@ -6,7 +6,10 @@ tests: sysbuild: true build_only: true platform_allow: thingy53/nrf5340/cpuapp - tags: ci_build sysbuild zigbee + tags: + - ci_build + - sysbuild + - zigbee extra_args: FILE_SUFFIX=release integration_platforms: - thingy53/nrf5340/cpuapp @@ -14,4 +17,8 @@ tests: sysbuild: true build_only: true platform_allow: thingy53/nrf5340/cpuapp - tags: ci_build debug sysbuild zigbee + tags: + - ci_build + - debug + - sysbuild + - zigbee diff --git a/boards/nordic/nrf52820dongle/Kconfig b/boards/nordic/nrf52820dongle/Kconfig deleted file mode 100644 index 4679fcb33c4c..000000000000 --- a/boards/nordic/nrf52820dongle/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) 2020 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if BOARD_NRF52820DONGLE_NRF52820 - -config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - -endif # BOARD_NRF52820DONGLE_NRF52820 diff --git a/boards/nordic/nrf52820dongle/nrf52820dongle_nrf52820.dts b/boards/nordic/nrf52820dongle/nrf52820dongle_nrf52820.dts index e9353fd7e74f..0caafb2acd41 100644 --- a/boards/nordic/nrf52820dongle/nrf52820dongle_nrf52820.dts +++ b/boards/nordic/nrf52820dongle/nrf52820dongle_nrf52820.dts @@ -63,6 +63,10 @@ }; }; +®1 { + regulator-initial-mode = ; +}; + &uicr { gpio-as-nreset; }; diff --git a/boards/nordic/nrf52833dongle/Kconfig b/boards/nordic/nrf52833dongle/Kconfig deleted file mode 100644 index cba440d67d36..000000000000 --- a/boards/nordic/nrf52833dongle/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) 2020 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if BOARD_NRF52833DONGLE_NRF52833 - -config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - -endif # BOARD_NRF52833DONGLE_NRF52833 diff --git a/boards/nordic/nrf52833dongle/nrf52833dongle_nrf52833.dts b/boards/nordic/nrf52833dongle/nrf52833dongle_nrf52833.dts index 10b5fca3b2c8..47c6b1fb85f2 100644 --- a/boards/nordic/nrf52833dongle/nrf52833dongle_nrf52833.dts +++ b/boards/nordic/nrf52833dongle/nrf52833dongle_nrf52833.dts @@ -63,6 +63,10 @@ }; }; +®1 { + regulator-initial-mode = ; +}; + &uicr { nfct-pins-as-gpios; gpio-as-nreset; diff --git a/boards/nordic/nrf52840gmouse/Kconfig b/boards/nordic/nrf52840gmouse/Kconfig deleted file mode 100644 index b3e016f313e4..000000000000 --- a/boards/nordic/nrf52840gmouse/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) 2018 Nordic Semiconductor -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if BOARD_NRF52840GMOUSE_NRF52840 - -config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - -endif # BOARD_NRF52840GMOUSE_NRF52840 diff --git a/boards/nordic/nrf52840gmouse/nrf52840gmouse_nrf52840.dts b/boards/nordic/nrf52840gmouse/nrf52840gmouse_nrf52840.dts index 3aefa94f9a3b..930338135008 100644 --- a/boards/nordic/nrf52840gmouse/nrf52840gmouse_nrf52840.dts +++ b/boards/nordic/nrf52840gmouse/nrf52840gmouse_nrf52840.dts @@ -37,6 +37,10 @@ status = "okay"; }; +®1 { + regulator-initial-mode = ; +}; + &adc { status = "okay"; }; diff --git a/boards/nordic/nrf52dmouse/Kconfig b/boards/nordic/nrf52dmouse/Kconfig deleted file mode 100644 index 74e9135f18ee..000000000000 --- a/boards/nordic/nrf52dmouse/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) 2019 Nordic Semiconductor -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if BOARD_NRF52DMOUSE_NRF52832 - -config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - -endif # BOARD_NRF52DMOUSE_NRF52832 diff --git a/boards/nordic/nrf52dmouse/nrf52dmouse_nrf52832.dts b/boards/nordic/nrf52dmouse/nrf52dmouse_nrf52832.dts index 0464c35af681..9800b7997301 100644 --- a/boards/nordic/nrf52dmouse/nrf52dmouse_nrf52832.dts +++ b/boards/nordic/nrf52dmouse/nrf52dmouse_nrf52832.dts @@ -25,6 +25,10 @@ }; }; +® { + regulator-initial-mode = ; +}; + &adc { status = "okay"; }; diff --git a/boards/nordic/nrf52kbd/Kconfig b/boards/nordic/nrf52kbd/Kconfig deleted file mode 100644 index 0a0d64b7ac45..000000000000 --- a/boards/nordic/nrf52kbd/Kconfig +++ /dev/null @@ -1,14 +0,0 @@ -# -# Copyright (c) 2019 Nordic Semiconductor -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if BOARD_NRF52KBD_NRF52832 - -config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - -endif # BOARD_NRF52KBD_NRF52832 diff --git a/boards/nordic/nrf52kbd/nrf52kbd_nrf52832.dts b/boards/nordic/nrf52kbd/nrf52kbd_nrf52832.dts index 9fac378fa972..43ff80ceee64 100644 --- a/boards/nordic/nrf52kbd/nrf52kbd_nrf52832.dts +++ b/boards/nordic/nrf52kbd/nrf52kbd_nrf52832.dts @@ -25,6 +25,10 @@ }; }; +® { + regulator-initial-mode = ; +}; + &adc { status = "okay"; }; diff --git a/boards/nordic/thingy91/Kconfig b/boards/nordic/thingy91/Kconfig index 35bdd0ecdaff..516893391927 100644 --- a/boards/nordic/thingy91/Kconfig +++ b/boards/nordic/thingy91/Kconfig @@ -4,15 +4,6 @@ # # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -if BOARD_THINGY91_NRF52840 - -config BOARD_ENABLE_DCDC - bool "Enable DCDC mode" - select SOC_DCDC_NRF52X - default y - -endif # BOARD_THINGY91_NRF52840 - if BOARD_THINGY91_NRF9160 || BOARD_THINGY91_NRF9160_NS config BOARD_INIT_PRIORITY diff --git a/boards/nordic/thingy91/thingy91_nrf52840.dts b/boards/nordic/thingy91/thingy91_nrf52840.dts index 33b3b9319c20..46378bf23353 100644 --- a/boards/nordic/thingy91/thingy91_nrf52840.dts +++ b/boards/nordic/thingy91/thingy91_nrf52840.dts @@ -33,6 +33,10 @@ }; }; +®1 { + regulator-initial-mode = ; +}; + &adc { status = "okay"; }; diff --git a/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 b/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 index a1758d9e0264..f789488a53dc 100644 --- a/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 +++ b/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 @@ -93,16 +93,10 @@ config SECURE_BOOT config BOOTLOADER_MCUBOOT default y if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS -config ADD_MCUBOOT_MEDIATE_SIM_FLASH_DTS - default y if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS - config NRF53_UPGRADE_NETWORK_CORE default y if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS config UPDATEABLE_IMAGE_NUMBER default 2 if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS -config SB_SIGNING_KEY_FILE - default "$(ZEPHYR_NRF_MODULE_DIR)/boards/nordic/thingy91x/nsib_signing_key_nrf5340.pem" if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS || BOARD_THINGY91X_NRF5340_CPUNET - endif # !IS_BOOTLOADER_IMG diff --git a/boards/nordic/thingy91x/Kconfig.defconfig.nrf9151 b/boards/nordic/thingy91x/Kconfig.defconfig.nrf9151 index 25bf7159ba14..decfe1da82f8 100644 --- a/boards/nordic/thingy91x/Kconfig.defconfig.nrf9151 +++ b/boards/nordic/thingy91x/Kconfig.defconfig.nrf9151 @@ -66,14 +66,6 @@ config SECURE_BOOT config BOOTLOADER_MCUBOOT default y -# Do not use these keys for own custom boards! -# These are meant as examples and therefore public. -# The documentation of the nRF Secure Immutable Bootloader and MCUBoot detail on how -# to set up your own keys. - -config SB_SIGNING_KEY_FILE - default "$(ZEPHYR_NRF_MODULE_DIR)/boards/nordic/thingy91x/nsib_signing_key.pem" - config I2C default y diff --git a/boards/nordic/thingy91x/Kconfig.sysbuild b/boards/nordic/thingy91x/Kconfig.sysbuild index d1bf39ba31aa..cb70818cd00b 100644 --- a/boards/nordic/thingy91x/Kconfig.sysbuild +++ b/boards/nordic/thingy91x/Kconfig.sysbuild @@ -50,6 +50,11 @@ endif # BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS || BOARD_THINGY91X_NRF5340_CPUNET +# Do not use these keys for own custom boards! +# These are meant as examples and therefore public. +# The documentation of the nRF Secure Immutable Bootloader and MCUBoot detail on how +# to set up your own keys. + config SECURE_BOOT_SIGNING_KEY_FILE default "$(ZEPHYR_NRF_MODULE_DIR)/boards/nordic/thingy91x/nsib_signing_key_nrf5340.pem" diff --git a/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static.yml b/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static.yml index f14955cef3f5..0cebfb424be7 100644 --- a/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static.yml +++ b/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static.yml @@ -43,7 +43,7 @@ s1_image: region: flash_primary mcuboot_primary: address: 0x30000 - size: 0x64000 + size: 0x44000 span: [mcuboot_pad, app] region: flash_primary mcuboot_pad: @@ -52,22 +52,26 @@ mcuboot_pad: region: flash_primary mcuboot_primary_app: address: 0x30200 - size: 0x63e00 + size: 0x43e00 span: [app] region: flash_primary app_image: address: 0x30200 - size: 0x63e00 + size: 0x43e00 span: [app] region: flash_primary app: address: 0x30200 - size: 0x63e00 + size: 0x43e00 region: flash_primary mcuboot_secondary: - address: 0x94000 - size: 0x64000 + address: 0x74000 + size: 0x44000 region: flash_primary +mcuboot_secondary_1: + address: 0xB8000 + region: flash_primary + size: 0x40000 settings_storage: address: 0xf8000 size: 0x8000 @@ -80,3 +84,7 @@ sram_retained_mem: region: sram_primary address: 0x2007FC00 size: 0x400 +mcuboot_primary_1: + address: 0x0 + region: ram_flash + size: 0x40000 diff --git a/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static_ext_flash.yml b/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static_ext_flash.yml index 5733d90be497..92b455a52846 100644 --- a/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static_ext_flash.yml +++ b/boards/nordic/thingy91x/thingy91x_nrf5340_pm_static_ext_flash.yml @@ -70,17 +70,22 @@ settings_storage: region: flash_primary external_flash: - device: GD25LB256E + device: DT_CHOSEN(nordic_pm_ext_flash) address: 0x0 size: 0x2000000 span: [mcuboot_secondary] region: external_flash mcuboot_secondary: - device: GD25LB256E + device: DT_CHOSEN(nordic_pm_ext_flash) address: 0x0 size: 0xcc000 share_size: [mcuboot_primary] region: external_flash +mcuboot_secondary_1: + address: 0xcc000 + size: 0x40000 + device: DT_CHOSEN(nordic_pm_ext_flash) + region: external_flash pcd_sram: address: 0x20000000 size: 0x2000 diff --git a/boards/nordic/thingy91x/thingy91x_nrf9151_common.dts b/boards/nordic/thingy91x/thingy91x_nrf9151_common.dts index 8ee1f1d7cf6b..b1b6b6a61222 100644 --- a/boards/nordic/thingy91x/thingy91x_nrf9151_common.dts +++ b/boards/nordic/thingy91x/thingy91x_nrf9151_common.dts @@ -33,11 +33,11 @@ label = "RGB red channel"; }; green_led: led_2 { - gpios = <&gpio0 30 0>; + gpios = <&gpio0 31 0>; label = "RGB green channel"; }; blue_led: led_3 { - gpios = <&gpio0 31 0>; + gpios = <&gpio0 30 0>; label = "RGB blue channel"; }; }; @@ -48,10 +48,10 @@ pwms = <&pwm0 0 PWM_MSEC(8) PWM_POLARITY_NORMAL>; }; pwm_led1: pwm_led_1 { - pwms = <&pwm0 1 PWM_MSEC(8) PWM_POLARITY_NORMAL>; + pwms = <&pwm0 2 PWM_MSEC(8) PWM_POLARITY_NORMAL>; }; pwm_led2: pwm_led_2 { - pwms = <&pwm0 2 PWM_MSEC(8) PWM_POLARITY_NORMAL>; + pwms = <&pwm0 1 PWM_MSEC(8) PWM_POLARITY_NORMAL>; }; }; zephyr,user { diff --git a/boards/shields/nrf21540ek/boards/nrf52833dk_nrf52833.overlay b/boards/shields/nrf21540ek/boards/nrf52833dk_nrf52833.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf21540ek/boards/nrf52833dk_nrf52833.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf21540ek/boards/nrf52840dk_nrf52840.overlay b/boards/shields/nrf21540ek/boards/nrf52840dk_nrf52840.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf21540ek/boards/nrf52840dk_nrf52840.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf21540ek/boards/nrf5340_audio_dk_nrf5340_cpuapp.overlay b/boards/shields/nrf21540ek/boards/nrf5340_audio_dk_nrf5340_cpuapp.overlay new file mode 100644 index 000000000000..ac53f21c306b --- /dev/null +++ b/boards/shields/nrf21540ek/boards/nrf5340_audio_dk_nrf5340_cpuapp.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible_fwd.overlay" diff --git a/boards/shields/nrf21540ek/boards/nrf5340_audio_dk_nrf5340_cpunet.overlay b/boards/shields/nrf21540ek/boards/nrf5340_audio_dk_nrf5340_cpunet.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf21540ek/boards/nrf5340_audio_dk_nrf5340_cpunet.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf21540ek/boards/nrf5340dk_nrf5340_cpuapp.overlay b/boards/shields/nrf21540ek/boards/nrf5340dk_nrf5340_cpuapp.overlay new file mode 100644 index 000000000000..ac53f21c306b --- /dev/null +++ b/boards/shields/nrf21540ek/boards/nrf5340dk_nrf5340_cpuapp.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible_fwd.overlay" diff --git a/boards/shields/nrf21540ek/boards/nrf5340dk_nrf5340_cpunet.overlay b/boards/shields/nrf21540ek/boards/nrf5340dk_nrf5340_cpunet.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf21540ek/boards/nrf5340dk_nrf5340_cpunet.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf21540ek/common/arduino_compatible.overlay b/boards/shields/nrf21540ek/common/arduino_compatible.overlay new file mode 100644 index 000000000000..4cd0e9c5274d --- /dev/null +++ b/boards/shields/nrf21540ek/common/arduino_compatible.overlay @@ -0,0 +1,29 @@ +/* Copyright (c) 2021 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/ { + nrf_radio_fem: nrf21540_fem { + compatible = "nordic,nrf21540-fem"; + tx-en-gpios = <&arduino_header 11 GPIO_ACTIVE_HIGH>; /* D5 */ + rx-en-gpios = <&arduino_header 9 GPIO_ACTIVE_HIGH>; /* D3 */ + pdn-gpios = <&arduino_header 15 GPIO_ACTIVE_HIGH>; /* D9 */ + ant-sel-gpios = <&arduino_header 10 GPIO_ACTIVE_HIGH>; /* D4 */ + mode-gpios = <&arduino_header 8 GPIO_ACTIVE_HIGH>; /* D2 */ + spi-if = <&nrf_radio_fem_spi>; + supply-voltage-mv = <3000>; + }; +}; + +fem_spi: &arduino_spi { + status = "okay"; + cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */ + + nrf_radio_fem_spi: nrf21540_fem_spi@0 { + compatible = "nordic,nrf21540-fem-spi"; + status = "okay"; + reg = <0>; + spi-max-frequency = <8000000>; + }; +}; diff --git a/boards/shields/nrf21540ek/common/arduino_compatible_fwd.overlay b/boards/shields/nrf21540ek/common/arduino_compatible_fwd.overlay new file mode 100644 index 000000000000..76702e8eb143 --- /dev/null +++ b/boards/shields/nrf21540ek/common/arduino_compatible_fwd.overlay @@ -0,0 +1,20 @@ +/* Copyright (c) 2021 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +&gpio_fwd { + nrf21540-gpio-if { + gpios = <&arduino_header 11 0>, /* tx-en-gpios */ + <&arduino_header 9 0>, /* rx-en-gpios */ + <&arduino_header 15 0>, /* pdn-gpios */ + <&arduino_header 10 0>, /* ant-sel-gpios */ + <&arduino_header 8 0>; /* mode-gpios */ + }; + nrf21540-spi-if { + gpios = <&arduino_header 16 0>, /* cs-gpios */ + <&gpio1 15 0>, /* SPIM_SCK */ + <&gpio1 14 0>, /* SPIM_MISO */ + <&gpio1 13 0>; /* SPIM_MOSI */ + }; +}; diff --git a/boards/shields/nrf21540ek/nrf21540ek.overlay b/boards/shields/nrf21540ek/nrf21540ek.overlay index 4cd0e9c5274d..1ee42419e331 100644 --- a/boards/shields/nrf21540ek/nrf21540ek.overlay +++ b/boards/shields/nrf21540ek/nrf21540ek.overlay @@ -3,27 +3,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/ { - nrf_radio_fem: nrf21540_fem { - compatible = "nordic,nrf21540-fem"; - tx-en-gpios = <&arduino_header 11 GPIO_ACTIVE_HIGH>; /* D5 */ - rx-en-gpios = <&arduino_header 9 GPIO_ACTIVE_HIGH>; /* D3 */ - pdn-gpios = <&arduino_header 15 GPIO_ACTIVE_HIGH>; /* D9 */ - ant-sel-gpios = <&arduino_header 10 GPIO_ACTIVE_HIGH>; /* D4 */ - mode-gpios = <&arduino_header 8 GPIO_ACTIVE_HIGH>; /* D2 */ - spi-if = <&nrf_radio_fem_spi>; - supply-voltage-mv = <3000>; - }; -}; - -fem_spi: &arduino_spi { - status = "okay"; - cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */ - - nrf_radio_fem_spi: nrf21540_fem_spi@0 { - compatible = "nordic,nrf21540-fem-spi"; - status = "okay"; - reg = <0>; - spi-max-frequency = <8000000>; - }; -}; +/* Integration of this shield differs depending on board. The proper overlay file + * is provided through one of suitable overlays in the 'boards' directory. + * However the file here must exist here to satisfy the way the Zephyr finds + * a shield support. + */ diff --git a/boards/shields/nrf21540ek/nrf21540ek_fwd.overlay b/boards/shields/nrf21540ek/nrf21540ek_fwd.overlay index ec8742e6afb5..a187f7378ace 100644 --- a/boards/shields/nrf21540ek/nrf21540ek_fwd.overlay +++ b/boards/shields/nrf21540ek/nrf21540ek_fwd.overlay @@ -4,27 +4,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/* This file matches the contents of nrf21540ek.overlay and is intended to be applied to nRF5340 - * application core when nrf21540ek shield is provided to the network core's image build. - * - * For instance, consider an application targeted for nRF5340 application core that specifies - * a child image targeted for nRF5340 network core, which drives the nRF21540 Front-End Module. - * The shield overlays could be provided to the build using the following command: - * - * west build -p -b nrf5340dk/nrf5340/cpuapp -- -DSHIELD=nrf21540ek_fwd -D_SHIELD=nrf21540ek +/* The direct use of SHIELD=nrf21540ek_fwd is no more necessary and deprecated. + * Please use just -DSHIELD=nrf21540ek or -D_SHIELD=nrf21540ek. + * For multi-core devices appropriate overlay for the shield will be picked + * by the build system automatically. */ -&gpio_fwd { - nrf21540-gpio-if { - gpios = <&arduino_header 11 0>, /* tx-en-gpios */ - <&arduino_header 9 0>, /* rx-en-gpios */ - <&arduino_header 15 0>, /* pdn-gpios */ - <&arduino_header 10 0>, /* ant-sel-gpios */ - <&arduino_header 8 0>; /* mode-gpios */ - }; - nrf21540-spi-if { - gpios = <&arduino_header 16 0>, /* cs-gpios */ - <&gpio1 15 0>, /* SPIM_SCK */ - <&gpio1 14 0>, /* SPIM_MISO */ - <&gpio1 13 0>; /* SPIM_MOSI */ - }; -}; diff --git a/boards/shields/nrf2220ek/boards/nrf52833dk_nrf52833.overlay b/boards/shields/nrf2220ek/boards/nrf52833dk_nrf52833.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf2220ek/boards/nrf52833dk_nrf52833.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf2220ek/boards/nrf52840dk_nrf52840.overlay b/boards/shields/nrf2220ek/boards/nrf52840dk_nrf52840.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf2220ek/boards/nrf52840dk_nrf52840.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf2220ek/boards/nrf5340dk_nrf5340_cpuapp.overlay b/boards/shields/nrf2220ek/boards/nrf5340dk_nrf5340_cpuapp.overlay new file mode 100644 index 000000000000..ac53f21c306b --- /dev/null +++ b/boards/shields/nrf2220ek/boards/nrf5340dk_nrf5340_cpuapp.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible_fwd.overlay" diff --git a/boards/shields/nrf2220ek/boards/nrf5340dk_nrf5340_cpunet.overlay b/boards/shields/nrf2220ek/boards/nrf5340dk_nrf5340_cpunet.overlay index cd045fcde3b4..8758f5979367 100644 --- a/boards/shields/nrf2220ek/boards/nrf5340dk_nrf5340_cpunet.overlay +++ b/boards/shields/nrf2220ek/boards/nrf5340dk_nrf5340_cpunet.overlay @@ -3,6 +3,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ +#include "../common/arduino_compatible.overlay" + /* On nrf5340_cpunet the uart0 conflicts with nrf_radio_fem_twi and must be disabled. */ &uart0 { status = "disabled"; diff --git a/boards/shields/nrf2220ek/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/boards/shields/nrf2220ek/boards/nrf54l15dk_nrf54l15_cpuapp.overlay new file mode 100644 index 000000000000..65644816a89e --- /dev/null +++ b/boards/shields/nrf2220ek/boards/nrf54l15dk_nrf54l15_cpuapp.overlay @@ -0,0 +1,89 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Pin mapping suitable for use nRF2220-EK PCA63558 with nRF54L15DK. + * The nRF2220-EK in Port P0. + * + * Important: + * On the nRF54L15 Development Kit pins P0.00...P0.03 are + * connected to the debugger chip and by default connect UART0 of the + * debugger chip to the nRF54L15. The UART0 function (VCOM0) of the debugger + * chip must be disabled to allow the pins to be used as FEM control signals + * and FEM I2C interface. The "Board Configurator" tool (v0.3.7) being part of + * "nRF Connect for Desktop" bundle can be used for this purpose. + * + * On the nRF54L15 Development Kit pin P0.04 is connected also to "Button 3". + * Please do not press this button while the firmware nRF2220-EK containing + * the code with this shield is running. + */ + +/ { + nrf_radio_fem: nrf2220_fem { + compatible = "nordic,nrf2220-fem"; + cs-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>; + md-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; + twi-if = <&nrf_radio_fem_twi>; + }; +}; + +&i2c30 { + status = "okay"; + + pinctrl-0 = <&i2c30_default>; + pinctrl-1 = <&i2c30_sleep>; + pinctrl-names = "default", "sleep"; + + nrf_radio_fem_twi: nrf2220_fem_twi@36 { + compatible = "nordic,nrf2220-fem-twi"; + status = "okay"; + reg = <0x36>; + }; +}; + +&pinctrl { + i2c30_default: i2c30_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; + + i2c30_sleep: i2c30_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +&dppic10 { + status = "okay"; +}; + +&ppib11 { + status = "okay"; +}; + +&ppib21 { + status = "okay"; +}; + +&dppic20 { + status = "okay"; +}; + +&ppib22 { + status = "okay"; +}; + +&ppib30 { + status = "okay"; +}; + +&dppic30 { + status = "okay"; +}; diff --git a/boards/shields/nrf2220ek/common/arduino_compatible.overlay b/boards/shields/nrf2220ek/common/arduino_compatible.overlay new file mode 100644 index 000000000000..398990f893f9 --- /dev/null +++ b/boards/shields/nrf2220ek/common/arduino_compatible.overlay @@ -0,0 +1,29 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Pin mapping suitable for use nRF2220-EK PCA63558 with + * Nordic Interposer Board A PCA64172 v0.2.0. + * The nRF2220-EK in SLOT 2 of PCA64172. + */ + +/ { + nrf_radio_fem: nrf2220_fem { + compatible = "nordic,nrf2220-fem"; + cs-gpios = <&arduino_header 14 GPIO_ACTIVE_HIGH>; /* D8 */ + md-gpios = <&arduino_header 13 GPIO_ACTIVE_HIGH>; /* D7 */ + twi-if = <&nrf_radio_fem_twi>; + }; +}; + +fem_twi: &arduino_i2c { + status = "okay"; + compatible = "nordic,nrf-twim"; + + nrf_radio_fem_twi: nrf2220_fem_twi@36 { + compatible = "nordic,nrf2220-fem-twi"; + status = "okay"; + reg = <0x36>; + }; +}; diff --git a/boards/shields/nrf2220ek/common/arduino_compatible_fwd.overlay b/boards/shields/nrf2220ek/common/arduino_compatible_fwd.overlay new file mode 100644 index 000000000000..a33e91be6175 --- /dev/null +++ b/boards/shields/nrf2220ek/common/arduino_compatible_fwd.overlay @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +&gpio_fwd { + nrf2220-gpio-if { + gpios = <&arduino_header 14 0>, /* cs-gpios */ + <&arduino_header 13 0>; /* md-gpios */ + }; + nrf2220-twi-if { + gpios = <&gpio1 2 0>, /* TWIM_SDA */ + <&gpio1 3 0>; /* TWIM_SCL */ + }; +}; diff --git a/boards/shields/nrf2220ek/nrf2220ek.conf b/boards/shields/nrf2220ek/nrf2220ek.conf deleted file mode 100644 index fc68e5275b08..000000000000 --- a/boards/shields/nrf2220ek/nrf2220ek.conf +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_BOOT_BANNER=n -CONFIG_EARLY_CONSOLE=n -CONFIG_NCS_BOOT_BANNER=n diff --git a/boards/shields/nrf2220ek/nrf2220ek.overlay b/boards/shields/nrf2220ek/nrf2220ek.overlay index 398990f893f9..bad84c98160e 100644 --- a/boards/shields/nrf2220ek/nrf2220ek.overlay +++ b/boards/shields/nrf2220ek/nrf2220ek.overlay @@ -3,27 +3,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/* Pin mapping suitable for use nRF2220-EK PCA63558 with - * Nordic Interposer Board A PCA64172 v0.2.0. - * The nRF2220-EK in SLOT 2 of PCA64172. +/* Integration of this shield differs depending on board. The proper overlay file + * is provided through one of suitable overlays in the 'boards' directory. + * However the file here must exist here to satisfy the way the Zephyr finds + * a shield support. */ - -/ { - nrf_radio_fem: nrf2220_fem { - compatible = "nordic,nrf2220-fem"; - cs-gpios = <&arduino_header 14 GPIO_ACTIVE_HIGH>; /* D8 */ - md-gpios = <&arduino_header 13 GPIO_ACTIVE_HIGH>; /* D7 */ - twi-if = <&nrf_radio_fem_twi>; - }; -}; - -fem_twi: &arduino_i2c { - status = "okay"; - compatible = "nordic,nrf-twim"; - - nrf_radio_fem_twi: nrf2220_fem_twi@36 { - compatible = "nordic,nrf2220-fem-twi"; - status = "okay"; - reg = <0x36>; - }; -}; diff --git a/boards/shields/nrf2220ek/nrf2220ek_fwd.overlay b/boards/shields/nrf2220ek/nrf2220ek_fwd.overlay index d0c795432394..cf3b53c5ce22 100644 --- a/boards/shields/nrf2220ek/nrf2220ek_fwd.overlay +++ b/boards/shields/nrf2220ek/nrf2220ek_fwd.overlay @@ -4,23 +4,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/* This file matches the contents of nrf2220ek.overlay and is intended to be applied to nRF5340 - * application core when nrf2220ek shield is provided to the network core's image build. - * - * For instance, consider an application targeted for nRF5340 application core that specifies - * a child image targeted for nRF5340 network core, which drives the nRF2220 Front-End Module. - * The shield overlays could be provided to the build using the following command: - * - * west build -p -b nrf5340dk/nrf5340/cpuapp -- -DSHIELD=nrf2220ek_fwd -D_SHIELD=nrf2220ek +/* The direct use of SHIELD=nrf2220_fwd is no more necessary and deprecated. + * Please use just -DSHIELD=nrf2220ek or -D_SHIELD=nrf2220ek. + * For multi-core devices appropriate overlay for the shield will be picked + * by the build system automatically. */ - -&gpio_fwd { - nrf2220-gpio-if { - gpios = <&arduino_header 14 0>, /* cs-gpios */ - <&arduino_header 13 0>; /* md-gpios */ - }; - nrf2220-twi-if { - gpios = <&gpio1 2 0>, /* TWIM_SDA */ - <&gpio1 3 0>; /* TWIM_SCL */ - }; -}; diff --git a/boards/shields/nrf2240ek/boards/nrf52833dk_nrf52833.conf b/boards/shields/nrf2240ek/boards/nrf52833dk_nrf52833.conf new file mode 100644 index 000000000000..71f41b024939 --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf52833dk_nrf52833.conf @@ -0,0 +1,7 @@ +# Options related to the nPM1300 regulator and the workaround +# against voltage drops on the nRF2240 power supply pin VDDPALDO. +CONFIG_SENSOR=y +CONFIG_NPM1300_CHARGER=y +# Ensure that FEM is initialized after the nPM1300 current limit on the nRF2240EK is set. +CONFIG_SENSOR_INIT_PRIORITY=90 +CONFIG_MPSL_FEM_INIT_PRIORITY=91 diff --git a/boards/shields/nrf2240ek/boards/nrf52833dk_nrf52833.overlay b/boards/shields/nrf2240ek/boards/nrf52833dk_nrf52833.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf52833dk_nrf52833.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf2240ek/boards/nrf52840dk_nrf52840.conf b/boards/shields/nrf2240ek/boards/nrf52840dk_nrf52840.conf new file mode 100644 index 000000000000..71f41b024939 --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf52840dk_nrf52840.conf @@ -0,0 +1,7 @@ +# Options related to the nPM1300 regulator and the workaround +# against voltage drops on the nRF2240 power supply pin VDDPALDO. +CONFIG_SENSOR=y +CONFIG_NPM1300_CHARGER=y +# Ensure that FEM is initialized after the nPM1300 current limit on the nRF2240EK is set. +CONFIG_SENSOR_INIT_PRIORITY=90 +CONFIG_MPSL_FEM_INIT_PRIORITY=91 diff --git a/boards/shields/nrf2240ek/boards/nrf52840dk_nrf52840.overlay b/boards/shields/nrf2240ek/boards/nrf52840dk_nrf52840.overlay new file mode 100644 index 000000000000..0d89ab0643b0 --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf52840dk_nrf52840.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible.overlay" diff --git a/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpuapp.overlay b/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpuapp.overlay new file mode 100644 index 000000000000..ac53f21c306b --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpuapp.overlay @@ -0,0 +1,6 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +#include "../common/arduino_compatible_fwd.overlay" diff --git a/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpunet.conf b/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpunet.conf new file mode 100644 index 000000000000..71f41b024939 --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpunet.conf @@ -0,0 +1,7 @@ +# Options related to the nPM1300 regulator and the workaround +# against voltage drops on the nRF2240 power supply pin VDDPALDO. +CONFIG_SENSOR=y +CONFIG_NPM1300_CHARGER=y +# Ensure that FEM is initialized after the nPM1300 current limit on the nRF2240EK is set. +CONFIG_SENSOR_INIT_PRIORITY=90 +CONFIG_MPSL_FEM_INIT_PRIORITY=91 diff --git a/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpunet.overlay b/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpunet.overlay index cd045fcde3b4..8758f5979367 100644 --- a/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpunet.overlay +++ b/boards/shields/nrf2240ek/boards/nrf5340dk_nrf5340_cpunet.overlay @@ -3,6 +3,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ +#include "../common/arduino_compatible.overlay" + /* On nrf5340_cpunet the uart0 conflicts with nrf_radio_fem_twi and must be disabled. */ &uart0 { status = "disabled"; diff --git a/boards/shields/nrf2240ek/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/boards/shields/nrf2240ek/boards/nrf54l15dk_nrf54l15_cpuapp.conf new file mode 100644 index 000000000000..71f41b024939 --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf54l15dk_nrf54l15_cpuapp.conf @@ -0,0 +1,7 @@ +# Options related to the nPM1300 regulator and the workaround +# against voltage drops on the nRF2240 power supply pin VDDPALDO. +CONFIG_SENSOR=y +CONFIG_NPM1300_CHARGER=y +# Ensure that FEM is initialized after the nPM1300 current limit on the nRF2240EK is set. +CONFIG_SENSOR_INIT_PRIORITY=90 +CONFIG_MPSL_FEM_INIT_PRIORITY=91 diff --git a/boards/shields/nrf2240ek/boards/nrf54l15dk_nrf54l15_cpuapp.overlay b/boards/shields/nrf2240ek/boards/nrf54l15dk_nrf54l15_cpuapp.overlay new file mode 100644 index 000000000000..d80248a42dd7 --- /dev/null +++ b/boards/shields/nrf2240ek/boards/nrf54l15dk_nrf54l15_cpuapp.overlay @@ -0,0 +1,116 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Pin mapping suitable for use nRF2240-EK PCA63564 with nRF54L15DK. + * The nRF2240-EK in Port P0. + * + * Important: + * On the nRF54L15 Development Kit pins P0.00...P0.03 are + * connected to the debugger chip and by default connect UART0 of the + * debugger chip to the nRF54L15. The UART0 function (VCOM0) of the debugger + * chip must be disabled to allow the pins to be used as FEM control signals + * and FEM I2C interface. The "Board Configurator" tool (v0.3.7) being part of + * "nRF Connect for Desktop" bundle can be used for this purpose. + * + * On the nRF54L15 Development Kit pin P0.04 is connected also to "Button 3". + * Please do not press this button while the firmware nRF2240-EK containing + * the code with this shield is running. + */ + +/ { + nrf_radio_fem: nrf2240_fem { + compatible = "nordic,nrf2240-fem"; + cs-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>; + md-gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; + pwrmd-gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>; + twi-if = <&nrf_radio_fem_twi>; + }; +}; + +&i2c30 { + status = "okay"; + + pinctrl-0 = <&i2c30_default>; + pinctrl-1 = <&i2c30_sleep>; + pinctrl-names = "default", "sleep"; + + nrf_radio_fem_twi: nrf2240_fem_twi@30 { + compatible = "nordic,nrf2240-fem-twi"; + status = "okay"; + reg = <0x30>; + }; + + /* The nPM1300 on the nRF2240EK is used to supply power to the nRF2240 device. */ + nrf2240ek_pmic: pmic@6b { + compatible = "nordic,npm1300"; + status = "okay"; + reg = <0x6b>; + + nrf2240ek_pmic_charger: charger { + compatible = "nordic,npm1300-charger"; + status = "okay"; + /* When objects are placed close to the PCB antenna of the nRF2240EK shield + * the supply voltage drops on the nRF2240 power supply pin VDDPALDO were + * observed. As a workaround the current limit on VBUS of the PMIC + * is increased. + */ + vbus-limit-microamp = <500000>; + /* This PMIC does not have a battery, but the settings below are required + * by the driver + */ + term-microvolt = <4150000>; + current-microamp = <150000>; + dischg-limit-microamp = <1000000>; + thermistor-ohms = <10000>; + thermistor-beta = <3380>; + }; + }; +}; + +&pinctrl { + i2c30_default: i2c30_default { + group1 { + psels = , + ; + bias-pull-up; + }; + }; + + i2c30_sleep: i2c30_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; + +&dppic10 { + status = "okay"; +}; + +&ppib11 { + status = "okay"; +}; + +&ppib21 { + status = "okay"; +}; + +&dppic20 { + status = "okay"; +}; + +&ppib22 { + status = "okay"; +}; + +&ppib30 { + status = "okay"; +}; + +&dppic30 { + status = "okay"; +}; diff --git a/boards/shields/nrf2240ek/common/arduino_compatible.overlay b/boards/shields/nrf2240ek/common/arduino_compatible.overlay new file mode 100644 index 000000000000..2044c7955db6 --- /dev/null +++ b/boards/shields/nrf2240ek/common/arduino_compatible.overlay @@ -0,0 +1,56 @@ +/* Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +/* Pin mapping suitable for use nRF2240-EK PCA63564 with + * Nordic Interposer Board A PCA64172 v0.2.0. + * The nRF2240-EK in SLOT 2 of PCA64172. + */ + +/ { + nrf_radio_fem: nrf2240_fem { + compatible = "nordic,nrf2240-fem"; + cs-gpios = <&arduino_header 14 GPIO_ACTIVE_HIGH>; /* D8 */ + md-gpios = <&arduino_header 13 GPIO_ACTIVE_HIGH>; /* D7 */ + pwrmd-gpios = <&arduino_header 4 GPIO_ACTIVE_HIGH>; /* A4 */ + twi-if = <&nrf_radio_fem_twi>; + }; +}; + +&arduino_i2c { + status = "okay"; + compatible = "nordic,nrf-twim"; + + nrf_radio_fem_twi: nrf2240_fem_twi@30 { + compatible = "nordic,nrf2240-fem-twi"; + status = "okay"; + reg = <0x30>; + }; + + /* The nPM1300 on the nRF2240EK is used to supply power to the nRF2240 device. */ + nrf2240ek_pmic: pmic@6b { + compatible = "nordic,npm1300"; + status = "okay"; + reg = <0x6b>; + + nrf2240ek_pmic_charger: charger { + compatible = "nordic,npm1300-charger"; + status = "okay"; + /* When objects are placed close to the PCB antenna of the nRF2240EK + * shield the supply voltage drops on the nRF2240 power supply pin + * VDDPALDO were observed. As a workaround the current limit on VBUS + * of the PMIC is increased. + */ + vbus-limit-microamp = <500000>; + /* This PMIC does not have a battery, but the settings below are required + * by the driver. + */ + term-microvolt = <4150000>; + current-microamp = <150000>; + dischg-limit-microamp = <1000000>; + thermistor-ohms = <10000>; + thermistor-beta = <3380>; + }; + }; +}; diff --git a/boards/shields/nrf2240ek/common/arduino_compatible_fwd.overlay b/boards/shields/nrf2240ek/common/arduino_compatible_fwd.overlay new file mode 100644 index 000000000000..2ee7c272e2ab --- /dev/null +++ b/boards/shields/nrf2240ek/common/arduino_compatible_fwd.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ + +&gpio_fwd { + nrf2240-gpio-if { + gpios = <&arduino_header 14 0>, /* cs-gpios */ + <&arduino_header 13 0>, /* md-gpios */ + <&arduino_header 4 0>; /* pwrmd-gpios */ + }; + nrf2240-twi-if { + gpios = <&gpio1 2 0>, /* TWIM_SDA */ + <&gpio1 3 0>; /* TWIM_SCL */ + }; +}; diff --git a/boards/shields/nrf2240ek/nrf2240ek.conf b/boards/shields/nrf2240ek/nrf2240ek.conf deleted file mode 100644 index c3171f45690c..000000000000 --- a/boards/shields/nrf2240ek/nrf2240ek.conf +++ /dev/null @@ -1,11 +0,0 @@ -CONFIG_BOOT_BANNER=n -CONFIG_EARLY_CONSOLE=n -CONFIG_NCS_BOOT_BANNER=n - -# Options related to the nPM1300 regulator and the workaround -# against voltage drops on the nRF2240 power supply pin VDDPALDO. -CONFIG_SENSOR=y -CONFIG_NPM1300_CHARGER=y -# Ensure that FEM is initialized after the nPM1300 current limit on the nRF2240EK is set. -CONFIG_SENSOR_INIT_PRIORITY=90 -CONFIG_MPSL_FEM_INIT_PRIORITY=91 diff --git a/boards/shields/nrf2240ek/nrf2240ek.overlay b/boards/shields/nrf2240ek/nrf2240ek.overlay index c19f43a1a81c..bad84c98160e 100644 --- a/boards/shields/nrf2240ek/nrf2240ek.overlay +++ b/boards/shields/nrf2240ek/nrf2240ek.overlay @@ -3,51 +3,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/* Pin mapping suitable for use nRF2240-EK PCA63564 with - * Nordic Interposer Board A PCA64172 v0.2.0. - * The nRF2240-EK in SLOT 2 of PCA64172. +/* Integration of this shield differs depending on board. The proper overlay file + * is provided through one of suitable overlays in the 'boards' directory. + * However the file here must exist here to satisfy the way the Zephyr finds + * a shield support. */ - -/ { - nrf_radio_fem: nrf2240_fem { - compatible = "nordic,nrf2240-fem"; - cs-gpios = <&arduino_header 14 GPIO_ACTIVE_HIGH>; /* D8 */ - md-gpios = <&arduino_header 13 GPIO_ACTIVE_HIGH>; /* D7 */ - pwrmd-gpios = <&arduino_header 4 GPIO_ACTIVE_HIGH>; /* A4 */ - twi-if = <&nrf_radio_fem_twi>; - }; -}; - -&arduino_i2c { - status = "okay"; - compatible = "nordic,nrf-twim"; - - nrf_radio_fem_twi: nrf2240_fem_twi@30 { - compatible = "nordic,nrf2240-fem-twi"; - status = "okay"; - reg = <0x30>; - }; - - /* The nPM1300 on the nRF2240EK is used to supply power to the nRF2240 device. */ - nrf2240ek_pmic: pmic@6b { - compatible = "nordic,npm1300"; - status = "okay"; - reg = <0x6b>; - - nrf2240ek_pmic_charger: charger { - compatible = "nordic,npm1300-charger"; - status = "okay"; - /* When objects are placed close to the PCB antenna of the nRF2240EK shield - * the supply voltage drops on the nRF2240 power supply pin VDDPALDO were observed. - * As a workaround the current limit on VBUS of the PMIC is increased. - */ - vbus-limit-microamp = <500000>; - /* This PMIC does not have a battery, but the settings below are required by the driver */ - term-microvolt = <4150000>; - current-microamp = <150000>; - dischg-limit-microamp = <1000000>; - thermistor-ohms = <10000>; - thermistor-beta = <3380>; - }; - }; -}; diff --git a/boards/shields/nrf2240ek/nrf2240ek_fwd.overlay b/boards/shields/nrf2240ek/nrf2240ek_fwd.overlay index 66085ef8b136..7b06d74ed1e1 100644 --- a/boards/shields/nrf2240ek/nrf2240ek_fwd.overlay +++ b/boards/shields/nrf2240ek/nrf2240ek_fwd.overlay @@ -4,24 +4,8 @@ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ -/* This file matches the contents of nrf2240ek.overlay and is intended to be applied to nRF5340 - * application core when nrf2240ek shield is provided to the network core's image build. - * - * For instance, consider an application targeted for nRF5340 application core that specifies - * a child image targeted for nRF5340 network core, which drives the nRF2240 Front-End Module. - * The shield overlays could be provided to the build using the following command: - * - * west build -p -b nrf5340dk/nrf5340/cpuapp -- -DSHIELD=nrf2240ek_fwd -D_SHIELD=nrf2240ek +/* The direct use of SHIELD=nrf2240_fwd is no more necessary and deprecated. + * Please use just -DSHIELD=nrf2240ek or -D_SHIELD=nrf2240ek. + * For multi-core devices appropriate overlay for the shield will be picked + * by the build system automatically. */ - -&gpio_fwd { - nrf2240-gpio-if { - gpios = <&arduino_header 14 0>, /* cs-gpios */ - <&arduino_header 13 0>, /* md-gpios */ - <&arduino_header 4 0>; /* pwrmd-gpios */ - }; - nrf2240-twi-if { - gpios = <&gpio1 2 0>, /* TWIM_SDA */ - <&gpio1 3 0>; /* TWIM_SCL */ - }; -}; diff --git a/boards/shields/nrf7002eb_interposer_p1/boards/nrf54l15pdk_nrf54l15_cpuapp.overlay b/boards/shields/nrf7002eb_interposer_p1/boards/nrf54l15pdk_nrf54l15_cpuapp.overlay deleted file mode 100644 index 76ae75150f8f..000000000000 --- a/boards/shields/nrf7002eb_interposer_p1/boards/nrf54l15pdk_nrf54l15_cpuapp.overlay +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2024 Nordic Semiconductor - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include "../nrf7002eb_interposer_p1_gpio_map_1.dtsi" - -&pinctrl { - spi22_default: spi22_default { - group1 { - psels = , - , - ; - }; - }; - - spi22_sleep: spi22_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; -}; - -edge_connector_spi: &spi22 { - status = "okay"; - cs-gpios = <&edge_connector 18 GPIO_ACTIVE_LOW>; - pinctrl-0 = <&spi22_default>; - pinctrl-1 = <&spi22_sleep>; - pinctrl-names = "default", "sleep"; -}; diff --git a/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_cpuapp.overlay b/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_cpuapp.overlay deleted file mode 100644 index 0533b61ea356..000000000000 --- a/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_cpuapp.overlay +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2024 Nordic Semiconductor ASA - * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause - */ - -/ { - aliases { - sensor-bme688 = &i2c22; - accel0 = &adxl362; - accel-gyro = &bmi270; - /delete-property/ led0; - /delete-property/ led3; - /delete-property/ sw0; - }; -}; - -/delete-node/ &led0; // P2.09 is adxl362 SPIM_MISO -/delete-node/ &led3; // P1.14 is adxl362 interrupt signal -/delete-node/ &button0; // P1.13 is bmi270 chip select signal - -&pinctrl { - i2c22_default: i2c22_default { - group1 { - psels = , - ; - }; - }; - - i2c22_sleep: i2c22_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; - - spi21_default: spi21_default { - group1 { - psels = , - , - ; - }; - }; - - spi21_sleep: spi21_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; -}; - -&i2c22 { - status = "okay"; - zephyr,concat-buf-size = <512>; - pinctrl-0 = <&i2c22_default>; - pinctrl-1 = <&i2c22_sleep>; - pinctrl-names = "default", "sleep"; - - bme688: bme688@76 { - compatible = "bosch,bme680"; - status = "okay"; - reg = <0x76>; - }; -}; - -&spi21 { - status = "okay"; - pinctrl-0 = <&spi21_default>; - pinctrl-1 = <&spi21_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&gpio1 13 GPIO_ACTIVE_LOW>, - <&gpio2 10 GPIO_ACTIVE_LOW>; - - bmi270: bmi270@0 { - compatible = "bosch,bmi270"; - status = "okay"; - reg = <0>; - spi-max-frequency = ; - }; - - adxl362: adxl362@1 { - compatible = "adi,adxl362"; - status = "okay"; - reg = <1>; - int1-gpios = <&gpio1 14 (GPIO_ACTIVE_HIGH)>; - spi-max-frequency = ; - }; -}; diff --git a/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_cpuflpr.overlay b/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_cpuflpr.overlay deleted file mode 100644 index 0533b61ea356..000000000000 --- a/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_cpuflpr.overlay +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2024 Nordic Semiconductor ASA - * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause - */ - -/ { - aliases { - sensor-bme688 = &i2c22; - accel0 = &adxl362; - accel-gyro = &bmi270; - /delete-property/ led0; - /delete-property/ led3; - /delete-property/ sw0; - }; -}; - -/delete-node/ &led0; // P2.09 is adxl362 SPIM_MISO -/delete-node/ &led3; // P1.14 is adxl362 interrupt signal -/delete-node/ &button0; // P1.13 is bmi270 chip select signal - -&pinctrl { - i2c22_default: i2c22_default { - group1 { - psels = , - ; - }; - }; - - i2c22_sleep: i2c22_sleep { - group1 { - psels = , - ; - low-power-enable; - }; - }; - - spi21_default: spi21_default { - group1 { - psels = , - , - ; - }; - }; - - spi21_sleep: spi21_sleep { - group1 { - psels = , - , - ; - low-power-enable; - }; - }; -}; - -&i2c22 { - status = "okay"; - zephyr,concat-buf-size = <512>; - pinctrl-0 = <&i2c22_default>; - pinctrl-1 = <&i2c22_sleep>; - pinctrl-names = "default", "sleep"; - - bme688: bme688@76 { - compatible = "bosch,bme680"; - status = "okay"; - reg = <0x76>; - }; -}; - -&spi21 { - status = "okay"; - pinctrl-0 = <&spi21_default>; - pinctrl-1 = <&spi21_sleep>; - pinctrl-names = "default", "sleep"; - cs-gpios = <&gpio1 13 GPIO_ACTIVE_LOW>, - <&gpio2 10 GPIO_ACTIVE_LOW>; - - bmi270: bmi270@0 { - compatible = "bosch,bmi270"; - status = "okay"; - reg = <0>; - spi-max-frequency = ; - }; - - adxl362: adxl362@1 { - compatible = "adi,adxl362"; - status = "okay"; - reg = <1>; - int1-gpios = <&gpio1 14 (GPIO_ACTIVE_HIGH)>; - spi-max-frequency = ; - }; -}; diff --git a/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_vpr_launcher.overlay b/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_vpr_launcher.overlay deleted file mode 100644 index ff8c22be1eba..000000000000 --- a/boards/shields/pca63565/boards/nrf54l15pdk_nrf54l15_vpr_launcher.overlay +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2024 Nordic Semiconductor ASA - * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause - */ - -/* - * SHIELD is applied to both FLPR and Application cores. - * Disable sensors on Application core because: - * - vpr_launcher is not using them; - * - prevent collision when both cores try to initialize same resource; - */ - -&i2c22 { - status = "disabled"; -}; - -&bme688 { - status = "disabled"; -}; - -&spi21 { - status = "disabled"; -}; - -&bmi270 { - status = "disabled"; -}; - -&adxl362 { - status = "disabled"; -}; diff --git a/boards/shields/pca63566/boards/nrf54h20dk_nrf54h20_common.dtsi b/boards/shields/pca63566/boards/nrf54h20dk_nrf54h20_common.dtsi index 57a99fe79836..b606bdb56006 100644 --- a/boards/shields/pca63566/boards/nrf54h20dk_nrf54h20_common.dtsi +++ b/boards/shields/pca63566/boards/nrf54h20dk_nrf54h20_common.dtsi @@ -55,6 +55,7 @@ pinctrl-1 = <&i2c130_sleep>; pinctrl-names = "default", "sleep"; zephyr,concat-buf-size = <255>; + zephyr,pm-device-runtime-auto; bme688: bme688@76 { compatible = "bosch,bme680"; @@ -82,6 +83,7 @@ pinctrl-1 = <&spi131_sleep>; pinctrl-names = "default", "sleep"; overrun-character = <0x00>; + zephyr,pm-device-runtime-auto; cs-gpios = <&gpio0 4 GPIO_ACTIVE_LOW>, <&gpio1 2 GPIO_ACTIVE_LOW>; diff --git a/cmake/dfu_multi_image.cmake b/cmake/dfu_multi_image.cmake index 65985156430f..ddb313ad7276 100644 --- a/cmake/dfu_multi_image.cmake +++ b/cmake/dfu_multi_image.cmake @@ -37,14 +37,18 @@ function(dfu_multi_image_package TARGET_NAME) string(REPLACE ";" "\n" SCRIPT_ARGS "${SCRIPT_ARGS}") file(GENERATE OUTPUT ${ARG_OUTPUT}.args CONTENT ${SCRIPT_ARGS}) - add_custom_target(${TARGET_NAME} ALL + add_custom_command( COMMAND ${Python3_EXECUTABLE} ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/dfu_multi_image_tool.py @${ARG_OUTPUT}.args - BYPRODUCTS + OUTPUT ${ARG_OUTPUT} DEPENDS ${ARG_DEPENDS} ) + add_custom_target(${TARGET_NAME} ALL + DEPENDS + ${ARG_OUTPUT} + ) endfunction() diff --git a/cmake/extensions.cmake b/cmake/extensions.cmake index 3fb35d0f7dac..a0afdd351ad7 100644 --- a/cmake/extensions.cmake +++ b/cmake/extensions.cmake @@ -80,39 +80,7 @@ function(get_board_without_ns_suffix board_in board_out) endif() endfunction() -# Add an overlay file to a child image. -# This can be used by a parent image to set overlay of Kconfig configuration or devicetree -# in its child images. This function must be called before 'add_child_image(image)' -# to have effect. -# -# Parameters: -# 'image' - child image name -# 'overlay_file' - overlay to be added to child image -# 'overlay_type' - 'OVERLAY_CONFIG' or 'DTC_OVERLAY_FILE' -function(add_overlay image overlay_file overlay_type) - set(old_overlays ${${image}_${overlay_type}}) - string(FIND "${old_overlays}" "${overlay_file}" found) - if (${found} EQUAL -1) - set(${image}_${overlay_type} "${old_overlays};${overlay_file}" CACHE STRING - "Extra config fragments for ${image} child image" FORCE - ) - endif() -endfunction() - -# Convenience macro to add configuration overlays to child image. -macro(add_overlay_config image overlay_file) - add_overlay(${image} ${overlay_file} EXTRA_CONF_FILE) -endmacro() - -# Convenience macro to add device tree overlays to child image. -macro(add_overlay_dts image overlay_file) - add_overlay(${image} ${overlay_file} EXTRA_DTC_OVERLAY_FILE) -endmacro() - # Add a partition manager configuration file to the build. -# Note that is only one image is included in the build, -# you must set CONFIG_PM_SINGLE_IMAGE=y for the partition manager -# configuration to take effect. function(ncs_add_partition_manager_config config_file) get_filename_component(pm_path ${config_file} REALPATH) get_filename_component(pm_filename ${config_file} NAME) @@ -353,59 +321,13 @@ function(set_shared) set(multi_args "PROPERTY") cmake_parse_arguments(SHARE "${flags}" "${single_args}" "${multi_args}" ${ARGN}) - if(SYSBUILD) - # Sysbuild can read the cache directly, no reason for an extra share file. - list(POP_FRONT SHARE_PROPERTY listname) - if(SHARE_APPEND) - list(APPEND ${listname} ${SHARE_PROPERTY}) - list(REMOVE_DUPLICATES ${listname}) - set(SHARE_PROPERTY ${${listname}}) - endif() - set(${listname} "${SHARE_PROPERTY}" CACHE INTERNAL "shared var") - return() - endif() - - check_arguments_required("set_shared" SHARE IMAGE FILE) - - check_arguments_exclusive("set_shared" SHARE FILE IMAGE PROPERTY APPEND) - check_arguments_exclusive("set_shared" SHARE IMAGE FILE) - - - set(prop_target ${IMAGE_NAME}_shared_property_target) - if(NOT TARGET ${prop_target}) - add_custom_target(${prop_target}) - endif() - - if(DEFINED SHARE_IMAGE) - # When using IMAGE, then PROPERTY is also required. - check_arguments_required("set_shared" SHARE PROPERTY) - - set(share_prop_target ${SHARE_IMAGE}_shared_property_target) - - if(SHARE_APPEND) - set(SHARE_APPEND APPEND) - else() - set(SHARE_APPEND) - endif() - - get_property(string_targets TARGET ${prop_target} PROPERTY image_targets) - if(NOT "add_custom_target(${share_prop_target})" IN_LIST string_targets) - set_property( - TARGET ${prop_target} APPEND PROPERTY - image_targets "add_custom_target(${share_prop_target})" - ) - endif() - - set_property(TARGET ${prop_target} APPEND_STRING PROPERTY shared_vars - "set_property(TARGET ${share_prop_target} ${SHARE_APPEND} PROPERTY ${SHARE_PROPERTY})\n" - ) - endif() - - if(DEFINED SHARE_FILE) - set_property(TARGET ${prop_target} APPEND_STRING PROPERTY shared_vars - "include(${SHARE_FILE})\n" - ) + list(POP_FRONT SHARE_PROPERTY listname) + if(SHARE_APPEND) + list(APPEND ${listname} ${SHARE_PROPERTY}) + list(REMOVE_DUPLICATES ${listname}) + set(SHARE_PROPERTY ${${listname}}) endif() + set(${listname} "${SHARE_PROPERTY}" CACHE INTERNAL "shared var") endfunction() # generate_shared(IMAGE FILE ) diff --git a/cmake/fw_zip.cmake b/cmake/fw_zip.cmake index 0a01f716d7a2..d50680445f18 100644 --- a/cmake/fw_zip.cmake +++ b/cmake/fw_zip.cmake @@ -18,7 +18,7 @@ function(generate_dfu_zip) message(FATAL_ERROR "Missing required param") endif() - if(SYSBUILD AND GENZIP_IMAGE) + if(GENZIP_IMAGE) set(APPNAME ${GENZIP_IMAGE}) sysbuild_get(CONFIG_BUILD_OUTPUT_META IMAGE ${GENZIP_IMAGE} VAR CONFIG_BUILD_OUTPUT_META KCONFIG) sysbuild_get(CONFIG_BOARD IMAGE ${GENZIP_IMAGE} VAR CONFIG_BOARD KCONFIG) diff --git a/cmake/mesh_dfu_metadata.cmake b/cmake/mesh_dfu_metadata.cmake index e52e34cc5b25..98fca26a3314 100644 --- a/cmake/mesh_dfu_metadata.cmake +++ b/cmake/mesh_dfu_metadata.cmake @@ -7,12 +7,7 @@ find_package(Python3 REQUIRED) function(mesh_dfu_metadata) - if(SYSBUILD) - set(metadata_dir ${CMAKE_BINARY_DIR}/${DEFAULT_IMAGE}/zephyr) - else() - set(metadata_dir ${PROJECT_BINARY_DIR}) - endif() - + set(metadata_dir ${CMAKE_BINARY_DIR}/${DEFAULT_IMAGE}/zephyr) set(metadata_depends ${CMAKE_BINARY_DIR}/dfu_application.zip) add_custom_command( @@ -42,6 +37,4 @@ function(mesh_dfu_metadata) ) endfunction() -if(SYSBUILD) - mesh_dfu_metadata() -endif() +mesh_dfu_metadata() diff --git a/cmake/multi_image.cmake b/cmake/multi_image.cmake deleted file mode 100644 index 8eafc3349b49..000000000000 --- a/cmake/multi_image.cmake +++ /dev/null @@ -1,574 +0,0 @@ -# -# Copyright (c) 2019 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if(SYSBUILD) - # Sysbuild and child-image are mutual exclusive, so if sysbuild is used disable child-image - function(add_child_image) - set(CONFIG_USE_PARTITION_MANAGER n CACHE INTERNAL "") - # ignore, sysbuild is in use. - endfunction() - return() -endif() - -if(IMAGE_NAME) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY KERNEL_HEX_NAME ${KERNEL_HEX_NAME}) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY ZEPHYR_BINARY_DIR ${ZEPHYR_BINARY_DIR}) - # Share the elf file, in order to support symbol loading for debuggers. - set_shared(IMAGE ${IMAGE_NAME} PROPERTY KERNEL_ELF_NAME ${KERNEL_ELF_NAME}) - set_shared(IMAGE ${IMAGE_NAME} - PROPERTY BUILD_BYPRODUCTS - ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} - ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} - ) - # Share the signing key file so that the parent image can use it to - # generate signed update candidates. - if(CONFIG_BOOT_SIGNATURE_KEY_FILE) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY SIGNATURE_KEY_FILE ${CONFIG_BOOT_SIGNATURE_KEY_FILE}) - endif() - - generate_shared(IMAGE ${IMAGE_NAME} FILE ${CMAKE_BINARY_DIR}/shared_vars.cmake) -else() - # Store a preload file with whatever configurations are required to create - # a variant build of this image (that is, 'app'). Copy relevant information - # from the 'app' image CMakeCache in order to build an identical variant image. - # In general, what we need to copy is the arguments passed by the user - # through command line arguments. These can typically be identified by - # inspecting their help text. However, some variables have special - # handling, resulting in a different help text. These cannot be found - # using the same mechanisms as the regular variables, and needs special - # handling. - - # Add a custom target similar to that created when adding a child image - # to facilitate the process of creating a variant image of the app image. - add_custom_target(app_subimage) - - set(base_image_preload_file ${CMAKE_BINARY_DIR}/image_preload.cmake) - - file( - WRITE - ${base_image_preload_file} - "# Generated file that can be used to preload variant images\n" - ) - - get_cmake_property(variables_cached CACHE_VARIABLES) - foreach(var_name ${variables_cached}) - # If '-DCONF_FILE' is specified, it is unset by boilerplate.cmake and - # replaced with 'CACHED_CONF_FILE' in the cache. Therefore we need this - # special handling for passing the value to the variant image. - if("${var_name}" MATCHES "CACHED_CONF_FILE") - list(APPEND application_vars ${var_name}) - endif() - - # If 'CACHED_CONF_FILE' is specified instead of 'CONF_FILE', the build system does not determine - # build type automatically. In that case, the 'CONF_FILE_BUILD_TYPE' shall be passed explicitly. - if("${var_name}" MATCHES "CONF_FILE_BUILD_TYPE") - list(APPEND application_vars ${var_name}) - endif() - - # '-DDTC_OVERLAY_FILE' is given helptext by the build system. Therefore - # we need this special handling for passing the value to the variant image. - if("${var_name}" MATCHES "DTC_OVERLAY_FILE") - list(APPEND application_vars ${var_name}) - endif() - - # All CONFIG_.* and CLI_CONFIG_* variables are given helptext by the build - # system. Therefore we need this special handling for passing the value to - # the variant image. - if("${var_name}" MATCHES "^CONFIG_.*" OR - "${var_name}" MATCHES "^CLI_CONFIG_.*" - ) - list(APPEND application_vars ${var_name}) - endif() - - # Command line arguments can generally be identified in the CMakeCache - # because they have the same help text generated by CMake. The text: - # - "No help, variable specified on the command line." - # - "Selected " command line variables updated by Zephyr. - get_property(var_help CACHE ${var_name} PROPERTY HELPSTRING) - string(TOLOWER ${var_name} var_name_lower) - if("${var_help}" STREQUAL "No help, variable specified on the command line." OR - "${var_help}" STREQUAL "Selected ${var_name_lower}") - list(APPEND application_vars ${var_name}) - endif() - endforeach() - - foreach(app_var_name ${application_vars}) - string(REPLACE "\"" "\\\"" app_var_value "$CACHE{${app_var_name}}") - file( - APPEND - ${base_image_preload_file} - "set(${app_var_name} \"${app_var_value}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endforeach() - - set_property( - TARGET app_subimage - PROPERTY preload_file - ${base_image_preload_file} - ) - - set_property( - TARGET app_subimage - PROPERTY source_dir - ${APPLICATION_SOURCE_DIR} - ) - - set_property( - TARGET app_subimage - PROPERTY binary_dir - ${CMAKE_BINARY_DIR} - ) -endif(IMAGE_NAME) - -function(add_child_image) - # Adds a child image to the build. - # - # Required arguments are: - # NAME - The name of the child image - # SOURCE_DIR - The source dir of the child image, not required if - # PRELOAD_IMAGE is set. - # - # Optional arguments are: - # DOMAIN - The domain to place the child image in. - # PRELOAD_IMAGE - Use preload file from this image instead of using standard - # mechanisms for locating child image configurations. - # Set this to "app" to use the preload file from the "root" - # image (that is, the only non-child-image in the build). - # - # Depending on the value of CONFIG_${NAME}_BUILD_STRATEGY the child image - # is either built from source, included as a hex file, or ignored. - # - # See chapter "Multi-image builds" in the documentation for more details. - - # Don't add child images when building variant images. - if (CONFIG_NCS_IS_VARIANT_IMAGE) - return() - endif() - - set(oneValueArgs NAME SOURCE_DIR DOMAIN PRELOAD_IMAGE) - cmake_parse_arguments(ACI "" "${oneValueArgs}" "" ${ARGN}) - - if (NOT ACI_NAME OR NOT (ACI_SOURCE_DIR OR ACI_PRELOAD_IMAGE)) - message(FATAL_ERROR "Missing parameter, required: NAME and (SOURCE_DIR or PRELOAD_IMAGE)") - endif() - - if (NOT CONFIG_PARTITION_MANAGER_ENABLED) - message(FATAL_ERROR - "CONFIG_PARTITION_MANAGER_ENABLED was not set for image ${ACI_NAME}." - "This option must be set for an image to support being added as a child" - "image through 'add_child_image'. This is typically done by invoking the" - " `build_strategy` kconfig template for the child image.") - endif() - - string(TOUPPER ${ACI_NAME} UPNAME) - - if (CONFIG_${UPNAME}_BUILD_STRATEGY_USE_HEX_FILE) - assert_exists(CONFIG_${UPNAME}_HEX_FILE) - message("Using ${CONFIG_${UPNAME}_HEX_FILE} instead of building ${ACI_NAME}") - - # Set property so that the hex file is merged in by partition manager. - set_property(GLOBAL PROPERTY ${ACI_NAME}_PM_HEX_FILE ${CONFIG_${UPNAME}_HEX_FILE}) - elseif (CONFIG_${UPNAME}_BUILD_STRATEGY_SKIP_BUILD) - message("Skipping building of ${ACI_NAME}") - else() - # Build normally - add_child_image_from_source(${ARGN}) - endif() -endfunction() - -function(add_child_image_from_source) - # See 'add_child_image' - set(oneValueArgs NAME SOURCE_DIR DOMAIN BOARD PRELOAD_IMAGE) - cmake_parse_arguments(ACI "" "${oneValueArgs}" "" ${ARGN}) - - if (NOT ACI_NAME OR NOT (ACI_SOURCE_DIR OR ACI_PRELOAD_IMAGE)) - message(FATAL_ERROR "Missing parameter, required: NAME and (SOURCE_DIR or PRELOAD_IMAGE)") - endif() - - # Pass information that the partition manager is enabled to Kconfig. - add_overlay_config( - ${ACI_NAME} - ${ZEPHYR_NRF_MODULE_DIR}/subsys/partition_manager/partition_manager_enabled.conf - ) - - if (${ACI_NAME}_BOARD) - message(FATAL_ERROR - "${ACI_NAME}_BOARD set in outer scope. Will be ignored, use " - "`add_child_image(BOARD ${${ACI_NAME}_BOARD} ...)` for adding a child " - "image for specific board") - endif() - - # Add the new partition manager domain if needed. - # The domain corresponds to the BOARD without the 'ns' suffix. - if (ACI_DOMAIN) - if ("${ACI_BOARD}" STREQUAL "") - message(FATAL_ERROR - "No board specified for domain '${ACI_DOMAIN}'. This configuration is " - "typically defined in ${BOARD_DIR}/Kconfig") - endif() - - set(domain_parent ${${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION}) - if(DEFINED ${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION - AND NOT "${domain_parent}" STREQUAL "${ACI_NAME}" - ) - # A domain may only have one child image, which can then act as a parent - # to other images in the domain. - # As it is a cache variable we check it's content so that CMake re-run - # will pass the check as long as the child image hasn't changed. - message(FATAL_ERROR "A domain may only have a single child image." - "Current domain image is: ${domain_parent}, `${domain_parent}` is a " - "domain parent image, so you may add `${ACI_NAME}` as a child inside " - "`${domain_parent}`" - ) - endif() - # This needs to be made globally available as it is used in other files. - set(${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION ${ACI_NAME} CACHE INTERNAL "") - - if (NOT (${ACI_DOMAIN} IN_LIST PM_DOMAINS)) - list(APPEND PM_DOMAINS ${ACI_DOMAIN}) - set_property(GLOBAL APPEND PROPERTY PM_DOMAINS ${ACI_DOMAIN}) - endif() - elseif (NOT ACI_BOARD) - # No BOARD is given as argument, this triggers automatic conversion of - # *.ns board from parent image. - get_board_without_ns_suffix(${BOARD}${BOARD_QUALIFIERS} ACI_BOARD) - endif() - - if (NOT ACI_DOMAIN AND DOMAIN) - # If no domain is specified, a child image will inherit the domain of - # its parent. - set(ACI_DOMAIN ${DOMAIN}) - set(inherited " (inherited)") - endif() - - set(${ACI_NAME}_DOMAIN ${ACI_DOMAIN}) - set(${ACI_NAME}_BOARD ${ACI_BOARD}) - - message("\n=== child image ${ACI_NAME} - ${ACI_DOMAIN}${inherited} begin ===") - - if (CONFIG_BOOTLOADER_MCUBOOT) - list(APPEND extra_cmake_args "-DCONFIG_NCS_MCUBOOT_IN_BUILD=y") - endif() - - if (ACI_PRELOAD_IMAGE) - get_property( - preload_file - TARGET ${ACI_PRELOAD_IMAGE}_subimage - PROPERTY preload_file - ) - - get_property( - source_dir - TARGET ${ACI_PRELOAD_IMAGE}_subimage - PROPERTY source_dir - ) - - get_property( - binary_dir - TARGET ${ACI_PRELOAD_IMAGE}_subimage - PROPERTY binary_dir - ) - - list(APPEND extra_cmake_args "-DCONFIG_NCS_IS_VARIANT_IMAGE=y") - list(APPEND extra_cmake_args "-DPRELOAD_BINARY_DIR=${binary_dir}") - else() - set(source_dir ${ACI_SOURCE_DIR}) - - # It is possible for a sample to use a custom set of Kconfig fragments for a - # child image, or to append additional Kconfig fragments to the child image. - # Note that in this context is the name of the child image as - # passed to the 'add_child_image' function. - # - # DIRECTORY - # | - prj.conf (A) - # | - prj_.conf (B) - # | - boards DIRECTORY - # | | - .conf (C) - # | | - _.conf (D) - - - # DIRECTORY - # | - prj.conf - # | - prj_.conf - # | - child_image DIRECTORY - # |-- .conf (I) Fragment, used together with (A) and (C) - # |-- _.conf (J) Fragment, used together with (B) and (D) - # |-- .overlay If present, will be merged with BOARD.dts - # |-- DIRECTORY - # |-- boards DIRECTORY - # | |-- .conf (E) If present, use instead of (C), requires (G). - # | |-- _.conf (F) If present, use instead of (D), requires (H). - # | |-- .overlay If present, will be merged with BOARD.dts - # | |-- _.overlay If present, will be merged with BOARD.dts - # |-- prj.conf (G) If present, use instead of (A) - # | Note that (C) is ignored if this is present. - # | Use (E) instead. - # |-- prj_.conf (H) If present, used instead of (B) when user - # | specify `-DCONF_FILE=prj_.conf for - # | parent image. Note that any (C) is ignored - # | if this is present. Use (F) instead. - # |-- .overlay If present, will be merged with BOARD.dts - # |-- _.overlay If present, will be merged with BOARD.dts - # - # Note: The folder `child_image/` is only need when configurations - # files must be used instead of the child image default configs. - # The append a child image default config, place the additional settings - # in `child_image/.conf`. - zephyr_get(COMMON_CHILD_IMAGE_CONFIG_DIR) - string(CONFIGURE "${COMMON_CHILD_IMAGE_CONFIG_DIR}" COMMON_CHILD_IMAGE_CONFIG_DIR) - foreach(config_dir ${APPLICATION_CONFIG_DIR} ${COMMON_CHILD_IMAGE_CONFIG_DIR} ) - set(ACI_CONF_DIR ${config_dir}/child_image) - set(ACI_NAME_CONF_DIR ${config_dir}/child_image/${ACI_NAME}) - if (NOT ${ACI_NAME}_CONF_FILE) - if(DEFINED CONF_FILE_BUILD_TYPE AND DEFINED ${ACI_NAME}_FILE_SUFFIX) - message(WARNING "Cannot use BUILD_TYPE='${CONF_FILE_BUILD_TYPE}' together with ${ACI_NAME}_FILE_SUFFIX='${${ACI_NAME}_FILE_SUFFIX}'. " - "Ignoring BUILD_TYPE='${CONF_FILE_BUILD_TYPE}'" - ) - else() - set(LEGACY_BUILD_ARGUMENT BUILD ${CONF_FILE_BUILD_TYPE}) - endif() - ncs_file(CONF_FILES ${ACI_NAME_CONF_DIR} - BOARD ${ACI_BOARD} - # Child image always uses the same revision as parent board. - BOARD_REVISION ${BOARD_REVISION} - KCONF ${ACI_NAME}_CONF_FILE - DTS ${ACI_NAME}_DTC_OVERLAY_FILE - ${LEGACY_BUILD_ARGUMENT} - SUFFIX ${${ACI_NAME}_FILE_SUFFIX} - ) - # Place the result in the CMake cache and remove local scoped variable. - foreach(file CONF_FILE DTC_OVERLAY_FILE) - if(DEFINED ${ACI_NAME}_${file}) - set(${ACI_NAME}_${file} ${${ACI_NAME}_${file}} CACHE STRING - "Default ${ACI_NAME} configuration file" FORCE - ) - set(${ACI_NAME}_${file}) - endif() - endforeach() - - # Check for configuration fragment. The contents of these are appended - # to the project configuration, as opposed to the CONF_FILE which is used - # as the base configuration. - if(DEFINED ${ACI_NAME}_FILE_SUFFIX) - # Child/parent image does not support a prefix for the main application, therefore only - # use child image configuration with suffixes if specifically commanded with an argument - # targeting this child image - set(child_image_conf_fragment ${ACI_CONF_DIR}/${ACI_NAME}.conf) - zephyr_file_suffix(child_image_conf_fragment SUFFIX ${${ACI_NAME}_FILE_SUFFIX}) - elseif(NOT "${CONF_FILE_BUILD_TYPE}" STREQUAL "") - set(child_image_conf_fragment ${ACI_CONF_DIR}/${ACI_NAME}_${CONF_FILE_BUILD_TYPE}.conf) - else() - set(child_image_conf_fragment ${ACI_CONF_DIR}/${ACI_NAME}.conf) - endif() - if (EXISTS ${child_image_conf_fragment}) - add_overlay_config(${ACI_NAME} ${child_image_conf_fragment}) - endif() - - # Check for overlay named .overlay. - set(child_image_dts_overlay ${ACI_CONF_DIR}/${ACI_NAME}.overlay) - zephyr_file_suffix(child_image_dts_overlay SUFFIX ${${ACI_NAME}_FILE_SUFFIX}) - if (EXISTS ${child_image_dts_overlay}) - add_overlay_dts(${ACI_NAME} ${child_image_dts_overlay}) - endif() - - if(${ACI_NAME}_CONF_FILE OR ${ACI_NAME}_DTC_OVERLAY_FILE - OR EXISTS ${child_image_conf_fragment} OR EXISTS ${child_image_dts_overlay}) - # If anything is picked up directly from APPLICATION_CONFIG_DIR, then look no further. - break() - endif() - endif() - endforeach() - # Construct a list of variables that, when present in the root - # image, should be passed on to all child images as well. - list(APPEND - SHARED_MULTI_IMAGE_VARIABLES - CMAKE_BUILD_TYPE - CMAKE_VERBOSE_MAKEFILE - BOARD_DIR - BOARD_REVISION - ZEPHYR_MODULES - ZEPHYR_EXTRA_MODULES - ZEPHYR_TOOLCHAIN_VARIANT - CROSS_COMPILE - GNUARMEMB_TOOLCHAIN_PATH - EXTRA_KCONFIG_TARGETS - NCS_TOOLCHAIN_VERSION - PM_DOMAINS - ${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION - WEST_PYTHON - ) - - # Construct a list of cache variables that, when present in the root - # image, should be passed on to all child images as well. - list(APPEND - SHARED_CACHED_MULTI_IMAGE_VARIABLES - ARCH_ROOT - BOARD_ROOT - SOC_ROOT - MODULE_EXT_ROOT - SCA_ROOT - ) - - foreach(kconfig_target ${EXTRA_KCONFIG_TARGETS}) - list(APPEND - SHARED_MULTI_IMAGE_VARIABLES - EXTRA_KCONFIG_TARGET_COMMAND_FOR_${kconfig_target} - ) - endforeach() - - set(preload_file ${CMAKE_BINARY_DIR}/${ACI_NAME}/child_image_preload.cmake) - file(WRITE ${preload_file} "# Generated file used for preloading a child image\n") - - unset(image_cmake_args) - list(REMOVE_DUPLICATES SHARED_MULTI_IMAGE_VARIABLES) - foreach(shared_var ${SHARED_MULTI_IMAGE_VARIABLES}) - if(DEFINED ${shared_var}) - file( - APPEND - ${preload_file} - "set(${shared_var} \"${${shared_var}}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endif() - endforeach() - - list(REMOVE_DUPLICATES SHARED_CACHED_MULTI_IMAGE_VARIABLES) - foreach(shared_var ${SHARED_CACHED_MULTI_IMAGE_VARIABLES}) - if(DEFINED CACHE{${shared_var}} AND NOT DEFINED ${ACI_NAME}_${shared_var}) - file( - APPEND - ${preload_file} - "set(${shared_var} \"$CACHE{${shared_var}}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endif() - endforeach() - - # Add FILE_SUFFIX to the preload file if it is set with the specific name of this image - file(APPEND - ${preload_file} - "set(FILE_SUFFIX \"${${ACI_NAME}_FILE_SUFFIX}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - - get_cmake_property(VARIABLES VARIABLES) - get_cmake_property(VARIABLES_CACHED CACHE_VARIABLES) - - set(regex "^${ACI_NAME}_.+") - - list(FILTER VARIABLES INCLUDE REGEX ${regex}) - list(FILTER VARIABLES_CACHED INCLUDE REGEX ${regex}) - - set(VARIABLES_ALL ${VARIABLES} ${VARIABLES_CACHED}) - list(REMOVE_DUPLICATES VARIABLES_ALL) - foreach(var_name ${VARIABLES_ALL}) - string(REPLACE "\"" "\\\"" ${var_name} "${${var_name}}") - # This regex is guaranteed to match due to the filtering done - # above, we only re-run the regex to extract the part after - # '_'. We run the regex twice because it is believed that - # list(FILTER is faster than doing a string(REGEX on each item. - string(REGEX MATCH "^${ACI_NAME}_(.+)" unused_out_var ${var_name}) - file( - APPEND - ${preload_file} - "set(${CMAKE_MATCH_1} \"${${var_name}}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endforeach() - endif() - - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${ACI_NAME}) - execute_process( - COMMAND ${CMAKE_COMMAND} - -G${CMAKE_GENERATOR} - ${EXTRA_MULTI_IMAGE_CMAKE_ARGS} # E.g. --trace-expand - -DIMAGE_NAME=${ACI_NAME} - -C ${preload_file} - ${extra_cmake_args} - ${source_dir} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${ACI_NAME} - RESULT_VARIABLE ret - ) - - if (IMAGE_NAME) - # Expose your childrens secrets to your parent - set_shared(FILE ${CMAKE_BINARY_DIR}/${ACI_NAME}/shared_vars.cmake) - endif() - - set_property(DIRECTORY APPEND PROPERTY - CMAKE_CONFIGURE_DEPENDS - ${CMAKE_BINARY_DIR}/${ACI_NAME}/zephyr/.config - ) - - if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "CMake generation for ${ACI_NAME} failed, aborting. Command: ${ret}") - endif() - - message("=== child image ${ACI_NAME} - ${ACI_DOMAIN}${inherited} end ===\n") - - # Include some variables from the child image into the parent image - # namespace - include(${CMAKE_BINARY_DIR}/${ACI_NAME}/shared_vars.cmake) - - if(MULTI_IMAGE_DEBUG_MAKEFILE AND "${CMAKE_GENERATOR}" STREQUAL "Ninja") - set(multi_image_build_args "-d" "${MULTI_IMAGE_DEBUG_MAKEFILE}") - endif() - if(MULTI_IMAGE_DEBUG_MAKEFILE AND "${CMAKE_GENERATOR}" STREQUAL "Unix Makefiles") - set(multi_image_build_args "--debug=${MULTI_IMAGE_DEBUG_MAKEFILE}") - endif() - - get_shared(${ACI_NAME}_byproducts IMAGE ${ACI_NAME} PROPERTY BUILD_BYPRODUCTS) - - include(ExternalProject) - ExternalProject_Add(${ACI_NAME}_subimage - SOURCE_DIR ${source_dir} - BINARY_DIR ${CMAKE_BINARY_DIR}/${ACI_NAME} - BUILD_BYPRODUCTS ${${ACI_NAME}_byproducts} - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMAKE_COMMAND} --build . -- ${multi_image_build_args} - INSTALL_COMMAND "" - BUILD_ALWAYS True - USES_TERMINAL_BUILD True - ) - - set_property( - TARGET ${ACI_NAME}_subimage - PROPERTY preload_file - ${preload_file} - ) - - set_property( - TARGET ${ACI_NAME}_subimage - PROPERTY source_dir - ${source_dir} - ) - - set_property( - TARGET ${ACI_NAME}_subimage - PROPERTY binary_dir - ${CMAKE_BINARY_DIR}/${ACI_NAME} - ) - - if (NOT ACI_PRELOAD_IMAGE) - foreach(kconfig_target - menuconfig - guiconfig - ${EXTRA_KCONFIG_TARGETS} - ) - - add_custom_target(${ACI_NAME}_${kconfig_target} - ${CMAKE_MAKE_PROGRAM} ${kconfig_target} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${ACI_NAME} - USES_TERMINAL - ) - endforeach() - endif() - - if (NOT "${ACI_NAME}" STREQUAL "${${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION}") - set_property( - GLOBAL APPEND PROPERTY - PM_IMAGES - "${ACI_NAME}" - ) - endif() - -endfunction() diff --git a/cmake/partition_manager.cmake b/cmake/partition_manager.cmake index 30f1fe006e46..2881b0adf362 100644 --- a/cmake/partition_manager.cmake +++ b/cmake/partition_manager.cmake @@ -26,21 +26,7 @@ endmacro() # Load static configuration if found. # Try user defined file first, then file found in configuration directory, # finally file from board directory. -if(SYSBUILD) - zephyr_get(PM_STATIC_YML_FILE SYSBUILD GLOBAL) -elseif(CONFIG_PARTITION_MANAGER_ENABLED) - message(DEPRECATION " - --------------------------------------------------------------------- - --- WARNING: Child and parent image functionality is deprecated --- - --- and should be replaced with sysbuild. Child and parent image --- - --- support remains only to allow existing customer applications --- - --- to build and allow porting to sysbuild, it is no longer --- - --- receiving updates or new features and it will not be possible --- - --- to build using child/parent image at all in nRF Connect SDK --- - --- version 2.9 onwards. --- - ---------------------------------------------------------------------" - ) -endif() +zephyr_get(PM_STATIC_YML_FILE SYSBUILD GLOBAL) if(DEFINED PM_STATIC_YML_FILE) string(CONFIGURE "${PM_STATIC_YML_FILE}" user_def_pm_static) @@ -80,40 +66,6 @@ elseif (EXISTS ${board_dir_pm_static_common}) set(static_configuration_file ${board_dir_pm_static_common}) endif() -if (EXISTS "${static_configuration_file}" AND NOT SYSBUILD) - message(STATUS "Found partition manager static configuration: " - "${static_configuration_file}" - ) - set(static_configuration --static-config ${static_configuration_file}) -endif() - -if (NOT static_configuration AND CONFIG_PM_IMAGE_NOT_BUILT_FROM_SOURCE) - message(WARNING - "One or more child image is not configured to be built from source. \ - However, there is no static configuration provided to the \ - partition manager. Please provide a static configuration as described in \ - the 'Scripts -> Partition Manager -> Static configuration' chapter in the \ - documentation. Without this information, the build system is not able to \ - place the image correctly in flash.") -endif() - -if (NOT static_configuration AND - (CONFIG_BOOTLOADER_MCUBOOT OR CONFIG_SECURE_BOOT) AND NOT SYSBUILD) - message(WARNING " - --------------------------------------------------------------------- - --- WARNING: Using a bootloader without pm_static.yml. --- - --- There are cases where a deployed product can consist of --- - --- multiple images, and only a subset of these images can be --- - --- upgraded through a firmware update mechanism. In such cases, --- - --- the upgradable images must have partitions that are static --- - --- and are matching the partition map used by the bootloader --- - --- programmed onto the device. --- - --------------------------------------------------------------------- - \n" - ) -endif() - - # Check if current image is the dynamic partition in its domain. # I.E. it is the only partition without a statically configured size in this # domain. This is equivalent to the 'app' partition in the root domain. @@ -129,672 +81,3 @@ endif() get_property(PM_IMAGES GLOBAL PROPERTY PM_IMAGES) get_property(PM_SUBSYS_PREPROCESSED GLOBAL PROPERTY PM_SUBSYS_PREPROCESSED) get_property(PM_DOMAINS GLOBAL PROPERTY PM_DOMAINS) - -# This file is executed once per domain. -# -# It will be executed if one of the following criteria is true for the -# current image: -# - It's a child image, and is the dynamic partition in the domain -# - It's the root image, and a static configuration has been provided -# - It's the root image, and PM_IMAGES is populated. -# - It's the root image, and other domains exist. -# - A subsys has defined a partition and CONFIG_PM_SINGLE_IMAGE is set. -# Otherwise, return here -if (NOT ( - (IMAGE_NAME AND is_dynamic_partition_in_domain) OR - (NOT IMAGE_NAME AND static_configuration) OR - (NOT IMAGE_NAME AND PM_IMAGES) OR - (NOT IMAGE_NAME AND PM_DOMAINS) OR - (PM_SUBSYS_PREPROCESSED AND CONFIG_PM_SINGLE_IMAGE) - ) - OR SYSBUILD - ) - return() -endif() - -# Set the dynamic partition. This is the only partition which does not -# have a statically defined size. There is only one dynamic partition per -# domain. For the "root domain" (ie the domain of the root image) this is -# always "app". -if (NOT is_dynamic_partition_in_domain) - set(dynamic_partition "app") -else() - set(dynamic_partition ${${DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION}) - set( - dynamic_partition_argument - "--flash_primary-dynamic-partition;${dynamic_partition}" - ) -endif() - -# Check if the dynamic partition image hex has already been defined -get_property(DYNAMIC_PARTITION_HEX GLOBAL PROPERTY - ${dynamic_partition}_PM_HEX_FILE - ) -if (NOT DYNAMIC_PARTITION_HEX) - # Add the dynamic partition as an image partition. - set_property(GLOBAL PROPERTY - ${dynamic_partition}_PM_HEX_FILE - ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} - ) -endif() - -get_property(DYNAMIC_PARTITION_TARGET GLOBAL PROPERTY - ${dynamic_partition}_PM_TARGET - ) -if (NOT DYNAMIC_PARTITION_TARGET) - set_property(GLOBAL PROPERTY - ${dynamic_partition}_PM_TARGET - ${logical_target_for_zephyr_elf} - ) -endif() - -# Prepare the input_files, header_files, and images lists -set(generated_path include/generated) -foreach (image ${PM_IMAGES}) - list(APPEND prefixed_images ${DOMAIN}:${image}) - list(APPEND images ${image}) - - get_shared(${image}_input_files IMAGE ${image} PROPERTY PM_YML_FILES) - get_shared(${image}_binary_dir IMAGE ${image} PROPERTY ZEPHYR_BINARY_DIR) - - list(APPEND input_files ${${image}_input_files}) - list(APPEND header_files ${${image}_binary_dir}/${generated_path}/pm_config.h) - - # Re-configure (Re-execute all CMakeLists.txt code) when original - # (not preprocessed) configuration file changes. - get_shared(dependencies IMAGE ${image} PROPERTY PM_YML_DEP_FILES) - set_property( - DIRECTORY APPEND PROPERTY - CMAKE_CONFIGURE_DEPENDS - ${dependencies} - ) -endforeach() - -# Explicitly add the dynamic partition image -list(APPEND prefixed_images "${DOMAIN}:${dynamic_partition}") -list(APPEND images ${dynamic_partition}) -list(APPEND input_files ${ZEPHYR_BINARY_DIR}/${generated_path}/pm.yml) -list(APPEND header_files ${ZEPHYR_BINARY_DIR}/${generated_path}/pm_config.h) - -# Add subsys defined pm.yml to the input_files -list(APPEND input_files ${PM_SUBSYS_PREPROCESSED}) - -if (DEFINED CONFIG_SOC_SERIES_NRF91X) - # See nRF91 Product Specification, chapter "UICR" - set(otp_start_addr "0xff8108") - set(otp_size 756) # 189 * 4 -elseif (DEFINED CONFIG_SOC_NRF5340_CPUAPP) - # See nRF5340 Product Specification, chapter Application Core -> ... "UICR" - set(otp_start_addr "0xff8100") - set(otp_size 764) # 191 * 4 -endif() - -if (DEFINED CONFIG_SOC_SERIES_NRF54LX) - set(soc_nvs_controller rram_controller) - set(soc_nvs_controller_driver_kc CONFIG_SOC_FLASH_NRF_RRAM) -else() - set(soc_nvs_controller flash_controller) - set(soc_nvs_controller_driver_kc CONFIG_SOC_FLASH_NRF) -endif() - -add_region( - NAME sram_primary - SIZE ${CONFIG_PM_SRAM_SIZE} - BASE ${CONFIG_PM_SRAM_BASE} - PLACEMENT complex - DYNAMIC_PARTITION sram_primary - ) - -math(EXPR flash_size "${CONFIG_FLASH_SIZE} * 1024" OUTPUT_FORMAT HEXADECIMAL) - -if (CONFIG_SOC_SERIES_NRF91X OR CONFIG_SOC_NRF5340_CPUAPP) - add_region( - NAME otp - SIZE ${otp_size} - BASE ${otp_start_addr} - PLACEMENT start_to_end - ) -endif() -add_region( - NAME flash_primary - SIZE ${flash_size} - BASE ${CONFIG_FLASH_BASE_ADDRESS} - PLACEMENT complex - DEVICE ${soc_nvs_controller} - DEFAULT_DRIVER_KCONFIG ${soc_nvs_controller_driver_kc} - ) - -dt_chosen(ext_flash_dev PROPERTY nordic,pm-ext-flash) -if (DEFINED ext_flash_dev) - dt_prop(num_bits PATH ${ext_flash_dev} PROPERTY size) - math(EXPR num_bytes "${num_bits} / 8") - - set(external_flash_driver_kconfig CONFIG_PM_EXTERNAL_FLASH_HAS_DRIVER) - - add_region( - NAME external_flash - SIZE ${num_bytes} - BASE ${CONFIG_PM_EXTERNAL_FLASH_BASE} - PLACEMENT start_to_end - DEVICE "DT_CHOSEN(nordic_pm_ext_flash)" - DEFAULT_DRIVER_KCONFIG ${external_flash_driver_kconfig} - ) -endif() - -# If simultaneous updates of the network core and application core is supported -# we add a region which is used to emulate flash. In reality this data is being -# placed in RAM. This is used to bank the network core update in RAM while -# the application core update is banked in flash. This works since the nRF53 -# application core has 512kB of RAM and the network core only has 256kB of flash -get_shared( - mcuboot_NRF53_MULTI_IMAGE_UPDATE - IMAGE mcuboot - PROPERTY NRF53_MULTI_IMAGE_UPDATE - ) - -get_shared( - mcuboot_NRF53_RECOVERY_NETWORK_CORE - IMAGE mcuboot - PROPERTY NRF53_RECOVERY_NETWORK_CORE - ) - -if ((DEFINED mcuboot_NRF53_MULTI_IMAGE_UPDATE) OR (DEFINED mcuboot_NRF53_RECOVERY_NETWORK_CORE)) - # This region will contain the 'mcuboot_secondary' partition, and the banked - # updates for the network core will be stored here. - get_shared(ram_flash_label IMAGE mcuboot PROPERTY RAM_FLASH_LABEL) - get_shared(ram_flash_addr IMAGE mcuboot PROPERTY RAM_FLASH_ADDR) - get_shared(ram_flash_size IMAGE mcuboot PROPERTY RAM_FLASH_SIZE) - - add_region( - NAME ram_flash - SIZE ${ram_flash_size} - BASE ${ram_flash_addr} - PLACEMENT start_to_end - DEVICE ${ram_flash_label} - DEFAULT_DRIVER_KCONFIG CONFIG_FLASH_SIMULATOR - ) -endif() - -if (DOMAIN) - set(UNDERSCORE_DOMAIN _${DOMAIN}) -endif() - -set(pm_out_partition_file ${APPLICATION_BINARY_DIR}/partitions${UNDERSCORE_DOMAIN}.yml) -set(pm_out_region_file ${APPLICATION_BINARY_DIR}/regions${UNDERSCORE_DOMAIN}.yml) -set(pm_out_dotconf_file ${APPLICATION_BINARY_DIR}/pm${UNDERSCORE_DOMAIN}.config) - -set(pm_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager.py - --input-files ${input_files} - --regions ${regions} - --output-partitions ${pm_out_partition_file} - --output-regions ${pm_out_region_file} - ${dynamic_partition_argument} - ${static_configuration} - ${region_arguments} - ) - -set(pm_output_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager_output.py - --input-partitions ${pm_out_partition_file} - --input-regions ${pm_out_region_file} - --config-file ${pm_out_dotconf_file} - ) - -# Run the partition manager algorithm. -execute_process( - COMMAND - ${pm_cmd} - RESULT_VARIABLE ret - ) - -if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "Partition Manager failed, aborting. Command: ${pm_cmd}") -endif() - -# Produce header files and config file. -execute_process( - COMMAND - ${pm_output_cmd} - RESULT_VARIABLE ret - ) - -if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "Partition Manager output generation failed, aborting. Command: ${pm_output_cmd}") -endif() - -# Create a dummy target that we can add properties to for -# extraction in generator expressions. -add_custom_target(partition_manager) - -# Make Partition Manager configuration available in CMake -import_pm_config(${pm_out_dotconf_file} pm_var_names) - -foreach(name ${pm_var_names}) - set_property( - TARGET partition_manager - PROPERTY ${name} - ${${name}} - ) -endforeach() - -# Turn the space-separated list into a Cmake list. -string(REPLACE " " ";" PM_ALL_BY_SIZE ${PM_ALL_BY_SIZE}) - -# Iterate over every partition, from smallest to largest. -foreach(part ${PM_ALL_BY_SIZE}) - string(TOUPPER ${part} PART) - get_property(${part}_PM_HEX_FILE GLOBAL PROPERTY ${part}_PM_HEX_FILE) - get_property(${part}_PM_ELF_FILE GLOBAL PROPERTY ${part}_PM_ELF_FILE) - - # Process container partitions (if it has a SPAN list it is a container partition). - if(DEFINED PM_${PART}_SPAN) - string(REPLACE " " ";" PM_${PART}_SPAN ${PM_${PART}_SPAN}) - list(APPEND containers ${part}) - endif() - - # Include the partition in the merge operation if it has a hex file. - if(DEFINED ${part}_PM_HEX_FILE) - get_property(${part}_PM_TARGET GLOBAL PROPERTY ${part}_PM_TARGET) - list(APPEND explicitly_assigned ${part}) - else() - if(${part} IN_LIST images) - get_shared(${part}_bin_dir IMAGE ${part} PROPERTY ZEPHYR_BINARY_DIR) - get_shared(${part}_hex_file IMAGE ${part} PROPERTY KERNEL_HEX_NAME) - get_shared(${part}_elf_file IMAGE ${part} PROPERTY KERNEL_ELF_NAME) - set(${part}_PM_HEX_FILE ${${part}_bin_dir}/${${part}_hex_file}) - set(${part}_PM_ELF_FILE ${${part}_bin_dir}/${${part}_elf_file}) - set(${part}_PM_TARGET ${part}_subimage) - elseif(${part} IN_LIST containers) - set(${part}_PM_HEX_FILE ${PROJECT_BINARY_DIR}/${part}.hex) - set(${part}_PM_TARGET ${part}_hex) - endif() - list(APPEND implicitly_assigned ${part}) - endif() -endforeach() - -if (${is_dynamic_partition_in_domain}) - set(merged_suffix _${DOMAIN}) - string(TOUPPER ${merged_suffix} MERGED_SUFFIX) -endif() -set(merged merged${merged_suffix}) -set(MERGED MERGED${MERGED_SUFFIX}) - -set(PM_${MERGED}_SPAN ${implicitly_assigned} ${explicitly_assigned}) -set(${merged}_overlap TRUE) # Enable overlapping for the merged hex file. - -# Iterate over all container partitions, plus the "fake" merged paritition. -# The loop will create a hex file for each iteration. -foreach(container ${containers} ${merged}) - string(TOUPPER ${container} CONTAINER) - - # Prepare the list of hex files and list of dependencies for the merge command. - foreach(part ${PM_${CONTAINER}_SPAN}) - string(TOUPPER ${part} PART) - list(APPEND ${container}hex_files ${${part}_PM_HEX_FILE}) - list(APPEND ${container}elf_files ${${part}_PM_ELF_FILE}) - list(APPEND ${container}targets ${${part}_PM_TARGET}) - endforeach() - - # Do not merge hex files for empty partitions - if(NOT ${container}hex_files) - list(REMOVE_ITEM PM_${MERGED}_SPAN ${container}) - continue() - endif() - - # If overlapping is enabled, add the appropriate argument. - if(${${container}_overlap}) - set(${container}overlap_arg --overlap=replace) - endif() - - # Add command to merge files. - add_custom_command( - OUTPUT ${PROJECT_BINARY_DIR}/${container}.hex - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_BASE}/scripts/build/mergehex.py - -o ${PROJECT_BINARY_DIR}/${container}.hex - ${${container}overlap_arg} - ${${container}hex_files} - DEPENDS - ${${container}targets} - ${${container}hex_files} - # SES will load symbols from all elf files listed as dependencies to - # ${PROJECT_BINARY_DIR}/merged.hex. Therefore we add - # ${${container}elf_files} as dependency to ensure they are loaded by SES - # even though it is unnecessary for building the application. - ${${container}elf_files} - ) - - # Wrapper target for the merge command. - add_custom_target( - ${container}_hex - ALL DEPENDS - ${PROJECT_BINARY_DIR}/${container}.hex - ) - -endforeach() - -if (CONFIG_SECURE_BOOT AND CONFIG_BOOTLOADER_MCUBOOT) - # Create symbols for the offsets required for moving test update hex files - # to MCUBoots secondary slot. This is needed because objcopy does not - # support arithmetic expressions as argument (e.g. '0x100+0x200'), and all - # of the symbols used to generate the offset is only available as a - # generator expression when MCUBoots cmake code exectues. This because - # partition manager is performed as the last step in the configuration stage. - if(CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY AND CONFIG_HAS_HW_NRF_QSPI) - if(DEFINED ext_flash_dev) - get_filename_component(qspi_node ${ext_flash_dev} DIRECTORY) - else() - dt_nodelabel(qspi_node NODELABEL "qspi") - endif() - if(DEFINED qspi_node) - dt_reg_addr(xip_addr PATH ${qspi_node} NAME qspi_mm) - if(NOT DEFINED xip_addr) - message(WARNING "\ - Could not find memory mapped address for XIP. Generated update hex files will \ - not have the correct base address. Hence they can not be programmed directly \ - to the external flash") - endif() - endif() - else() - set(xip_addr 0) - endif() - - math(EXPR s0_offset "${xip_addr} + ${PM_MCUBOOT_SECONDARY_ADDRESS} - ${PM_S0_ADDRESS}") - math(EXPR s1_offset "${xip_addr} + ${PM_MCUBOOT_SECONDARY_ADDRESS} - ${PM_S1_ADDRESS}") - - set_property( - TARGET partition_manager - PROPERTY s0_TO_SECONDARY - ${s0_offset} - ) - set_property( - TARGET partition_manager - PROPERTY s1_TO_SECONDARY - ${s1_offset} - ) -endif() - -# Calculate absolute address for the wi-fi firmware patch location. -if (CONFIG_WIFI_NRF70 AND CONFIG_NRF_WIFI_PATCHES_EXT_FLASH_STORE) - if(DEFINED ext_flash_dev) - get_filename_component(qspi_node ${ext_flash_dev} DIRECTORY) - else() - dt_nodelabel(qspi_node NODELABEL "qspi") - endif() - if(DEFINED qspi_node) - dt_reg_addr(xip_addr PATH ${qspi_node} NAME qspi_mm) - if(NOT DEFINED xip_addr) - message(WARNING "\ - Could not find memory mapped address for XIP. Generated update hex files will \ - not have the correct base address. Hence they can not be programmed directly \ - to the external flash") - endif() - else() - set(xip_addr 0) - endif() - - math(EXPR wifi_fw_abs_addr "${xip_addr} + ${PM_NRF70_WIFI_FW_OFFSET}") - set_property( - TARGET partition_manager - PROPERTY nrf70_wifi_fw_XIP_ABS_ADDR - ${wifi_fw_abs_addr} - ) -endif() - -if (is_dynamic_partition_in_domain) - # We are being built as sub image. - # Expose the generated partition manager configuration files to parent image. - # This is used by the root image to create the global configuration in - # pm_config.h. - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_PARTITIONS ${pm_out_partition_file}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_REGIONS ${pm_out_region_file}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_HEADER_FILES ${header_files}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_IMAGES ${prefixed_images}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_HEX_FILE ${PROJECT_BINARY_DIR}/${merged}.hex) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOTCONF_FILES ${pm_out_dotconf_file}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_APP_HEX ${PROJECT_BINARY_DIR}/app.hex) - set_shared(IMAGE ${IMAGE_NAME} APPEND PROPERTY BUILD_BYPRODUCTS ${PROJECT_BINARY_DIR}/${merged}.hex) - if(CONFIG_SECURE_BOOT) - # Only when secure boot is enabled the app will be signed. - set_shared(IMAGE ${DOMAIN} PROPERTY PM_SIGNED_APP_HEX ${PROJECT_BINARY_DIR}/signed_by_b0_app.hex) - endif() -else() - # This is the root image, generate the global pm_config.h - # First, include the shared properties for all child images. - if (PM_DOMAINS) - # We ensure the existence of PM_DOMAINS to support older cmake versions. - # When version >= 3.17 is required this check can be removed. - list(REMOVE_DUPLICATES PM_DOMAINS) - endif() - foreach (d ${PM_DOMAINS}) - # Don't include shared vars from own domain. - if (NOT ("${DOMAIN}" STREQUAL "${d}")) - get_shared(shared_header_files IMAGE ${d} PROPERTY PM_DOMAIN_HEADER_FILES) - get_shared(shared_prefixed_images IMAGE ${d} PROPERTY PM_DOMAIN_IMAGES) - get_shared(shared_pm_out_partition_file IMAGE ${d} PROPERTY PM_DOMAIN_PARTITIONS) - get_shared(shared_pm_out_region_file IMAGE ${d} PROPERTY PM_DOMAIN_REGIONS) - get_shared(shared_domain_hex_files IMAGE ${d} PROPERTY PM_HEX_FILE) - - list(APPEND header_files ${shared_header_files}) - list(APPEND prefixed_images ${shared_prefixed_images}) - list(APPEND pm_out_partition_file ${shared_pm_out_partition_file}) - list(APPEND pm_out_region_file ${shared_pm_out_region_file}) - list(APPEND domain_hex_files ${shared_domain_hex_files}) - list(APPEND global_hex_depends ${${d}_PM_DOMAIN_DYNAMIC_PARTITION}_subimage) - - # Add domain prefix cmake variables for all partitions - # Here, we actually overwrite the already imported pm.config values - # for our own domain. This is not an issue since all of these variables - # are accessed through the 'partition_manager' target, and most likely - # through generator expression, as this file is one of the last - # cmake files executed in the configure stage. - get_shared(conf_file IMAGE ${d} PROPERTY PM_DOTCONF_FILES) - import_pm_config(${conf_file} ${d}_pm_var_names) - - foreach(name ${${d}_pm_var_names}) - set_property( - TARGET partition_manager - PROPERTY ${d}_${name} - ${${name}} - ) - endforeach() - endif() - endforeach() - - if (CONFIG_BOOTLOADER_MCUBOOT) - if (CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY AND CONFIG_HAS_HW_NRF_QSPI) - # First we see if an ext flash dev has been chosen, if not, then we look - # up the 'qspi' node and assume that this has the required address. - if (DEFINED ext_flash_dev) - get_filename_component(qspi_node ${ext_flash_dev} DIRECTORY) - else() - dt_nodelabel(qspi_node NODELABEL "qspi") - endif() - - # If the qspi node is still not defined we are building on a platform - # which does not have the qspi peripheral, in which case no hex files - # will be generated for the secondary slot. - if(DEFINED qspi_node) - dt_reg_addr(xip_addr PATH ${qspi_node} NAME qspi_mm) - if(NOT DEFINED xip_addr) - message(WARNING "\ -Could not find memory mapped address for XIP. Generated update hex files will \ -not have the correct base address. Hence they can not be programmed directly \ -to the external flash") - endif() - endif() - endif() - - # Create symbols for the offset required for moving the signed network - # core application to MCUBoots secondary slot. This is needed - # because objcopy does not support arithmetic expressions as argument - # (e.g. '0x100+0x200'), and all of the symbols used to generate the - # offset are only available as a generator expression when MCUBoots - # cmake code executes. - - # Check if a signed version of the network core application is defined. - # If so, this indicates that we need to support firmware updates on the - # network core. This again means that we should generate the required - # hex files. - get_shared(cpunet_signed_app_hex IMAGE CPUNET PROPERTY PM_SIGNED_APP_HEX) - - if (CONFIG_NRF53_UPGRADE_NETWORK_CORE - AND DEFINED cpunet_signed_app_hex) - # The address coming from other domains are not available in this scope - # since it is imported by a different domain. Hence, it must be fetched - # through the 'partition_manager' target. - get_target_property(net_app_addr partition_manager CPUNET_PM_APP_ADDRESS) - - get_shared( - mcuboot_NRF53_MULTI_IMAGE_UPDATE - IMAGE mcuboot - PROPERTY NRF53_MULTI_IMAGE_UPDATE - ) - - # Check if multi image updates are enabled, in which case we need - # to use the "_1" variant of the secondary partition for the network core. - if(DEFINED mcuboot_NRF53_MULTI_IMAGE_UPDATE) - set(sec_slot_idx "_1") - endif() - - # Calculate the offset from the address which the net/app core app is linked - # against to the secondary slot. We need these values to generate hex files - # which targets the secondary slot. - math(EXPR net_app_to_secondary - "${xip_addr} \ - + ${PM_MCUBOOT_SECONDARY${sec_slot_idx}_ADDRESS} \ - - ${net_app_addr} \ - + ${PM_MCUBOOT_PAD_SIZE}" - ) - - set_property( - TARGET partition_manager - PROPERTY net_app_TO_SECONDARY - ${net_app_to_secondary} - ) - - # This value is needed by `imgtool.py` which is used to sign the images. - set_property( - TARGET partition_manager - PROPERTY net_app_slot_size - ${PM_MCUBOOT_SECONDARY${sec_slot_idx}_SIZE} - ) - endif() - - math(EXPR app_to_secondary - "${xip_addr} \ - + ${PM_MCUBOOT_SECONDARY_ADDRESS} \ - - ${PM_MCUBOOT_PRIMARY_ADDRESS}" - ) - - set_property( - TARGET partition_manager - PROPERTY app_TO_SECONDARY - ${app_to_secondary} - ) - endif() - - # Explicitly add the root image domain hex file to the list - list(APPEND domain_hex_files ${PROJECT_BINARY_DIR}/${merged}.hex) - list(APPEND global_hex_depends ${merged}_hex) - - # Now all partition manager configuration from all images and domains are - # available. Generate the global pm_config.h, and provide it to all images. - set(pm_global_output_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager_output.py - --input-partitions ${pm_out_partition_file} - --input-regions ${pm_out_region_file} - --header-files ${header_files} - --images ${prefixed_images} - ) - - execute_process( - COMMAND - ${pm_global_output_cmd} - RESULT_VARIABLE ret - ) - - if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "Partition Manager GLOBAL output generation failed, - aborting. Command: ${pm_global_output_cmd}") - endif() - - set_property( - TARGET partition_manager - PROPERTY PM_CONFIG_FILES - ${pm_out_partition_file} - ) - - set_property( - TARGET partition_manager - PROPERTY PM_DEPENDS - ${global_hex_depends} - ) - - add_custom_target( - partition_manager_report - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager_report.py - --input ${pm_out_partition_file} - COMMAND_EXPAND_LISTS - ) - - if (PM_DOMAINS) - # For convenience, generate global hex file containing all domains' hex - # files. - set(merged_domains merged_domains) - set(final_merged ${ZEPHYR_BINARY_DIR}/${merged_domains}.hex) - - # Add command to merge files. - add_custom_command( - OUTPUT ${final_merged} - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_BASE}/scripts/build/mergehex.py - -o ${final_merged} - ${domain_hex_files} - DEPENDS - ${domain_hex_files} - ${global_hex_depends} - ) - - # Wrapper target for the merge command. - add_custom_target(merged_domains_hex ALL DEPENDS ${final_merged}) - endif() - - set(ZEPHYR_RUNNER_CONFIG_KERNEL_HEX "${final_merged}" - CACHE STRING "Path to merged image in Intel Hex format" FORCE) - -endif() - -# We need to tell the flash runner use the merged hex file instead of -# 'zephyr.hex'This is typically done by setting the 'hex_file' property of the -# 'runners_yaml_props_target' target. However, since the CMakeLists.txt file -# reading those properties has already run, and the 'hex_file' property -# is not evaluated in a generator expression, it is too late at this point to -# set that variable. Hence we must operate on the 'yaml_contents' property, -# which is evaluated in a generator expression. - -if (merged_domains) - # Multiple domains are included in the build, point to the result of - # merging the merged hex file for all domains. - set(merged_hex_to_flash ${merged_domains}.hex) -else() - set(merged_hex_to_flash ${merged}.hex) -endif() - -get_target_property(runners_content runners_yaml_props_target yaml_contents) - -string(REGEX REPLACE "hex_file:[^\n]*" - "hex_file: ${merged_hex_to_flash}" runners_content_updated_hex_file ${runners_content}) - -set_property( - TARGET runners_yaml_props_target - PROPERTY yaml_contents ${runners_content_updated_hex_file} - ) diff --git a/cmake/sdp.cmake b/cmake/sdp.cmake new file mode 100644 index 000000000000..619a18fb4b3d --- /dev/null +++ b/cmake/sdp.cmake @@ -0,0 +1,89 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +function(sdp_assembly_generate hrt_srcs) + set(hrt_msg "Generating ASM files for Hard Real Time files.") + set(hrt_opts -g0 -fno-ident -fno-verbose-asm) + + # Compiler does not know how to build for this platform so we export + # all the flags used in this zephyr build to the external build system. + zephyr_get_compile_options_for_lang(C options) + zephyr_get_compile_definitions_for_lang(C defines) + zephyr_get_include_directories_for_lang(C includes) + zephyr_get_system_include_directories_for_lang(C sys_includes) + # Replace "-I" with "-isystem" to treat all Zephyr headers as system headers + # that do not trigger -Werror. + string(REPLACE "-I" "-isystem" includes "${includes}") + + set(compiler_options ${defines} ${options} ${includes} ${sys_includes}) + + if(TARGET asm_gen) + message(FATAL_ERROR "sdp_assembly_generate() already called, please note that + sdp_assembly_generate() must be called only once with a list of all source files." + ) + endif() + + # Define the asm_gen target that depends on all generated assembly files + add_custom_target(asm_gen + COMMENT ${hrt_msg} + ) + + foreach(hrt_src ${hrt_srcs}) + if(IS_DIRECTORY ${hrt_src}) + message(FATAL_ERROR "sdp_assembly_generate() was called on a directory") + endif() + get_filename_component(src_filename ${hrt_src} NAME_WE) # filename without extension + add_custom_command(TARGET asm_gen + PRE_BUILD + BYPRODUCTS ${src_filename}-temp.s + COMMAND ${CMAKE_C_COMPILER} ${compiler_options} ${hrt_opts} -S ${hrt_src} -o ${src_filename}-temp.s + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_NRF_MODULE_DIR}/scripts/sdp/remove_comments.py ${src_filename}-temp.s + COMMAND_EXPAND_LISTS + COMMENT "Generating ASM file for ${hrt_src}" + ) + endforeach() + + add_dependencies(asm_gen syscall_list_h_target kobj_types_h_target) + +endfunction() + +function(sdp_assembly_check hrt_srcs) + set(asm_check_msg "Checking if ASM files for Hard Real Time have changed.") + + if(TARGET asm_check) + message(FATAL_ERROR "sdp_assembly_check() already called, please note that + sdp_assembly_check() must be called only once with a list of all source files." + ) + endif() + + string(REPLACE ";" "$" hrt_srcs_semi "${hrt_srcs}") + + add_custom_target(asm_check + COMMAND ${CMAKE_COMMAND} -D hrt_srcs="${hrt_srcs_semi}" -P ${ZEPHYR_NRF_MODULE_DIR}/cmake/sdp_asm_check.cmake + COMMENT ${asm_check_msg} + ) + + add_dependencies(asm_check asm_gen) + +endfunction() + +function(sdp_assembly_prepare_install hrt_srcs) + set(asm_install_msg "Updating ASM files for Hard Real Time.") + + if(TARGET asm_install) + message(FATAL_ERROR "sdp_assembly_prepare_install() already called, please note that + sdp_assembly_prepare_install() must be called only once with a list of all source files." + ) + endif() + + string(REPLACE ";" "$" hrt_srcs_semi "${hrt_srcs}") + + add_custom_target(asm_install + COMMAND ${CMAKE_COMMAND} -D hrt_srcs="${hrt_srcs_semi}" -P ${ZEPHYR_NRF_MODULE_DIR}/cmake/sdp_asm_install.cmake + COMMENT ${asm_install_msg} + ) + +endfunction() diff --git a/cmake/sdp_asm_check.cmake b/cmake/sdp_asm_check.cmake new file mode 100644 index 000000000000..8af14542546a --- /dev/null +++ b/cmake/sdp_asm_check.cmake @@ -0,0 +1,30 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +function(asm_check) + + foreach(hrt_src ${hrt_srcs}) + get_filename_component(asm_filename ${hrt_src} NAME_WE) # filename without extension + get_filename_component(src_dir ${hrt_src} DIRECTORY) + + execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files --ignore-eol + ${src_dir}/${asm_filename}.s ${asm_filename}-temp.s + RESULT_VARIABLE compare_result) + + if( compare_result EQUAL 0) + message("File ${asm_filename}.s has not changed.") + elseif( compare_result EQUAL 1) + message(WARNING "${asm_filename}.s ASM file content has changed.\ + If you want to include the new ASM in build, \ + please run `ninja asm_install` in FLPR build directory and build again") + else() + message("Something went wrong when comparing ${asm_filename}.s and ${asm_filename}-temp.s") + endif() + endforeach() + +endfunction(asm_check) + +asm_check() diff --git a/cmake/sdp_asm_install.cmake b/cmake/sdp_asm_install.cmake new file mode 100644 index 000000000000..42d823db4dab --- /dev/null +++ b/cmake/sdp_asm_install.cmake @@ -0,0 +1,25 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +function(asm_install) + + foreach(hrt_src ${hrt_srcs}) + get_filename_component(asm_filename ${hrt_src} NAME_WE) # filename without extension + get_filename_component(src_dir ${hrt_src} DIRECTORY) + + file(RENAME ${asm_filename}-temp.s ${src_dir}/${asm_filename}.s RESULT rename_result) + + if (rename_result EQUAL 0) + message("Updated ${asm_filename}.s ASM file.") + else() + message(WARNING "${asm_filename}.s cannot be updated, new ASM does not exist. Please run ninja asm_gen to create one.") + endif() + + endforeach() + +endfunction(asm_install) + +asm_install() diff --git a/cmake/sysbuild/b0_mcuboot_signing.cmake b/cmake/sysbuild/b0_mcuboot_signing.cmake index 3ff9fbd98fe0..a404d3a2a335 100644 --- a/cmake/sysbuild/b0_mcuboot_signing.cmake +++ b/cmake/sysbuild/b0_mcuboot_signing.cmake @@ -138,7 +138,7 @@ if(SB_CONFIG_BOOTLOADER_MCUBOOT) if(SB_CONFIG_SECURE_BOOT_BUILD_S1_VARIANT_IMAGE) ncs_secure_boot_mcuboot_sign(s1_image "${bin_files}" "${signed_targets}" "") - set(extra_bin_data "signed_by_mcuboot_and_b0_s1_image.binload_address=$") + set(extra_bin_data "signed_by_mcuboot_and_b0_s1_image.binload_address=$;signed_by_mcuboot_and_b0_s1_image.binslot=1") endif() if(bin_files) @@ -156,6 +156,7 @@ if(SB_CONFIG_BOOTLOADER_MCUBOOT) ${extra_bin_data} "version_MCUBOOT=${SB_CONFIG_SECURE_BOOT_MCUBOOT_VERSION}" "version_B0=${mcuboot_fw_info_firmware_version}" + "signed_by_mcuboot_and_b0_mcuboot.binslot=0" DEPENDS ${signed_targets} ) endif() diff --git a/cmake/sysbuild/debug_keys.cmake b/cmake/sysbuild/debug_keys.cmake index af94348d00ef..bcf9def42dde 100644 --- a/cmake/sysbuild/debug_keys.cmake +++ b/cmake/sysbuild/debug_keys.cmake @@ -47,12 +47,14 @@ if(NOT SB_CONFIG_SECURE_BOOT_SIGNING_CUSTOM AND "${SB_CONFIG_SECURE_BOOT_SIGNING ) set(SIGN_KEY_FILE_DEPENDS debug_sign_key_target) else() - if(IS_ABSOLUTE ${SB_CONFIG_SECURE_BOOT_SIGNING_KEY_FILE}) - set(SIGNATURE_PRIVATE_KEY_FILE ${SB_CONFIG_SECURE_BOOT_SIGNING_KEY_FILE}) + string(CONFIGURE "${SB_CONFIG_SECURE_BOOT_SIGNING_KEY_FILE}" keyfile) + if(IS_ABSOLUTE ${keyfile}) + set(SIGNATURE_PRIVATE_KEY_FILE ${keyfile}) else() # Resolve path relative to the application configuration directory. - set(SIGNATURE_PRIVATE_KEY_FILE ${APPLICATION_CONFIG_DIR}/${SB_CONFIG_SECURE_BOOT_SIGNING_KEY_FILE}) + set(SIGNATURE_PRIVATE_KEY_FILE ${APPLICATION_CONFIG_DIR}/${keyfile}) endif() + set(keyfile) if(NOT EXISTS ${SIGNATURE_PRIVATE_KEY_FILE}) message(FATAL_ERROR "Config points to non-existing PEM file '${SIGNATURE_PRIVATE_KEY_FILE}'") diff --git a/cmake/sysbuild/fast_pair_hex.cmake b/cmake/sysbuild/fast_pair_hex.cmake index 50ed997ba464..cccce890cbd9 100644 --- a/cmake/sysbuild/fast_pair_hex.cmake +++ b/cmake/sysbuild/fast_pair_hex.cmake @@ -1,10 +1,10 @@ # -# Copyright (c) 2022-2023 Nordic Semiconductor +# Copyright (c) 2022-2024 Nordic Semiconductor # # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # -function(fast_pair_hex) +function(fast_pair_hex_pm) set(fp_partition_name bt_fast_pair) set( @@ -47,4 +47,104 @@ function(fast_pair_hex) ) endfunction() -fast_pair_hex() +# This function should probably one day be moved to some common utilities file. +function(dt_get_parent parent_full_path node_full_path) + string(FIND "${node_full_path}" "/" pos REVERSE) + + if(pos LESS_EQUAL 0) + message(FATAL_ERROR "Unable to get parent of node: ${node_full_path}") + endif() + + string(SUBSTRING "${node_full_path}" 0 ${pos} parent) + set(${parent_full_path} ${parent} PARENT_SCOPE) +endfunction() + +function(fast_pair_hex_dts) + include(${CMAKE_CURRENT_LIST_DIR}/suit_utilities.cmake) + + if(NOT SB_CONFIG_SOC_SERIES_NRF54HX) + message(FATAL_ERROR "Fast Pair data provisioning using DTS partitions is only supported" + "for nRF54H series.") + endif() + + set(fp_partition_name bt_fast_pair_partition) + + sysbuild_dt_nodelabel( + bt_fast_pair_partition_node_full_path + IMAGE + ${DEFAULT_IMAGE} + NODELABEL + "${fp_partition_name}" + ) + + sysbuild_dt_reg_addr( + bt_fast_pair_partition_relative_address + IMAGE + ${DEFAULT_IMAGE} + PATH + "${bt_fast_pair_partition_node_full_path}" + ) + + # It's assumed that the Fast Pair partition node is a child of an address-less node which groups + # partitions and is a child of a NVM node. For more details see the Fixed flash partitions section + # of https://docs.zephyrproject.org/latest/build/dts/intro-syntax-structure.html#unit-addresses. + dt_get_parent( + bt_fast_pair_partition_node_parent_full_path + "${bt_fast_pair_partition_node_full_path}" + ) + dt_get_parent( + nvm_node_full_path + "${bt_fast_pair_partition_node_parent_full_path}" + ) + sysbuild_dt_reg_addr( + nvm_base_address + IMAGE + ${DEFAULT_IMAGE} + PATH + "${nvm_node_full_path}" + ) + + math( + EXPR + bt_fast_pair_partition_address + "${nvm_base_address} + ${bt_fast_pair_partition_relative_address}" + OUTPUT_FORMAT + HEXADECIMAL + ) + + set( + fp_provisioning_data_hex + ${CMAKE_BINARY_DIR}/modules/nrf/subsys/bluetooth/services/fast_pair/fp_provisioning_data.hex + ) + + set(fp_provisioning_data_address ${bt_fast_pair_partition_address}) + + add_custom_command( + OUTPUT + ${fp_provisioning_data_hex} + COMMAND + ${PYTHON_EXECUTABLE} ${ZEPHYR_NRF_MODULE_DIR}/scripts/nrf_provision/fast_pair/fp_provision_cli.py + -o ${fp_provisioning_data_hex} -a ${fp_provisioning_data_address} + -m ${FP_MODEL_ID} -k ${FP_ANTI_SPOOFING_KEY} + COMMENT + "Generating Fast Pair provisioning data hex file" + USES_TERMINAL + ) + + add_custom_target( + ${fp_partition_name}_target + ALL + DEPENDS + "${fp_provisioning_data_hex}" + ) + + suit_add_merge_hex_file(FILES ${fp_provisioning_data_hex} + DEPENDENCIES ${fp_partition_name}_target + ) +endfunction() + +if(SB_CONFIG_PARTITION_MANAGER) + fast_pair_hex_pm() +else() + fast_pair_hex_dts() +endif() diff --git a/cmake/sysbuild/image_signing.cmake b/cmake/sysbuild/image_signing.cmake index 7710e6df9a0e..6520737713da 100644 --- a/cmake/sysbuild/image_signing.cmake +++ b/cmake/sysbuild/image_signing.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2023 Nordic Semiconductor ASA +# Copyright (c) 2020-2024 Nordic Semiconductor ASA # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # This file includes extra build system logic that is enabled when @@ -19,6 +19,8 @@ endfunction() function(zephyr_mcuboot_tasks) set(keyfile "${CONFIG_MCUBOOT_SIGNATURE_KEY_FILE}") set(keyfile_enc "${CONFIG_MCUBOOT_ENCRYPTION_KEY_FILE}") + string(CONFIGURE "${keyfile}" keyfile) + string(CONFIGURE "${keyfile_enc}" keyfile_enc) if(NOT "${CONFIG_MCUBOOT_GENERATE_UNSIGNED_IMAGE}") # Check for misconfiguration. @@ -55,7 +57,9 @@ function(zephyr_mcuboot_tasks) # back on mcuboot/scripts/imgtool.py. We exclude the system imgtool when # compressed image support is enabled due to needing a version of imgtool # that has features not in the most recent public release. - if(IMGTOOL AND NOT CONFIG_MCUBOOT_COMPRESSED_IMAGE_SUPPORT_ENABLED) + if(IMGTOOL AND + (NOT CONFIG_MCUBOOT_COMPRESSED_IMAGE_SUPPORT_ENABLED AND + NOT (CONFIG_SOC_SERIES_NRF54LX AND CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519))) set(imgtool_path "${IMGTOOL}") elseif(DEFINED ZEPHYR_MCUBOOT_MODULE_DIR) set(IMGTOOL_PY "${ZEPHYR_MCUBOOT_MODULE_DIR}/scripts/imgtool.py") @@ -70,6 +74,17 @@ function(zephyr_mcuboot_tasks) return() endif() + # Fetch devicetree details for flash and slot information + dt_chosen(flash_node PROPERTY "zephyr,flash") + dt_nodelabel(slot0_flash NODELABEL "slot0_partition" REQUIRED) + dt_prop(slot_size PATH "${slot0_flash}" PROPERTY "reg" INDEX 1 REQUIRED) + dt_prop(write_block_size PATH "${flash_node}" PROPERTY "write-block-size") + + if(NOT write_block_size) + set(write_block_size 4) + message(WARNING "slot0_partition write block size devicetree parameter is missing, assuming write block size is 4") + endif() + set(imgtool_directxip_hex_command) if(CONFIG_MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP_WITH_REVERT OR CONFIG_MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP) @@ -91,7 +106,7 @@ function(zephyr_mcuboot_tasks) # TODO: NCSDK-28461 sysbuild PM fields cannot be updated without a pristine build, will become # invalid if a static PM file is updated without pristine build set(imgtool_sign_sysbuild --slot-size @PM_MCUBOOT_PRIMARY_SIZE@ --pad-header --header-size @PM_MCUBOOT_PAD_SIZE@ ${imgtool_rom_command} CACHE STRING "imgtool sign sysbuild replacement") - set(imgtool_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align 4 ${imgtool_sign_sysbuild}) + set(imgtool_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align ${write_block_size} ${imgtool_sign_sysbuild}) # Arguments to imgtool. if(NOT CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS STREQUAL "") @@ -118,6 +133,14 @@ function(zephyr_mcuboot_tasks) set(imgtool_hex_extra) endif() + if(CONFIG_SOC_SERIES_NRF54LX AND CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_ED25519) + if(NOT CONFIG_MCUBOOT_BOOTLOADER_SIGNATURE_TYPE_PURE) + set(imgtool_extra --sha 512 ${imgtool_extra}) + else() + set(imgtool_extra --pure ${imgtool_extra}) + endif() + endif() + if(CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION) set(imgtool_extra --security-counter ${CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_VALUE} ${imgtool_extra}) endif() diff --git a/cmake/sysbuild/image_signing_firmware_loader.cmake b/cmake/sysbuild/image_signing_firmware_loader.cmake index 1ea85e334ad4..8b42bfa0d64f 100644 --- a/cmake/sysbuild/image_signing_firmware_loader.cmake +++ b/cmake/sysbuild/image_signing_firmware_loader.cmake @@ -68,13 +68,24 @@ function(zephyr_mcuboot_tasks) return() endif() + # Fetch devicetree details for flash and slot information + dt_chosen(flash_node PROPERTY "zephyr,flash") + dt_nodelabel(slot0_flash NODELABEL "slot0_partition" REQUIRED) + dt_prop(slot_size PATH "${slot0_flash}" PROPERTY "reg" INDEX 1 REQUIRED) + dt_prop(write_block_size PATH "${flash_node}" PROPERTY "write-block-size") + + if(NOT write_block_size) + set(write_block_size 4) + message(WARNING "slot0_partition write block size devicetree parameter is missing, assuming write block size is 4") + endif() + # Split fields, imgtool_sign_sysbuild is stored in cache which will have fields updated by # sysbuild, imgtool_sign must not be stored in cache because it would then prevent those fields # from being updated without a pristine build # TODO: NCSDK-28461 sysbuild PM fields cannot be updated without a pristine build, will become # invalid if a static PM file is updated without pristine build set(imgtool_sign_sysbuild --slot-size @PM_MCUBOOT_SECONDARY_SIZE@ --pad-header --header-size @PM_MCUBOOT_PAD_SIZE@ ${imgtool_rom_command} CACHE STRING "imgtool sign sysbuild replacement") - set(imgtool_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align 4 ${imgtool_sign_sysbuild}) + set(imgtool_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align ${write_block_size} ${imgtool_sign_sysbuild}) # Arguments to imgtool. if(NOT CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS STREQUAL "") diff --git a/cmake/sysbuild/image_signing_nrf700x.cmake b/cmake/sysbuild/image_signing_nrf700x.cmake index 7480f8ee3df8..a0698383c959 100644 --- a/cmake/sysbuild/image_signing_nrf700x.cmake +++ b/cmake/sysbuild/image_signing_nrf700x.cmake @@ -40,6 +40,17 @@ function(nrf7x_signing_tasks input output_hex output_bin dependencies) return() endif() + # Fetch devicetree details for flash and slot information + sysbuild_dt_chosen(flash_node IMAGE ${DEFAULT_IMAGE} PROPERTY "zephyr,flash") + sysbuild_dt_nodelabel(slot0_flash IMAGE ${DEFAULT_IMAGE} NODELABEL "slot0_partition" REQUIRED) + sysbuild_dt_prop(slot_size IMAGE ${DEFAULT_IMAGE} PATH "${slot0_flash}" PROPERTY "reg" INDEX 1 REQUIRED) + sysbuild_dt_prop(write_block_size IMAGE ${DEFAULT_IMAGE} PATH "${flash_node}" PROPERTY "write-block-size") + + if(NOT write_block_size) + set(write_block_size 4) + message(WARNING "slot0_partition write block size devicetree parameter is missing, assuming write block size is 4") + endif() + sysbuild_get(CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION IMAGE ${DEFAULT_IMAGE} VAR CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION KCONFIG) set(imgtool_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align 4 --slot-size $ --pad-header --header-size ${SB_CONFIG_PM_MCUBOOT_PAD}) diff --git a/cmake/sysbuild/image_signing_split.cmake b/cmake/sysbuild/image_signing_split.cmake index fa0addb3ad7a..784ff9b949b0 100644 --- a/cmake/sysbuild/image_signing_split.cmake +++ b/cmake/sysbuild/image_signing_split.cmake @@ -95,6 +95,17 @@ function(zephyr_mcuboot_tasks) return() endif() + # Fetch devicetree details for flash and slot information + dt_chosen(flash_node PROPERTY "zephyr,flash") + dt_nodelabel(slot0_flash NODELABEL "slot0_partition" REQUIRED) + dt_prop(slot_size PATH "${slot0_flash}" PROPERTY "reg" INDEX 1 REQUIRED) + dt_prop(write_block_size PATH "${flash_node}" PROPERTY "write-block-size") + + if(NOT write_block_size) + set(write_block_size 4) + message(WARNING "slot0_partition write block size devicetree parameter is missing, assuming write block size is 4") + endif() + # Fetch QSPI XIP MCUboot image number from sysbuild zephyr_get(qspi_xip_image_number VAR QSPI_XIP_IMAGE_NUMBER SYSBUILD) @@ -116,8 +127,8 @@ function(zephyr_mcuboot_tasks) # invalid if a static PM file is updated without pristine build set(imgtool_internal_sign_sysbuild --slot-size @PM_MCUBOOT_PRIMARY_SIZE@ --pad-header --header-size @PM_MCUBOOT_PAD_SIZE@ ${imgtool_internal_rom_command} CACHE STRING "imgtool sign (internal flash) sysbuild replacement") set(imgtool_external_sign_sysbuild --slot-size @PM_MCUBOOT_PRIMARY_${qspi_xip_image_number}_SIZE@ --pad-header --header-size @PM_MCUBOOT_PAD_SIZE@ ${imgtool_external_rom_command} CACHE STRING "imgtool sign (external flash) sysbuild replacement") - set(imgtool_internal_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align 4 ${imgtool_internal_sign_sysbuild}) - set(imgtool_external_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align 4 ${imgtool_external_sign_sysbuild}) + set(imgtool_internal_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align ${write_block_size} ${imgtool_internal_sign_sysbuild}) + set(imgtool_external_sign ${PYTHON_EXECUTABLE} ${imgtool_path} sign --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} --align ${write_block_size} ${imgtool_external_sign_sysbuild}) # Arguments to imgtool. if(NOT CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS STREQUAL "") diff --git a/cmake/sysbuild/lwm2m_carrier_divided_dfu.cmake b/cmake/sysbuild/lwm2m_carrier_divided_dfu.cmake new file mode 100644 index 000000000000..9487589f3b11 --- /dev/null +++ b/cmake/sysbuild/lwm2m_carrier_divided_dfu.cmake @@ -0,0 +1,33 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +find_package(Python3 REQUIRED) + +function(lwm2m_carrier_divided_dfu) + sysbuild_get(${DEFAULT_IMAGE}_image_dir IMAGE ${DEFAULT_IMAGE} VAR APPLICATION_BINARY_DIR CACHE) + sysbuild_get(${DEFAULT_IMAGE}_kernel_name IMAGE ${DEFAULT_IMAGE} VAR CONFIG_KERNEL_BIN_NAME KCONFIG) + + set(app_binary "${${DEFAULT_IMAGE}_image_dir}/zephyr/${${DEFAULT_IMAGE}_kernel_name}.signed.bin") + set(output_dir "${CMAKE_BINARY_DIR}/lwm2m_carrier_divided_dfu") + file(MAKE_DIRECTORY ${output_dir}) + + add_custom_target( + divided_dfu + ALL + COMMAND + ${PYTHON_EXECUTABLE} + ${ZEPHYR_NRF_MODULE_DIR}/lib/bin/lwm2m_carrier/scripts/lwm2m_carrier_divided_dfu.py + --input-file ${app_binary} + --version-str ${SB_CONFIG_LWM2M_CARRIER_DIVIDED_DFU_VERSION} + --max-file-size ${SB_CONFIG_LWM2M_CARRIER_DIVIDED_DFU_MAX_FILE_SIZE} + --output-dir ${output_dir} + DEPENDS + ${app_binary} + ${DEFAULT_IMAGE}_extra_byproducts + ) +endfunction(lwm2m_carrier_divided_dfu) + +lwm2m_carrier_divided_dfu() diff --git a/cmake/sysbuild/nrf700x.cmake b/cmake/sysbuild/nrf700x.cmake index cab2389dba80..43885314c449 100644 --- a/cmake/sysbuild/nrf700x.cmake +++ b/cmake/sysbuild/nrf700x.cmake @@ -8,16 +8,18 @@ function(setup_nrf700x_xip_data) sysbuild_dt_nodelabel(qspi_nodelabel IMAGE ${DEFAULT_IMAGE} NODELABEL "qspi") sysbuild_dt_reg_addr(qspi_xip_address IMAGE ${DEFAULT_IMAGE} PATH "${qspi_nodelabel}" NAME "qspi_mm") - set(OS_AGNOSTIC_BASE ${ZEPHYR_NRFXLIB_MODULE_DIR}/nrf_wifi) + set(NRF70_FW_BINS ${ZEPHYR_NRFXLIB_MODULE_DIR}/nrf_wifi/bin/ncs) if(SB_CONFIG_WIFI_NRF70_SYSTEM_MODE) - set(NRF70_PATCH ${OS_AGNOSTIC_BASE}/fw_bins/default/nrf70.bin) + set(NRF70_PATCH ${NRF70_FW_BINS}/default/nrf70.bin) elseif(SB_CONFIG_WIFI_NRF70_RADIO_TEST) - set(NRF70_PATCH ${OS_AGNOSTIC_BASE}/fw_bins/radio_test/nrf70.bin) + set(NRF70_PATCH ${NRF70_FW_BINS}/radio_test/nrf70.bin) elseif(SB_CONFIG_WIFI_NRF70_SCAN_ONLY) - set(NRF70_PATCH ${OS_AGNOSTIC_BASE}/fw_bins/scan_only/nrf70.bin) + set(NRF70_PATCH ${NRF70_FW_BINS}/scan_only/nrf70.bin) + elseif(SB_CONFIG_WIFI_NRF70_OFFLOADED_RAW_TX) + set(NRF70_PATCH ${NRF70_FW_BINS}/offloaded_raw_tx/nrf70.bin) elseif(SB_CONFIG_WIFI_NRF70_SYSTEM_WITH_RAW_MODES) - set(NRF70_PATCH ${OS_AGNOSTIC_BASE}/fw_bins/system_with_raw/nrf70.bin) + set(NRF70_PATCH ${NRF70_FW_BINS}/system_with_raw/nrf70.bin) else() # Error message(FATAL_ERROR "Unsupported nRF70 patch configuration") diff --git a/cmake/sysbuild/partition_manager.cmake b/cmake/sysbuild/partition_manager.cmake index 32209ee1cd7e..dac8cda72dd0 100644 --- a/cmake/sysbuild/partition_manager.cmake +++ b/cmake/sysbuild/partition_manager.cmake @@ -395,25 +395,13 @@ get_property(PM_SUBSYS_PREPROCESSED GLOBAL PROPERTY PM_SUBSYS_PREPROCESSED) # - It's the root image, and a static configuration has been provided # - It's the root image, and PM_IMAGES is populated. # - It's the root image, and other domains exist. -# - A subsys has defined a partition and CONFIG_PM_SINGLE_IMAGE is set. -# Otherwise, return here -#if (NOT ( -# (IMAGE_NAME AND is_dynamic_partition_in_domain) OR -# (NOT IMAGE_NAME AND static_configuration) OR -# (NOT IMAGE_NAME AND PM_IMAGES) OR -# (NOT IMAGE_NAME AND PM_DOMAINS) OR -# (PM_SUBSYS_PREPROCESSED AND CONFIG_PM_SINGLE_IMAGE) -# )) -# return() -#endif() # Set the dynamic partition. This is the only partition which does not # have a statically defined size. There is only one dynamic partition per # domain. For the "root domain" (ie the domain of the root image) this is # always "app". if (NOT is_dynamic_partition_in_domain) - set(dynamic_partition "app") # Should this be renamed to main image name, or does it matter at all ? -# set(dynamic_partition "${DEFAULT_IMAGE}") # Should this be renamed to main image name, or does it matter at all ? + set(dynamic_partition "app") else() set(dynamic_partition ${${DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION}) set( @@ -525,6 +513,7 @@ foreach(d APP ${PM_DOMAINS}) sysbuild_get(${image_name}_CONFIG_SOC_SERIES_NRF91X IMAGE ${image_name} VAR CONFIG_SOC_SERIES_NRF91X KCONFIG) sysbuild_get(${image_name}_CONFIG_SOC_NRF5340_CPUAPP IMAGE ${image_name} VAR CONFIG_SOC_NRF5340_CPUAPP KCONFIG) + sysbuild_get(${image_name}_CONFIG_SOC_NRF54L15_CPUAPP IMAGE ${image_name} VAR CONFIG_SOC_NRF54L15_CPUAPP KCONFIG) if (${image_name}_CONFIG_SOC_SERIES_NRF91X) # See nRF9160 Product Specification, chapter "UICR" @@ -534,6 +523,9 @@ foreach(d APP ${PM_DOMAINS}) # See nRF5340 Product Specification, chapter Application Core -> ... "UICR" set(otp_start_addr "0xff8100") set(otp_size 764) # 191 * 4 + elseif (DEFINED ${image_name}_CONFIG_SOC_NRF54L15_CPUAPP) + set(otp_start_addr "0xffd500") + set(otp_size 1276) # 319 * 4 endif() sysbuild_get(${image_name}_CONFIG_SOC_SERIES_NRF54LX IMAGE ${image_name} VAR CONFIG_SOC_SERIES_NRF54LX KCONFIG) @@ -557,7 +549,7 @@ foreach(d APP ${PM_DOMAINS}) sysbuild_get(${image_name}_CONFIG_FLASH_SIZE IMAGE ${image_name} VAR CONFIG_FLASH_SIZE KCONFIG) math(EXPR flash_size "${${image_name}_CONFIG_FLASH_SIZE} * 1024" OUTPUT_FORMAT HEXADECIMAL) - if (${image_name}_CONFIG_SOC_SERIES_NRF91X OR ${image_name}_CONFIG_SOC_NRF5340_CPUAPP) + if (${image_name}_CONFIG_SOC_SERIES_NRF91X OR ${image_name}_CONFIG_SOC_NRF5340_CPUAPP OR ${image_name}_CONFIG_SOC_NRF54L15_CPUAPP) add_region( NAME otp SIZE ${otp_size} diff --git a/cmake/sysbuild/provision_hex.cmake b/cmake/sysbuild/provision_hex.cmake index e88b86d1e3dd..81d727afc74d 100644 --- a/cmake/sysbuild/provision_hex.cmake +++ b/cmake/sysbuild/provision_hex.cmake @@ -18,6 +18,13 @@ function(provision application prefix_name) set(PROVISION_HEX_NAME ${prefix_name}provision.hex) set(PROVISION_HEX ${CMAKE_BINARY_DIR}/${PROVISION_HEX_NAME}) + # This calculation is based on the LCS cycle state datacycle state data struct in bl_storage.h + if(CONFIG_SOC_SERIES_NRF54LX) + set(lcs_state_struct_size 0x10) # 4 * 4 bytes + else() + set(lcs_state_struct_size 0x8) # 4 * 2 bytes + endif() + if(CONFIG_SECURE_BOOT) if(DEFINED CONFIG_SB_MONOTONIC_COUNTER) set(monotonic_counter_arg @@ -96,6 +103,7 @@ function(provision application prefix_name) ${monotonic_counter_arg} ${no_verify_hashes_arg} ${mcuboot_counters_slots} + --lcs-state-size ${lcs_state_struct_size} DEPENDS ${PROVISION_KEY_DEPENDS} ${PROVISION_DEPENDS} @@ -118,6 +126,7 @@ function(provision application prefix_name) --max-size ${CONFIG_PM_PARTITION_SIZE_PROVISION} ${mcuboot_counters_num} ${mcuboot_counters_slots} + --lcs-state-size ${lcs_state_struct_size} DEPENDS ${PROVISION_KEY_DEPENDS} WORKING_DIRECTORY diff --git a/cmake/sysbuild/sdp.cmake b/cmake/sysbuild/sdp.cmake index d935a3887051..3dc1d8c0f734 100644 --- a/cmake/sysbuild/sdp.cmake +++ b/cmake/sysbuild/sdp.cmake @@ -2,36 +2,26 @@ # # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# Update eGPIO images KConfig based on SDP configuration. -# -# Usage: -# egpio_update_kconfig() -# -function(egpio_update_kconfig) - if(SB_CONFIG_EGPIO_BACKEND_MBOX) - foreach(image ${PRE_CMAKE_IMAGES}) - set_config_bool(${image} CONFIG_GPIO_NRFE_EGPIO_BACKEND_MBOX y) - endforeach() - if(DEFINED SB_CONFIG_SOC_NRF54L15) - sysbuild_cache_set(VAR flpr_egpio_EXTRA_DTC_OVERLAY_FILE APPEND REMOVE_DUPLICATES "./boards/nrf54l15dk_nrf54l15_cpuflpr_mbox.overlay") - endif() - sysbuild_cache_set(VAR ${DEFAULT_IMAGE}_SNIPPET APPEND REMOVE_DUPLICATES "emulated-gpio-mbox") - message(STATUS "eGPIO: Using MBOX backend") - elseif(SB_CONFIG_EGPIO_BACKEND_ICMSG) - foreach(image ${PRE_CMAKE_IMAGES}) - set_config_bool(${image} CONFIG_GPIO_NRFE_EGPIO_BACKEND_ICMSG y) - endforeach() - set_config_bool(flpr_egpio CONFIG_IPC_SERVICE y) - set_config_bool(flpr_egpio CONFIG_IPC_SERVICE_BACKEND_ICMSG y) - if(DEFINED SB_CONFIG_SOC_NRF54L15) - sysbuild_cache_set(VAR flpr_egpio_EXTRA_DTC_OVERLAY_FILE APPEND REMOVE_DUPLICATES "./boards/nrf54l15dk_nrf54l15_cpuflpr_icmsg.overlay") +# Apply snippet to both images. Assumption is that SDP image is called 'sdp'. +function(sdp_apply_snippets snippet) + sysbuild_cache_set(VAR ${DEFAULT_IMAGE}_SNIPPET APPEND REMOVE_DUPLICATES ${snippet}) + sysbuild_cache_set(VAR sdp_SNIPPET APPEND REMOVE_DUPLICATES ${snippet}) +endfunction() + +if(SB_CONFIG_SDP) + if(SB_CONFIG_SDP_GPIO) + if(SB_CONFIG_SDP_GPIO_BACKEND_MBOX) + set(snippet_name "sdp-gpio-mbox") + elseif(SB_CONFIG_SDP_GPIO_BACKEND_ICMSG) + set(snippet_name "sdp-gpio-icmsg") + elseif(SB_CONFIG_SDP_GPIO_BACKEND_ICBMSG) + set(snippet_name "sdp-gpio-icbmsg") endif() - sysbuild_cache_set(VAR ${DEFAULT_IMAGE}_SNIPPET APPEND REMOVE_DUPLICATES "emulated-gpio-icmsg") - message(STATUS "eGPIO: Using ICMSG backend") endif() -endfunction() + if(SB_CONFIG_SDP_MSPI) + set(snippet_name "sdp-mspi") + endif() -# If eGPIO FLPR application is enabled, update Kconfigs -if(SB_CONFIG_EGPIO_FLPR_APPLICATION) - egpio_update_kconfig() + sdp_apply_snippets(${snippet_name}) + set(snippet_name) endif() diff --git a/cmake/sysbuild/sign.cmake b/cmake/sysbuild/sign.cmake index 3881744c56d0..bc504b1bcb33 100644 --- a/cmake/sysbuild/sign.cmake +++ b/cmake/sysbuild/sign.cmake @@ -30,8 +30,8 @@ function(b0_gen_keys) -out ${SIGNATURE_PUBLIC_KEY_FILE} ) elseif(SB_CONFIG_SECURE_BOOT_SIGNING_CUSTOM) - set(SIGNATURE_PUBLIC_KEY_FILE ${SB_CONFIG_SECURE_BOOT_SIGNING_PUBLIC_KEY}) - set(SIGNATURE_PUBLIC_KEY_FILE ${SB_CONFIG_SECURE_BOOT_SIGNING_PUBLIC_KEY} PARENT_SCOPE) + string(CONFIGURE "${SB_CONFIG_SECURE_BOOT_SIGNING_PUBLIC_KEY}" SIGNATURE_PUBLIC_KEY_FILE) + set(SIGNATURE_PUBLIC_KEY_FILE ${SIGNATURE_PUBLIC_KEY_FILE} PARENT_SCOPE) if(NOT EXISTS ${SIGNATURE_PUBLIC_KEY_FILE} OR IS_DIRECTORY ${SIGNATURE_PUBLIC_KEY_FILE}) message(WARNING "Invalid public key file: ${SIGNATURE_PUBLIC_KEY_FILE}") @@ -165,6 +165,7 @@ function(b0_sign_image slot) ) elseif(SB_CONFIG_SECURE_BOOT_SIGNING_CUSTOM) set(custom_sign_cmd "${SB_CONFIG_SECURE_BOOT_SIGNING_COMMAND}") + string(CONFIGURE "${custom_sign_cmd}" custom_sign_cmd) if (("${custom_sign_cmd}" STREQUAL "") OR (NOT EXISTS ${SIGNATURE_PUBLIC_KEY_FILE})) message(FATAL_ERROR "You must specify a signing command and valid public key file for custom signing.") diff --git a/cmake/sysbuild/suit.cmake b/cmake/sysbuild/suit.cmake index 9f2939f1c377..5befcfba3cc3 100644 --- a/cmake/sysbuild/suit.cmake +++ b/cmake/sysbuild/suit.cmake @@ -21,29 +21,6 @@ function(suit_set_absolute_or_relative_path path relative_root output_variable) set(${output_variable} "${path}" PARENT_SCOPE) endfunction() -# Sign an envelope using SIGN_SCRIPT. -# -# Usage: -# suit_sign_envelope( ) -# -# Parameters: -# 'input_file' - path to input unsigned envelope -# 'output_file' - path to output signed envelope -function(suit_sign_envelope input_file output_file) - cmake_path(GET ZEPHYR_NRF_MODULE_DIR PARENT_PATH NRF_DIR_PARENT) - suit_set_absolute_or_relative_path(${SB_CONFIG_SUIT_ENVELOPE_SIGN_SCRIPT} ${NRF_DIR_PARENT} SIGN_SCRIPT) - if(NOT EXISTS ${SIGN_SCRIPT}) - message(SEND_ERROR "DFU: ${SB_CONFIG_SUIT_ENVELOPE_SIGN_SCRIPT} does not exist. Corrupted configuration?") - return() - endif() - set_property( - GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS - COMMAND ${PYTHON_EXECUTABLE} ${SIGN_SCRIPT} - --input-file ${input_file} - --output-file ${output_file} - ) -endfunction() - # Register SUIT post build commands. # # Usage: @@ -236,9 +213,17 @@ function(suit_create_package) set(CORE_ARGS) set(STORAGE_BOOT_ARGS) sysbuild_get(app_config_dir IMAGE ${DEFAULT_IMAGE} VAR APPLICATION_CONFIG_DIR CACHE) + get_property(SUIT_KMS_SCRIPT GLOBAL PROPERTY SUIT_KMS_SCRIPT) + get_property(SUIT_SIGN_SCRIPT GLOBAL PROPERTY SUIT_SIGN_SCRIPT) - if(NOT DEFINED SB_CONFIG_SUIT_ENVELOPE_SIGN) - set(SB_CONFIG_SUIT_ENVELOPE_SIGN FALSE) + # If the user has not provided the path to the kms script, use the default one. + if(NOT SUIT_KMS_SCRIPT) + set(SUIT_KMS_SCRIPT "${ZEPHYR_SUIT_GENERATOR_MODULE_DIR}/ncs/basic_kms.py") + endif() + + # If the user has not provided the path to the sign script, use the default one. + if(NOT SUIT_SIGN_SCRIPT) + set(SUIT_SIGN_SCRIPT "${ZEPHYR_SUIT_GENERATOR_MODULE_DIR}/ncs/sign_script.py") endif() list(APPEND CORE_ARGS @@ -247,12 +232,40 @@ function(suit_create_package) foreach(image ${IMAGES}) unset(target) + unset(encrypt) sysbuild_get(BINARY_DIR IMAGE ${image} VAR APPLICATION_BINARY_DIR CACHE) sysbuild_get(BINARY_FILE IMAGE ${image} VAR CONFIG_KERNEL_BIN_NAME KCONFIG) sysbuild_get(target IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET KCONFIG) + sysbuild_get(encrypt IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT KCONFIG) set(BINARY_FILE "${BINARY_FILE}.bin") + if(encrypt) + if(DEFINED target AND NOT target STREQUAL "") + set(${image}_SUIT_ENCRYPT_DIR "${SUIT_ROOT_DIRECTORY}/${target}_encryption_artifacts") + else() + set(${image}_SUIT_ENCRYPT_DIR "${SUIT_ROOT_DIRECTORY}/${image}_encryption_artifacts") + endif() + + set(SUIT_ENCRYPT_ARGS) + sysbuild_get(encrypt_key_id IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT_KEY_ID KCONFIG) + sysbuild_get(encrypt_key_name IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT_KEY_NAME KCONFIG) + sysbuild_get(plaintext_hash_alg IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT_PLAINTEXT_HASH_ALG_NAME KCONFIG) + + list(APPEND SUIT_ENCRYPT_ARGS --firmware ${BINARY_DIR}/zephyr/${BINARY_FILE}) + list(APPEND SUIT_ENCRYPT_ARGS --key-name ${encrypt_key_name}) + list(APPEND SUIT_ENCRYPT_ARGS --key-id ${encrypt_key_id}) + list(APPEND SUIT_ENCRYPT_ARGS --hash-alg ${plaintext_hash_alg}) + list(APPEND SUIT_ENCRYPT_ARGS --context ${SB_CONFIG_SUIT_ENVELOPE_KMS_SCRIPT_CONTEXT}) + list(APPEND SUIT_ENCRYPT_ARGS --kms-script ${SUIT_KMS_SCRIPT}) + + suit_encrypt_image("${SUIT_ENCRYPT_ARGS}" ${${image}_SUIT_ENCRYPT_DIR}) + + set(${image}_SUIT_PAYLOAD_BINARY ${${image}_SUIT_ENCRYPT_DIR}/encrypted_content.bin) + else() + set(${image}_SUIT_PAYLOAD_BINARY ${BINARY_DIR}/zephyr/${BINARY_FILE}) + endif() + list(APPEND CORE_ARGS --core ${image},${SUIT_ROOT_DIRECTORY}${image}.bin,${BINARY_DIR}/zephyr/edt.pickle,${BINARY_DIR}/zephyr/.config ) @@ -262,11 +275,11 @@ function(suit_create_package) --core ${target},${SUIT_ROOT_DIRECTORY}${image}.bin,${BINARY_DIR}/zephyr/edt.pickle,${BINARY_DIR}/zephyr/.config ) endif() - suit_copy_artifact_to_output_directory(${image} ${BINARY_DIR}/zephyr/${BINARY_FILE}) + suit_copy_artifact_to_output_directory(${image} ${${image}_SUIT_PAYLOAD_BINARY}) - unset(CONFIG_SUIT_RECOVERY) - sysbuild_get(CONFIG_SUIT_RECOVERY IMAGE ${image} VAR CONFIG_SUIT_RECOVERY KCONFIG) - if(CONFIG_SUIT_RECOVERY) + unset(recovery) + sysbuild_get(recovery IMAGE ${image} VAR CONFIG_SUIT_RECOVERY KCONFIG) + if(recovery) set_property(GLOBAL APPEND PROPERTY SUIT_RECOVERY_DFU_ARTIFACTS ${SUIT_ROOT_DIRECTORY}${image}.bin) else() set_property(GLOBAL APPEND PROPERTY SUIT_DFU_ARTIFACTS ${SUIT_ROOT_DIRECTORY}${image}.bin) @@ -311,11 +324,32 @@ function(suit_create_package) set(ENVELOPE_SUIT_FILE ${SUIT_ROOT_DIRECTORY}${target}.suit) suit_render_template(${INPUT_ENVELOPE_JINJA_FILE} ${ENVELOPE_YAML_FILE} "${TEMPLATE_ARGS}") - suit_create_envelope(${ENVELOPE_YAML_FILE} ${ENVELOPE_SUIT_FILE} ${SB_CONFIG_SUIT_ENVELOPE_SIGN}) + suit_create_envelope(${ENVELOPE_YAML_FILE} ${ENVELOPE_SUIT_FILE}) + + unset(sign_envelope) + sysbuild_get(sign_envelope IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_SIGN KCONFIG) + if(sign_envelope) + set(SUIT_SIGN_ARGS) + unset(sign_key_id) + unset(sign_private_key_name) + unset(sign_alg_name) + + sysbuild_get(sign_key_id IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_SIGN_KEY_ID KCONFIG) + sysbuild_get(sign_private_key_name IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_SIGN_PRIVATE_KEY_NAME KCONFIG) + sysbuild_get(sign_alg_name IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_TARGET_SIGN_ALG_NAME KCONFIG) + + list(APPEND SUIT_SIGN_ARGS --key-name ${sign_private_key_name}) + list(APPEND SUIT_SIGN_ARGS --key-id ${sign_key_id}) + list(APPEND SUIT_SIGN_ARGS --alg ${sign_alg_name}) + list(APPEND SUIT_SIGN_ARGS --context ${SB_CONFIG_SUIT_ENVELOPE_KMS_SCRIPT_CONTEXT}) + list(APPEND SUIT_SIGN_ARGS --kms-script ${SUIT_KMS_SCRIPT}) + + suit_sign_envelope(${ENVELOPE_SUIT_FILE} ${ENVELOPE_SUIT_FILE} "${SUIT_SIGN_ARGS}" ${SUIT_SIGN_SCRIPT}) + endif() - unset(CONFIG_SUIT_RECOVERY) - sysbuild_get(CONFIG_SUIT_RECOVERY IMAGE ${image} VAR CONFIG_SUIT_RECOVERY KCONFIG) - if(CONFIG_SUIT_RECOVERY) + unset(recovery) + sysbuild_get(recovery IMAGE ${image} VAR CONFIG_SUIT_RECOVERY KCONFIG) + if(recovery) set_property(GLOBAL APPEND PROPERTY SUIT_RECOVERY_DFU_ARTIFACTS ${ENVELOPE_SUIT_FILE}) else() set_property(GLOBAL APPEND PROPERTY SUIT_DFU_ARTIFACTS ${ENVELOPE_SUIT_FILE}) @@ -331,14 +365,15 @@ function(suit_create_package) set(RECOVERY_DFU_CACHE_PARTITIONS_USED "") foreach(image ${IMAGES}) + unset(EXTRACT_TO_CACHE) sysbuild_get(EXTRACT_TO_CACHE IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE KCONFIG) if(EXTRACT_TO_CACHE) sysbuild_get(CACHE_PARTITION_NUM IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_PARTITION KCONFIG) - unset(CONFIG_SUIT_RECOVERY) - sysbuild_get(CONFIG_SUIT_RECOVERY IMAGE ${image} VAR CONFIG_SUIT_RECOVERY KCONFIG) + unset(recovery) + sysbuild_get(recovery IMAGE ${image} VAR CONFIG_SUIT_RECOVERY KCONFIG) - if(CONFIG_SUIT_RECOVERY) + if(recovery) list(APPEND RECOVERY_DFU_CACHE_PARTITIONS_USED ${CACHE_PARTITION_NUM}) list(APPEND SUIT_RECOVERY_CACHE_PARTITION_${CACHE_PARTITION_NUM} ${image}) else() @@ -355,11 +390,10 @@ function(suit_create_package) foreach(CACHE_PARTITION_NUM ${DFU_CACHE_PARTITIONS_USED}) set(CACHE_CREATE_ARGS "") foreach(image ${SUIT_CACHE_PARTITION_${CACHE_PARTITION_NUM}}) - sysbuild_get(BINARY_DIR IMAGE ${image} VAR APPLICATION_BINARY_DIR CACHE) - sysbuild_get(BINARY_FILE IMAGE ${image} VAR CONFIG_KERNEL_BIN_NAME KCONFIG) sysbuild_get(IMAGE_CACHE_URI IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI KCONFIG) + list(APPEND CACHE_CREATE_ARGS - "--input" "\"${IMAGE_CACHE_URI},${BINARY_DIR}/zephyr/${BINARY_FILE}.bin\"" + "--input" "\"${IMAGE_CACHE_URI},${${image}_SUIT_PAYLOAD_BINARY}\"" ) endforeach() @@ -381,11 +415,9 @@ function(suit_create_package) foreach(CACHE_PARTITION_NUM ${RECOVERY_DFU_CACHE_PARTITIONS_USED}) set(CACHE_CREATE_ARGS "") foreach(image ${SUIT_RECOVERY_CACHE_PARTITION_${CACHE_PARTITION_NUM}}) - sysbuild_get(BINARY_DIR IMAGE ${image} VAR APPLICATION_BINARY_DIR CACHE) - sysbuild_get(BINARY_FILE IMAGE ${image} VAR CONFIG_KERNEL_BIN_NAME KCONFIG) sysbuild_get(IMAGE_CACHE_URI IMAGE ${image} VAR CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI KCONFIG) list(APPEND CACHE_CREATE_ARGS - "--input" "\"${IMAGE_CACHE_URI},${BINARY_DIR}/zephyr/${BINARY_FILE}.bin\"" + "--input" "\"${IMAGE_CACHE_URI},${${image}_SUIT_PAYLOAD_BINARY}\"" ) endforeach() @@ -412,10 +444,23 @@ function(suit_create_package) set(APP_RECOVERY_ENVELOPE_YAML_FILE ${SUIT_ROOT_DIRECTORY}${APP_RECOVERY_NAME}.yaml) set(APP_RECOVERY_ENVELOPE_SUIT_FILE ${SUIT_ROOT_DIRECTORY}${APP_RECOVERY_NAME}.suit) suit_render_template(${INPUT_APP_RECOVERY_ENVELOPE_JINJA_FILE} ${APP_RECOVERY_ENVELOPE_YAML_FILE} "${TEMPLATE_ARGS}") - suit_create_envelope(${APP_RECOVERY_ENVELOPE_YAML_FILE} ${APP_RECOVERY_ENVELOPE_SUIT_FILE} ${SB_CONFIG_SUIT_ENVELOPE_SIGN}) - list(APPEND STORAGE_BOOT_ARGS - --input-envelope ${APP_RECOVERY_ENVELOPE_SUIT_FILE} - ) + suit_create_envelope(${APP_RECOVERY_ENVELOPE_YAML_FILE} ${APP_RECOVERY_ENVELOPE_SUIT_FILE}) + + if(SB_CONFIG_SUIT_ENVELOPE_APP_RECOVERY_SIGN) + set(SUIT_SIGN_ARGS) + + list(APPEND SUIT_SIGN_ARGS --key-name ${SB_CONFIG_SUIT_ENVELOPE_APP_RECOVERY_SIGN_PRIVATE_KEY_NAME}) + list(APPEND SUIT_SIGN_ARGS --key-id ${SB_CONFIG_SUIT_ENVELOPE_APP_RECOVERY_SIGN_KEY_ID}) + list(APPEND SUIT_SIGN_ARGS --alg ${SB_CONFIG_SUIT_ENVELOPE_APP_RECOVERY_SIGN_ALG_NAME}) + list(APPEND SUIT_SIGN_ARGS --context ${SB_CONFIG_SUIT_ENVELOPE_KMS_SCRIPT_CONTEXT}) + list(APPEND SUIT_SIGN_ARGS --kms-script ${SUIT_KMS_SCRIPT}) + + suit_sign_envelope(${APP_RECOVERY_ENVELOPE_SUIT_FILE} ${APP_RECOVERY_ENVELOPE_SUIT_FILE} "${SUIT_SIGN_ARGS}" ${SUIT_SIGN_SCRIPT}) + endif() + + list(APPEND STORAGE_BOOT_ARGS + --input-envelope ${APP_RECOVERY_ENVELOPE_SUIT_FILE} + ) set_property(GLOBAL APPEND PROPERTY SUIT_RECOVERY_DFU_ARTIFACTS ${APP_RECOVERY_ENVELOPE_SUIT_FILE}) endif() endif() @@ -459,7 +504,20 @@ function(suit_create_package) set(ROOT_ENVELOPE_YAML_FILE ${SUIT_ROOT_DIRECTORY}${ROOT_NAME}.yaml) set(ROOT_ENVELOPE_SUIT_FILE ${SUIT_ROOT_DIRECTORY}${ROOT_NAME}.suit) suit_render_template(${INPUT_ROOT_ENVELOPE_JINJA_FILE} ${ROOT_ENVELOPE_YAML_FILE} "${TEMPLATE_ARGS}") - suit_create_envelope(${ROOT_ENVELOPE_YAML_FILE} ${ROOT_ENVELOPE_SUIT_FILE} ${SB_CONFIG_SUIT_ENVELOPE_SIGN}) + suit_create_envelope(${ROOT_ENVELOPE_YAML_FILE} ${ROOT_ENVELOPE_SUIT_FILE}) + + if(SB_CONFIG_SUIT_ENVELOPE_ROOT_SIGN) + set(SUIT_SIGN_ARGS) + + list(APPEND SUIT_SIGN_ARGS --key-name ${SB_CONFIG_SUIT_ENVELOPE_ROOT_SIGN_PRIVATE_KEY_NAME}) + list(APPEND SUIT_SIGN_ARGS --key-id ${SB_CONFIG_SUIT_ENVELOPE_ROOT_SIGN_KEY_ID}) + list(APPEND SUIT_SIGN_ARGS --alg ${SB_CONFIG_SUIT_ENVELOPE_ROOT_SIGN_ALG_NAME}) + list(APPEND SUIT_SIGN_ARGS --context ${SB_CONFIG_SUIT_ENVELOPE_KMS_SCRIPT_CONTEXT}) + list(APPEND SUIT_SIGN_ARGS --kms-script ${SUIT_KMS_SCRIPT}) + + suit_sign_envelope(${ROOT_ENVELOPE_SUIT_FILE} ${ROOT_ENVELOPE_SUIT_FILE} "${SUIT_SIGN_ARGS}" ${SUIT_SIGN_SCRIPT}) + endif() + list(APPEND STORAGE_BOOT_ARGS --input-envelope ${ROOT_ENVELOPE_SUIT_FILE} ) @@ -468,8 +526,46 @@ function(suit_create_package) sysbuild_get(DEFAULT_BINARY_DIR IMAGE ${DEFAULT_IMAGE} VAR APPLICATION_BINARY_DIR CACHE) + if(SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_EXTRACT_PAYLOADS_TO_CACHE) + set(CACHE_CREATE_ARGS "") + set(nordic_cache_partition_num ${SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_CACHE_PARTITION_NUM}) + list(APPEND CACHE_CREATE_ARGS + "--input-envelope" "${ROOT_ENVELOPE_SUIT_FILE}" + "--output-envelope" "${ROOT_ENVELOPE_SUIT_FILE}" + "--eb-size" "${SUIT_DFU_CACHE_PARTITION_${nordic_cache_partition_num}_EB_SIZE}" + ) + + set(NORDIC_DFU_CACHE_PARTITION_FILE "dfu_cache_nordic.bin") + + suit_create_nordic_cache_partition( + "${CACHE_CREATE_ARGS}" + "${NORDIC_DFU_CACHE_PARTITION_FILE}" + ) + + set(CACHE_MERGE_ARGS "") + list(APPEND CACHE_MERGE_ARGS + "--input" "${NORDIC_DFU_CACHE_PARTITION_FILE}" + "--output-file" "${SUIT_ROOT_DIRECTORY}dfu_cache_partition_${nordic_cache_partition_num}.bin" + "--eb-size" "${SUIT_DFU_CACHE_PARTITION_${nordic_cache_partition_num}_EB_SIZE}" + ) + + if(nordic_cache_partition_num IN_LIST DFU_CACHE_PARTITIONS_USED) + # Cache partition already created, merge the old partition file + list(APPEND CACHE_MERGE_ARGS + "--input" "${SUIT_ROOT_DIRECTORY}dfu_cache_partition_${nordic_cache_partition_num}.bin" + ) + endif() + + set_property( + GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS + COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} + cache_create + merge + ${CACHE_MERGE_ARGS} + ) + endif() + # Read SUIT storage addresses, set during MPI generation - sysbuild_get(SUIT_STORAGE_ADDRESS IMAGE ${DEFAULT_IMAGE} VAR SUIT_STORAGE_ADDRESS CACHE) if(DEFINED SUIT_STORAGE_ADDRESS) list(APPEND STORAGE_BOOT_ARGS --storage-address ${SUIT_STORAGE_ADDRESS}) else() @@ -481,7 +577,7 @@ function(suit_create_package) --storage-output-directory "${DEFAULT_BINARY_DIR}/zephyr" --zephyr-base ${ZEPHYR_BASE} - --config-file "${DEFAULT_BINARY_DIR}/zephyr/.config" + --config-file "${PROJECT_BINARY_DIR}/.config" ${CORE_ARGS} ) set_property( @@ -505,9 +601,9 @@ function(suit_setup_merge) foreach(image ${IMAGES}) set(ARTIFACTS_TO_MERGE) - unset(CONFIG_NRF_REGTOOL_GENERATE_UICR) - sysbuild_get(CONFIG_NRF_REGTOOL_GENERATE_UICR IMAGE ${image} VAR CONFIG_NRF_REGTOOL_GENERATE_UICR KCONFIG) - if(NOT DEFINED CONFIG_NRF_REGTOOL_GENERATE_UICR) + unset(regtool_generate_uicr) + sysbuild_get(regtool_generate_uicr IMAGE ${image} VAR CONFIG_NRF_REGTOOL_GENERATE_UICR KCONFIG) + if(NOT DEFINED regtool_generate_uicr) continue() endif() @@ -528,10 +624,15 @@ function(suit_setup_merge) list(APPEND ARTIFACTS_TO_MERGE ${IMAGE_BINARY_DIR}/zephyr/${IMAGE_BINARY_FILE}.hex) list(APPEND ARTIFACTS_TO_MERGE ${IMAGE_BINARY_DIR}/zephyr/uicr.hex) - unset(CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE) - sysbuild_get(CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE IMAGE ${image} VAR CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE KCONFIG) - if(CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE) - list(APPEND ARTIFACTS_TO_MERGE ${BINARY_DIR}/zephyr/suit_mpi_${IMAGE_TARGET_NAME}_merged.hex) + # Get a list of files (and their dependencies) which need merging into the uicr merged file + # and add them at the end of the list, allowing for overwriting + unset(merge_files) + unset(merge_dependencies) + get_property(merge_files GLOBAL PROPERTY SUIT_MERGE_${IMAGE_TARGET_NAME}_FILE) + get_property(merge_dependencies GLOBAL PROPERTY SUIT_MERGE_${IMAGE_TARGET_NAME}_DEPENDENCIES) + if(NOT DEFINED merge_files) + set(merge_files) + set(merge_dependencies) endif() set_property( @@ -539,11 +640,12 @@ function(suit_setup_merge) COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/mergehex.py --overlap replace -o ${OUTPUT_HEX_FILE} - ${ARTIFACTS_TO_MERGE} + ${ARTIFACTS_TO_MERGE} ${merge_files} + DEPENDS ${merge_dependencies} # fixme: uicr_merged is overwritten by new content, runners_yaml_props_target could be used to define # what shall be flashed, but not sure where to set this! Remove --overlap if ready! # example usage: set_property(TARGET runners_yaml_props_target PROPERTY hex_file ${merged_hex_file}) - COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT_HEX_FILE} ${IMAGE_BINARY_DIR}/zephyr/uicr_merged.hex + COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT_HEX_FILE} ${IMAGE_BINARY_DIR}/zephyr/uicr_merged.hex ) endforeach() endfunction() diff --git a/cmake/sysbuild/suit_provisioning.cmake b/cmake/sysbuild/suit_provisioning.cmake new file mode 100644 index 000000000000..52c802cfb1d2 --- /dev/null +++ b/cmake/sysbuild/suit_provisioning.cmake @@ -0,0 +1,238 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +set(SUIT_GENERATOR_CLI_SCRIPT "${ZEPHYR_SUIT_GENERATOR_MODULE_DIR}/suit_generator/cli.py") +sysbuild_get(DEFAULT_BINARY_DIR IMAGE ${DEFAULT_IMAGE} VAR APPLICATION_BINARY_DIR CACHE) +set(MPI_BINARY_DIR ${DEFAULT_BINARY_DIR}/zephyr) + +# Usage: +# configure_storage_address_cache() +# +# Store the absolute address of the SUIT storage inside CMake cache. +# +function(configure_storage_address_cache) + sysbuild_dt_nodelabel( + suit_storage_dev + IMAGE + ${DEFAULT_IMAGE} + NODELABEL + "suit_storage_partition" + ) + + if(NOT DEFINED suit_storage_dev) + message(WARNING "Unable to read SUIT storage address from DTS - nodes undefined") + return() + endif() + + # Calculate SUIT storage address, based on the DTS + sysbuild_dt_reg_addr( + suit_storage_address + IMAGE + ${DEFAULT_IMAGE} + PATH + "${suit_storage_dev}" + ) + + set(SUIT_STORAGE_ADDRESS ${suit_storage_address} CACHE STRING "SUIT storage address") +endfunction() + +# Usage: +# generate_mpi_hex() +# +# Will generate HEX file for a single manifest role, based on Kconfigs defined by the template. +# +# : The role that was used to generate a set of Kconfigs, defined by the +# Kconfig.template.manifest_config. +# +# Required Kconfigs: +# - SUIT_MPI__VENDOR_NAME +# - SUIT_MPI__CLASS_NAME +# - SUIT_MPI__OFFSET +# - SUIT_MPI__PATH +# - SUIT_MPI_SLOT_SIZE +# +function(generate_mpi_hex manifest_role) + set(generate_args "") + set(descr_args "") + + if(NOT DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}) + return() + endif() + + if((NOT DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_VENDOR_NAME) OR + (NOT DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_CLASS_NAME) OR + (NOT DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_OFFSET) OR + (NOT DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_PATH) OR + (NOT DEFINED SB_CONFIG_SUIT_MPI_SLOT_SIZE) + ) + message(FATAL_ERROR "Malformed configuration for: ${manifest_role}") + return() + endif() + + if(SB_CONFIG_SUIT_MPI_${manifest_role}_VENDOR_NAME STREQUAL "nordicsemi.com") + message(WARNING " + ----------------------------------------------------------- + --- WARNING: Using default Vendor ID (nordicsemi.com). --- + --- It should not be used for production. --- + --- See SB_CONFIG_SUIT_MPI_${manifest_role}_VENDOR_NAME \t--- + --- and SB_CONFIG_SUIT_MPI_${manifest_role}_CLASS_NAME \t--- + ----------------------------------------------------------- + \n" + ) + endif() + + MATH( + EXPR + SUIT_MPI_${manifest_role}_ADDRESS + "${SUIT_STORAGE_ADDRESS} + + ${SB_CONFIG_SUIT_MPI_${manifest_role}_OFFSET}" + OUTPUT_FORMAT HEXADECIMAL + ) + + list(APPEND generate_args + --vendor-name ${SB_CONFIG_SUIT_MPI_${manifest_role}_VENDOR_NAME} + --class-name ${SB_CONFIG_SUIT_MPI_${manifest_role}_CLASS_NAME} + --address ${SUIT_MPI_${manifest_role}_ADDRESS} + --size ${SB_CONFIG_SUIT_MPI_SLOT_SIZE} + --output-file ${SB_CONFIG_SUIT_MPI_${manifest_role}_PATH} + ) + + list(APPEND descr_args + ${SB_CONFIG_SUIT_MPI_${manifest_role}_PATH} + ${SB_CONFIG_SUIT_MPI_${manifest_role}_VENDOR_NAME} + ${SB_CONFIG_SUIT_MPI_${manifest_role}_CLASS_NAME} + "address=${SUIT_MPI_${manifest_role}_ADDRESS}" + ) + + if(DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_DOWNGRADE_PREVENTION) + list(APPEND generate_args + --downgrade-prevention-enabled + ) + list(APPEND descr_args + downgrade-prevention-enabled + ) + endif() + + if(DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_INDEPENDENT_UPDATE) + list(APPEND generate_args + --independent-updates + ) + list(APPEND descr_args + "independent updates" + ) + endif() + + if(DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_SIGNATURE_CHECK_ENABLED_ON_UPDATE) + list(APPEND generate_args + --signature-verification update + ) + list(APPEND descr_args + "signed updates" + ) + elseif(DEFINED SB_CONFIG_SUIT_MPI_${manifest_role}_SIGNATURE_CHECK_ENABLED_ON_UPDATE_AND_BOOT) + list(APPEND generate_args + --signature-verification update-and-boot + ) + list(APPEND descr_args + "signed updates" + "signed boot" + ) + endif() + + add_custom_target( + create_suit_mpi_${manifest_role} + COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} + mpi + generate + ${generate_args} + BYPRODUCTS ${SB_CONFIG_SUIT_MPI_${manifest_role}_PATH} + COMMENT "Create SUIT artifacts" + ) + message(INFO " Generate MPI for ${manifest_role} manifest (${descr_args})") +endfunction() + +# Usage: +# generate_mpi_area( [...]) +# +# Will generate HEX file for an MPI area attached to a single domain. +# At the end of the merging process, a digest of the resulting binary will be +# calculated and appended at the end of it. +# +# : Name of the area. A valid area must define output file path, address and size. +# : The role that was used to generate a set of Kconfigs, defined by the +# Kconfig.template.manifest_config. +# Used to extract the HEX file path containing the MPI configuration. +# +# Required Kconfigs: +# - SUIT_MPI__PATH +# - SUIT_MPI__OFFSET +# - SUIT_MPI__SIZE +# - SUIT_MPI__PATH +# +function (generate_mpi_area area) + set(merge_args "") + set(dependencies "") + + if((NOT DEFINED SB_CONFIG_SUIT_MPI_${area}_PATH) OR + (NOT DEFINED SB_CONFIG_SUIT_MPI_${area}_OFFSET) OR + (NOT DEFINED SB_CONFIG_SUIT_MPI_${area}_SIZE) + ) + message(FATAL_ERROR "Malformed configuration for: ${area}") + return() + endif() + + # Calculate the absolute address of the MPI area. + MATH( + EXPR + SUIT_MPI_${area}_ADDRESS + "${SUIT_STORAGE_ADDRESS} + + ${SB_CONFIG_SUIT_MPI_${area}_OFFSET}" + OUTPUT_FORMAT HEXADECIMAL + ) + + set(output ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_${area}_PATH}) + set(address ${SUIT_MPI_${area}_ADDRESS}) + set(size ${SB_CONFIG_SUIT_MPI_${area}_SIZE}) + + list(APPEND merge_args + --output-file ${output} + --address ${address} + --size ${size} + ) + + foreach(role ${ARGN}) + if(NOT DEFINED SB_CONFIG_SUIT_MPI_${role}_PATH) + continue() + endif() + + list(APPEND merge_args "--file" "${SB_CONFIG_SUIT_MPI_${role}_PATH}") + list(APPEND dependencies "${SB_CONFIG_SUIT_MPI_${role}_PATH}") + endforeach() + + add_custom_target( + create_suit_mpi_area_${area} + ALL + COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} + mpi + merge + ${merge_args} + DEPENDS ${dependencies} + BYPRODUCTS ${output} + COMMENT "Create SUIT artifacts" + ) + + message(INFO " Generate merged MPI for ${area} (${output})") +endfunction() + +if(DEFINED SB_CONFIG_SOC_SERIES_NRF54HX) + configure_storage_address_cache() +endif() # SB_CONFIG_SOC_SERIES_NRF54HX + +if(DEFINED SB_CONFIG_SUIT_MPI_GENERATE) + if(DEFINED SB_CONFIG_SUIT_MPI_SOC_NRF54H20) + include(${CMAKE_CURRENT_LIST_DIR}/suit_provisioning_nrf54h20.cmake) + endif() # SB_CONFIG_SUIT_MPI_SOC_NRF54H20 +endif() # SB_CONFIG_SUIT_MPI_GENERATE diff --git a/cmake/sysbuild/suit_provisioning_nrf54h20.cmake b/cmake/sysbuild/suit_provisioning_nrf54h20.cmake new file mode 100644 index 000000000000..743ced78e575 --- /dev/null +++ b/cmake/sysbuild/suit_provisioning_nrf54h20.cmake @@ -0,0 +1,47 @@ +# +# Copyright (c) 2024 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +include(${CMAKE_CURRENT_LIST_DIR}/suit_utilities.cmake) + +# List all manifest roles. +# The function internally checks if the enabling symbol is defined. +# If role is enabled, the function verifies if all required options are defined. + +generate_mpi_hex(ROOT) +generate_mpi_hex(APP_RECOVERY) +generate_mpi_hex(APP_LOCAL_1) +generate_mpi_hex(APP_LOCAL_2) +generate_mpi_hex(APP_LOCAL_3) +generate_mpi_area( + APP_AREA + ROOT + APP_RECOVERY + APP_LOCAL_1 + APP_LOCAL_2 + APP_LOCAL_3 +) + +generate_mpi_hex(RAD_RECOVERY) +generate_mpi_hex(RAD_LOCAL_1) +generate_mpi_hex(RAD_LOCAL_2) +generate_mpi_area( + RAD_AREA + RAD_RECOVERY + RAD_LOCAL_1 + RAD_LOCAL_2 +) + +if(SB_CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE) + suit_add_merge_hex_file( + FILES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_APP_AREA_PATH} + DEPENDENCIES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_APP_AREA_PATH} + TARGET "application" + ) + suit_add_merge_hex_file( + FILES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_RAD_AREA_PATH} + DEPENDENCIES ${MPI_BINARY_DIR}/${SB_CONFIG_SUIT_MPI_RAD_AREA_PATH} + TARGET "radio" + ) +endif() diff --git a/cmake/sysbuild/suit_utilities.cmake b/cmake/sysbuild/suit_utilities.cmake index 9acdbc639c02..f3725a89db33 100644 --- a/cmake/sysbuild/suit_utilities.cmake +++ b/cmake/sysbuild/suit_utilities.cmake @@ -8,6 +8,12 @@ set(SUIT_GENERATOR_BUILD_SCRIPT "${ZEPHYR_SUIT_GENERATOR_MODULE_DIR}/ncs/build.p set(SUIT_GENERATOR_CLI_SCRIPT "${ZEPHYR_SUIT_GENERATOR_MODULE_DIR}/suit_generator/cli.py") set(SUIT_OUTPUT_ARTIFACTS_DIRECTORY "DFU") +if(WIN32) + set(SEP $) +else() + set(SEP :) +endif() + if(NOT DEFINED SUIT_ROOT_DIRECTORY) set(SUIT_ROOT_DIRECTORY ${APPLICATION_BINARY_DIR}/${SUIT_OUTPUT_ARTIFACTS_DIRECTORY}/) endif() @@ -69,7 +75,7 @@ endfunction() # 'input_file' - path to input yaml configuration # 'output_file' - path to output binary suit envelope # 'create_signature' - sign the envelope if set to true -function(suit_create_envelope input_file output_file create_signature) +function(suit_create_envelope input_file output_file) set_property( GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} @@ -78,20 +84,26 @@ function(suit_create_envelope input_file output_file create_signature) --output-file ${output_file} BYPRODUCTS ${output_file} ) - - if (create_signature AND SB_CONFIG_SUIT_ENVELOPE_SIGN_SCRIPT) - suit_sign_envelope(${output_file} ${output_file}) - endif() endfunction() +# Create a SUIT DFU cache partition file from a list of payloads. +# +# Usage: +# suit_create_cache_partition( ) +# +# Parameters: +# 'args' - list of arguments for the cache_create command +# 'output_file' - path to output cache partition file +# 'partition_num' - partition number +# 'recovery' - if set to true, the cache partition contains recovery firmware payloads function(suit_create_cache_partition args output_file partition_num recovery) - list(APPEND args "--output-file" "${output_file}") set_property( GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} cache_create + from_payloads ${args} BYPRODUCTS ${output_file} ) @@ -108,3 +120,115 @@ function(suit_create_cache_partition args output_file partition_num recovery) "${output_file_name}type=cache;${output_file_name}partition=${partition_num};") endif() endfunction() + +# Create a SUIT DFU cache partition with Nordic proprietary payloads +# extracted from the top-level SUIT envelope. +# +# Usage: +# suit_create_nordic_cache_partition( ) +# +# Parameters: +# 'args' - list of arguments for the cache_create command +# 'output_file' - path to output cache partition file +function(suit_create_nordic_cache_partition args output_file) + list(APPEND args "--output-file" "${output_file}") + list(APPEND args "--omit-payload-regex" "'(?!.*secdom.*\.bin|.*sysctl_v.*\.bin).*'") + list(APPEND args "--dependency-regex" "'(#top|#secdom|#sysctrl)'") + + set_property( + GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS + COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} + cache_create + from_envelope + ${args} + BYPRODUCTS ${output_file} + ) +endfunction() + +# Usage: +# suit_add_merge_hex_file(FILES [DEPENDENCIES ] [TARGET ] +# +# Add files which should be merged into the uicr_merged.hex output file, respecting any +# dependencies that need to be generated before hand. This will overwrite existing data if it is +# present in other files +function(suit_add_merge_hex_file) + cmake_parse_arguments(arg "" "TARGET" "FILES;DEPENDENCIES" ${ARGN}) + zephyr_check_arguments_required(${CMAKE_CURRENT_FUNCTION} arg FILES) + + if(DEFINED arg_TARGET) + set_property(GLOBAL APPEND PROPERTY SUIT_MERGE_${arg_TARGET}_FILE ${arg_FILES}) + set_property(GLOBAL APPEND PROPERTY SUIT_MERGE_${arg_TARGET}_DEPENDENCIES ${arg_DEPENDENCIES}) + else() + set_property(GLOBAL APPEND PROPERTY SUIT_MERGE_application_FILE ${arg_FILES}) + set_property(GLOBAL APPEND PROPERTY SUIT_MERGE_application_DEPENDENCIES ${arg_DEPENDENCIES}) +endif() +endfunction() + +# Create SUIT encryption artifacts for a given image. +# +# Usage: +# suit_encrypt_image( ) +# +# Parameters: +# 'args' - list of arguments for the encryption script +# 'output_directory' - path to a directory where the encryption artifacts will be stored +function(suit_encrypt_image args output_directory) + get_property( + encrypt_script + GLOBAL PROPERTY + SUIT_ENCRYPT_SCRIPT + ) + # If the user has not provided the path to the encrypt script, use the default one. + if(NOT encrypt_script) + set(encrypt_script "${ZEPHYR_SUIT_GENERATOR_MODULE_DIR}/ncs/encrypt_script.py") + endif() + + if(NOT EXISTS ${encrypt_script}) + message(SEND_ERROR "DFU: Encrypt script ${encrypt_script} does not exist. Corrupted configuration?") + return() + endif() + + list(APPEND args --output-dir ${output_directory}) + list(APPEND args --encrypt-script ${encrypt_script}) + + set_property( + GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS + COMMAND ${CMAKE_COMMAND} -E make_directory ${output_directory} + ) + + set_property( + GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS + COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} + encrypt + encrypt-and-generate + ${args} + ) +endfunction() + +# Sign an envelope using the sign script. +# +# Usage: +# suit_sign_envelope( ) +# +# Parameters: +# 'input_file' - path to input unsigned envelope +# 'output_file' - path to output signed envelope +# 'args' - list of other arguments for the sign script +# 'sign_script_path' - path to the sign script +function(suit_sign_envelope input_file output_file args sign_script_path) + if(NOT EXISTS ${sign_script_path}) + message(SEND_ERROR "DFU: Sign script ${sign_script_path} does not exist. Corrupted configuration?") + return() + endif() + list(APPEND args "--input-envelope" "${input_file}") + list(APPEND args "--output-envelope" "${output_file}") + list(APPEND args "--sign-script" "${sign_script_path}") + + set_property( + GLOBAL APPEND PROPERTY SUIT_POST_BUILD_COMMANDS + COMMAND ${PYTHON_EXECUTABLE} ${SUIT_GENERATOR_CLI_SCRIPT} + sign + single-level + ${args} + ) +endfunction() diff --git a/cmake/sysbuild/zip.cmake b/cmake/sysbuild/zip.cmake index aadc580eb2e6..f21a3a9bd1c3 100644 --- a/cmake/sysbuild/zip.cmake +++ b/cmake/sysbuild/zip.cmake @@ -37,6 +37,11 @@ function(dfu_app_zip_package) if(NOT SB_CONFIG_MCUBOOT_BUILD_DIRECT_XIP_VARIANT) # Application + math(EXPR internal_slot_primary "${internal_slot_primary} + 1") + math(EXPR internal_slot_secondary "${internal_slot_secondary} + 1") + math(EXPR external_slot_primary "${external_slot_primary} + 1") + math(EXPR external_slot_secondary "${external_slot_secondary} + 1") + set(generate_script_app_params "${app_internal_update_name}load_address=$" "${app_internal_update_name}image_index=${SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER}" @@ -109,6 +114,9 @@ function(dfu_app_zip_package) if(NOT SB_CONFIG_MCUBOOT_BUILD_DIRECT_XIP_VARIANT) # Application + math(EXPR slot_primary "${slot_primary} + 1") + math(EXPR slot_secondary "${slot_secondary} + 1") + set(generate_script_app_params "${app_update_name}load_address=$" "${app_update_name}image_index=${SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER}" @@ -166,6 +174,8 @@ function(dfu_app_zip_package) mcuboot_image_number_to_slot(net_update_slot_primary ${SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER} n) mcuboot_image_number_to_slot(net_update_slot_secondary ${SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER} y) + math(EXPR net_update_slot_primary "${net_update_slot_primary} + 1") + math(EXPR net_update_slot_secondary "${net_update_slot_secondary} + 1") set(generate_script_app_params ${generate_script_app_params} @@ -186,6 +196,8 @@ function(dfu_app_zip_package) # nRF7x Wifi patch mcuboot_image_number_to_slot(nrf70_patches_slot_primary ${SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER} n) mcuboot_image_number_to_slot(nrf70_patches_slot_secondary ${SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER} y) + math(EXPR nrf70_patches_slot_primary "${nrf70_patches_slot_primary} + 1") + math(EXPR nrf70_patches_slot_secondary "${nrf70_patches_slot_secondary} + 1") list(APPEND generate_script_app_params "nrf70.binimage_index=${SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER}" diff --git a/cmake/version_app.cmake b/cmake/version_app.cmake index e2a2f7bd9ebd..7fe36542e512 100644 --- a/cmake/version_app.cmake +++ b/cmake/version_app.cmake @@ -9,7 +9,7 @@ if(${APP_VERSION_NUMBER}) if(GIT_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --absolute-git-dir - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + WORKING_DIRECTORY ${APPLICATION_SOURCE_DIR} OUTPUT_VARIABLE app_git_dir OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE @@ -32,9 +32,9 @@ if(${APP_VERSION_NUMBER}) COMMAND ${CMAKE_COMMAND} -DZEPHYR_BASE=${ZEPHYR_BASE} -DNRF_DIR=${NRF_DIR} -DOUT_FILE=${PROJECT_BINARY_DIR}/include/generated/app_commit.h -DCOMMIT_TYPE=APP - -DCOMMIT_PATH=${CMAKE_SOURCE_DIR} + -DCOMMIT_PATH=${APPLICATION_SOURCE_DIR} -P ${ZEPHYR_NRF_MODULE_DIR}/cmake/gen_commit_h.cmake - DEPENDS ${CMAKE_SOURCE_DIR}/VERSION ${APP_GIT_INDEX} + DEPENDS ${APPLICATION_SOURCE_DIR}/VERSION ${APP_GIT_INDEX} ) add_custom_target(app_commit_h DEPENDS ${PROJECT_BINARY_DIR}/include/generated/app_commit.h) add_dependencies(version_h app_commit_h) diff --git a/config/suit/templates/nrf54h20/default/v1/app_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/app_envelope.yaml.jinja2 index d47f93979790..0e447e040954 100644 --- a/config/suit/templates/nrf54h20/default/v1/app_envelope.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/default/v1/app_envelope.yaml.jinja2 @@ -1,5 +1,12 @@ -{%- set mpi_application_vendor_name = application['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_application_class_name = application['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} +{%- set mpi_application_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_application_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} +{%- set suit_artifacts_base_dir = ( application['binary'].split('/')[:-1] | join('/') ) %} +{%- if 'CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT' in application['config'] and application['config']['CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT'] != '' %} + {%- set encrypted = True %} + {%- set app_encryption_dir = ( suit_artifacts_base_dir ) + "/" + ( application['name'] ) + "_encryption_artifacts" %} +{%- else %} + {%- set encrypted = False %} +{%- endif %} SUIT_Envelope_Tagged: suit-authentication-wrapper: SuitDigest: @@ -33,9 +40,17 @@ SUIT_Envelope_Tagged: suit-parameter-image-digest: suit-digest-algorithm-id: cose-alg-sha-256 suit-digest-bytes: +{%- if encrypted %} + file_direct: {{ app_encryption_dir }}/plain_text_digest.bin +{%- else %} file: {{ application['binary'] }} +{%- endif %} suit-parameter-image-size: +{%- if encrypted %} + file_direct: {{ app_encryption_dir }}/plain_text_size.txt +{%- else %} file: {{ application['binary'] }} +{%- endif %} - suit-condition-vendor-identifier: - suit-send-record-success - suit-send-record-failure @@ -74,12 +89,7 @@ SUIT_Envelope_Tagged: suit-current-version: {{ DEFAULT_VERSION }} {%- endif %} -{%- if application['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Application DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} suit-install: -{%- endif %} - suit-directive-set-component-index: 1 - suit-directive-override-parameters: {%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} @@ -107,6 +117,10 @@ SUIT_Envelope_Tagged: - suit-directive-set-component-index: 0 - suit-directive-override-parameters: suit-parameter-source-component: 1 +{%- if encrypted %} + suit-parameter-encryption-info: + file: {{ app_encryption_dir }}/suit_encryption_info.bin +{%- endif %} # When copying the data it is worth to retry the sequence of # suit-directive-copy and suit-condition-image-match at least once. # If a bit flip occurs, it might be due to a transport issue, not @@ -143,8 +157,21 @@ SUIT_Envelope_Tagged: suit-digest-algorithm-id: cose-alg-sha-256 suit-digest-bytes: file: {{ application['binary'] }} +{%- if encrypted %} + # For the encrypted image this fetch directive is used to verify the tag and the AAD + # of the received encrypted image The target "CAND_IMG" behaves like a /dev/null device + # and all the data is discarded. + # This way even if the encrypted content is incorrect, the contents of the target memory + # will not be affected. + # Note that no digest checking is required on the encrypted content itself, as checking the tag + # and the AAD verifies the integrity of the content. In fact, suit-condition-image-match + # won't be able to work in this case, as the CAND_IMG won't contain any valid content. + suit-parameter-encryption-info: + file: {{ app_encryption_dir }}/suit_encryption_info.bin +{%- endif %} - suit-directive-fetch: - suit-send-record-failure +{%- if not encrypted %} - suit-directive-try-each: - - suit-condition-image-match: - suit-send-record-success @@ -156,6 +183,7 @@ SUIT_Envelope_Tagged: - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure +{%- endif %} suit-manifest-component-id: - INSTLD_MFST diff --git a/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope.yaml.jinja2 deleted file mode 100644 index ab6e6b592555..000000000000 --- a/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope.yaml.jinja2 +++ /dev/null @@ -1,217 +0,0 @@ -{%- set component_index = 0 %} -{%- set component_list = [] %} -{%- set dependencies_list = [] %} -{%- set mpi_app_recovery_vendor_name = application['config']['CONFIG_SUIT_MPI_APP_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_app_recovery_class_name = application['config']['CONFIG_SUIT_MPI_APP_RECOVERY_CLASS_NAME']|default('nRF54H20_app_recovery') %} -{%- set mpi_rad_recovery_vendor_name = application['config']['CONFIG_SUIT_MPI_RAD_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_rad_recovery_class_name = application['config']['CONFIG_SUIT_MPI_RAD_RECOVERY_CLASS_NAME']|default('nRF54H20_rad_recovery') %} -SUIT_Envelope_Tagged: - suit-authentication-wrapper: - SuitDigest: - suit-digest-algorithm-id: cose-alg-sha-256 - suit-manifest: - suit-manifest-version: 1 -{%- if APP_RECOVERY_SEQ_NUM is defined %} - suit-manifest-sequence-number: {{ APP_RECOVERY_SEQ_NUM }} -{%- elif DEFAULT_SEQ_NUM is defined %} - suit-manifest-sequence-number: {{ DEFAULT_SEQ_NUM }} -{%- else %} - suit-manifest-sequence-number: 1 -{%- endif %} - suit-common: - suit-components: - - - CAND_IMG - - 0 - - - CAND_MFST - - 0 - {%- set component_index = 2 %} -{%- if app_recovery is defined %} - {%- set app_img_component_index = component_index %} - {{- component_list.append( app_img_component_index ) or ""}} - - - MEM - - {{ app_recovery['dt'].label2node['cpu'].unit_addr }} - - {{ get_absolute_address(app_recovery['dt'].chosen_nodes['zephyr,code-partition']) }} - - {{ app_recovery['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }} - {%- set component_index = component_index + 1 %} -{%- endif %} -{%- if rad_recovery is defined %} - {%- set rad_instld_mfst_component_index = component_index %} - {{- component_list.append( rad_instld_mfst_component_index ) or ""}} - {{- dependencies_list.append( rad_instld_mfst_component_index ) or ""}} - - - INSTLD_MFST - - RFC4122_UUID: - namespace: {{ mpi_rad_recovery_vendor_name }} - name: {{ mpi_rad_recovery_class_name }} - {%- set component_index = component_index + 1 %} -{%- endif %} - - suit-shared-sequence: -{%- if rad_recovery is defined %} - - suit-directive-set-component-index: {{ rad_instld_mfst_component_index }} - - suit-directive-override-parameters: - suit-parameter-vendor-identifier: - RFC4122_UUID: {{ mpi_app_recovery_vendor_name }} - suit-parameter-class-identifier: - RFC4122_UUID: - namespace: {{ mpi_app_recovery_vendor_name }} - name: {{ mpi_app_recovery_class_name }} -{%- endif %} -{%- if app_recovery is defined %} - - suit-directive-set-component-index: {{ app_img_component_index }} - - suit-directive-override-parameters: - suit-parameter-vendor-identifier: - RFC4122_UUID: {{ mpi_app_recovery_vendor_name }} - suit-parameter-class-identifier: - RFC4122_UUID: - namespace: {{ mpi_app_recovery_vendor_name }} - name: {{ mpi_app_recovery_class_name }} - suit-parameter-image-digest: - suit-digest-algorithm-id: cose-alg-sha-256 - suit-digest-bytes: - file: {{ app_recovery['binary'] }} - suit-parameter-image-size: - file: {{ app_recovery['binary'] }} -{%- endif %} - - suit-directive-set-component-index: [{{ component_list|join(',') }}] - - suit-condition-vendor-identifier: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-condition-class-identifier: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - suit-dependencies: - # Key is the index of suit-components that describe the dependency manifest - "1": {} -{%- for component_element in dependencies_list %} - "{{ component_element }}": {} -{%- endfor %} - - suit-validate: -{% if dependencies_list|length > 0 %} - - suit-directive-set-component-index: [{{ dependencies_list|join(',') }}] - - suit-condition-dependency-integrity: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure -{% endif %} -{%- if app_recovery is defined %} - - suit-directive-set-component-index: {{ app_img_component_index }} - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure -{%- endif %} - - suit-invoke: -{% if dependencies_list|length > 0 %} - - suit-directive-set-component-index: [{{ dependencies_list|join(',') }}] - - suit-condition-dependency-integrity: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure -{% endif %} -{%- if app_recovery is defined %} - - suit-directive-set-component-index: {{ app_img_component_index }} - - suit-directive-invoke: - - suit-send-record-failure -{%- endif %} - -{%- if APP_RECOVERY_VERSION is defined %} - suit-current-version: {{ APP_RECOVERY_VERSION }} -{%- elif DEFAULT_VERSION is defined %} - suit-current-version: {{ DEFAULT_VERSION }} -{%- endif %} - -{%- if application['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Application DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} - suit-install: -{%- endif %} -{%- if rad_recovery is defined %} - - suit-directive-set-component-index: 1 - - suit-directive-override-parameters: - suit-parameter-uri: '#{{ rad_recovery['name'] }}' - suit-parameter-image-digest: - suit-digest-algorithm-id: cose-alg-sha-256 - suit-digest-bytes: - envelope: {{ artifacts_folder ~ rad_recovery['name'] }}.suit - - suit-directive-fetch: - - suit-send-record-failure - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-condition-dependency-integrity: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure -{%- endif %} -{%- if app_recovery is defined %} - - suit-directive-set-component-index: 0 - - suit-directive-override-parameters: -{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in app_recovery['config'] and app_recovery['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} - suit-parameter-uri: '{{ app_recovery['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' -{%- else %} - suit-parameter-uri: '#{{ app_recovery['name'] }}' -{%- endif %} - suit-parameter-image-digest: - suit-digest-algorithm-id: cose-alg-sha-256 - suit-digest-bytes: - file: {{ app_recovery['binary'] }} - - suit-directive-fetch: - - suit-send-record-failure - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-set-component-index: {{ app_img_component_index }} - - suit-directive-override-parameters: - suit-parameter-source-component: 0 - - suit-directive-copy: - - suit-send-record-failure - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure -{%- endif %} - suit-manifest-component-id: - - INSTLD_MFST - - RFC4122_UUID: - namespace: {{ mpi_app_recovery_vendor_name }} - name: {{ mpi_app_recovery_class_name }} - suit-integrated-dependencies: -{%- if rad_recovery is defined %} - '#{{ rad_recovery['name'] }}': {{ artifacts_folder ~ rad_recovery['name'] }}.suit -{%- endif %} -{%- if app_recovery is defined %} -{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in app_recovery['config'] or app_recovery['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %} - '#{{ app_recovery['name'] }}': {{ app_recovery['binary'] }} -{%- endif %} -{%- endif %} \ No newline at end of file diff --git a/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope_app_local.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope_app_local.yaml.jinja2 new file mode 100644 index 000000000000..1d6ece68ae2b --- /dev/null +++ b/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope_app_local.yaml.jinja2 @@ -0,0 +1,189 @@ +{%- set component_index = 0 %} +{%- set component_list = [] %} +{%- set dependencies_list = [] %} +{%- set mpi_app_recovery_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_app_recovery_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_RECOVERY_CLASS_NAME']|default('nRF54H20_app_recovery') %} +{%- set mpi_rad_recovery_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_rad_recovery_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_RECOVERY_CLASS_NAME']|default('nRF54H20_rad_recovery') %} +{%- set mpi_app_recovery_local_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_3_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_app_recovery_local_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_3_CLASS_NAME']|default('nRF54H20_sample_app_2') %} +SUIT_Envelope_Tagged: + suit-authentication-wrapper: + SuitDigest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-manifest: + suit-manifest-version: 1 +{%- if APP_RECOVERY_SEQ_NUM is defined %} + suit-manifest-sequence-number: {{ APP_RECOVERY_SEQ_NUM }} +{%- elif DEFAULT_SEQ_NUM is defined %} + suit-manifest-sequence-number: {{ DEFAULT_SEQ_NUM }} +{%- else %} + suit-manifest-sequence-number: 1 +{%- endif %} + suit-common: + suit-components: + {%- set component_index = 0 %} + - - CAND_MFST + - 0 + {%- set component_index = component_index + 1 %} +{%- if app_recovery_img is defined %} + {%- set app_recovery_local_instld_mfst_component_index = component_index %} + {{- component_list.append( app_recovery_local_instld_mfst_component_index ) or ""}} + {{- dependencies_list.append( app_recovery_local_instld_mfst_component_index ) or ""}} + - - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_app_recovery_local_vendor_name }} + name: {{ mpi_app_recovery_local_class_name }} + {%- set component_index = component_index + 1 %} +{%- endif %} +{%- if rad_recovery is defined %} + {%- set rad_instld_mfst_component_index = component_index %} + {{- component_list.append( rad_instld_mfst_component_index ) or ""}} + {{- dependencies_list.append( rad_instld_mfst_component_index ) or ""}} + - - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_rad_recovery_vendor_name }} + name: {{ mpi_rad_recovery_class_name }} + {%- set component_index = component_index + 1 %} +{%- endif %} + + suit-shared-sequence: +{%- if rad_recovery is defined %} + - suit-directive-set-component-index: {{ rad_instld_mfst_component_index }} + - suit-directive-override-parameters: + suit-parameter-vendor-identifier: + RFC4122_UUID: {{ mpi_app_recovery_vendor_name }} + suit-parameter-class-identifier: + RFC4122_UUID: + namespace: {{ mpi_app_recovery_vendor_name }} + name: {{ mpi_app_recovery_class_name }} +{%- endif %} +{%- if app_recovery_img is defined %} + - suit-directive-set-component-index: {{ app_recovery_local_instld_mfst_component_index }} + - suit-directive-override-parameters: + suit-parameter-vendor-identifier: + RFC4122_UUID: {{ mpi_app_recovery_local_vendor_name }} + suit-parameter-class-identifier: + RFC4122_UUID: + namespace: {{ mpi_app_recovery_local_vendor_name }} + name: {{ mpi_app_recovery_class_name }} +{%- endif %} + - suit-directive-set-component-index: [{{ component_list|join(',') }}] + - suit-condition-vendor-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-condition-class-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + suit-dependencies: + # Key is the index of suit-components that describe the dependency manifest + "0": {} +{%- for component_element in dependencies_list %} + "{{ component_element }}": {} +{%- endfor %} + + suit-validate: +{% if dependencies_list|length > 0 %} + - suit-directive-set-component-index: [{{ dependencies_list|join(',') }}] + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{% endif %} + + suit-invoke: +{% if dependencies_list|length > 0 %} + - suit-directive-set-component-index: [{{ dependencies_list|join(',') }}] + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{% endif %} + +{%- if APP_RECOVERY_VERSION is defined %} + suit-current-version: {{ APP_RECOVERY_VERSION }} +{%- elif DEFAULT_VERSION is defined %} + suit-current-version: {{ DEFAULT_VERSION }} +{%- endif %} + + suit-install: +{%- if rad_recovery is defined %} + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ rad_recovery['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ rad_recovery['name'] }}.suit + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} +{%- if app_recovery_img is defined %} + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ app_recovery_img['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ app_recovery_img['name'] }}.suit + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} + suit-manifest-component-id: + - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_app_recovery_vendor_name }} + name: {{ mpi_app_recovery_class_name }} + suit-integrated-dependencies: +{%- if rad_recovery is defined %} + '#{{ rad_recovery['name'] }}': {{ artifacts_folder ~ rad_recovery['name'] }}.suit +{%- endif %} +{%- if app_recovery_img is defined %} + '#{{ app_recovery_img['name'] }}': {{ artifacts_folder ~ app_recovery_img['name'] }}.suit +{%- endif %} \ No newline at end of file diff --git a/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope_direct.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope_direct.yaml.jinja2 new file mode 100644 index 000000000000..5b996a62f4e3 --- /dev/null +++ b/config/suit/templates/nrf54h20/default/v1/app_recovery_envelope_direct.yaml.jinja2 @@ -0,0 +1,214 @@ +{%- set component_index = 0 %} +{%- set component_list = [] %} +{%- set dependencies_list = [] %} +{%- set mpi_app_recovery_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_app_recovery_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_RECOVERY_CLASS_NAME']|default('nRF54H20_app_recovery') %} +{%- set mpi_rad_recovery_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_rad_recovery_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_RECOVERY_CLASS_NAME']|default('nRF54H20_rad_recovery') %} +SUIT_Envelope_Tagged: + suit-authentication-wrapper: + SuitDigest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-manifest: + suit-manifest-version: 1 +{%- if APP_RECOVERY_SEQ_NUM is defined %} + suit-manifest-sequence-number: {{ APP_RECOVERY_SEQ_NUM }} +{%- elif DEFAULT_SEQ_NUM is defined %} + suit-manifest-sequence-number: {{ DEFAULT_SEQ_NUM }} +{%- else %} + suit-manifest-sequence-number: 1 +{%- endif %} + suit-common: + suit-components: + {%- set component_index = 0 %} + - - CAND_IMG + - 0 + {%- set component_index = component_index + 1 %} + - - CAND_MFST + - 0 + {%- set component_index = component_index + 1 %} +{%- if app_recovery_img is defined %} + {%- set app_img_component_index = component_index %} + {{- component_list.append( app_img_component_index ) or ""}} + - - MEM + - {{ app_recovery_img['dt'].label2node['cpu'].unit_addr }} + - {{ get_absolute_address(app_recovery_img['dt'].chosen_nodes['zephyr,code-partition']) }} + - {{ app_recovery_img['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }} + {%- set component_index = component_index + 1 %} +{%- endif %} +{%- if rad_recovery is defined %} + {%- set rad_instld_mfst_component_index = component_index %} + {{- component_list.append( rad_instld_mfst_component_index ) or ""}} + {{- dependencies_list.append( rad_instld_mfst_component_index ) or ""}} + - - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_rad_recovery_vendor_name }} + name: {{ mpi_rad_recovery_class_name }} + {%- set component_index = component_index + 1 %} +{%- endif %} + + suit-shared-sequence: +{%- if rad_recovery is defined %} + - suit-directive-set-component-index: {{ rad_instld_mfst_component_index }} + - suit-directive-override-parameters: + suit-parameter-vendor-identifier: + RFC4122_UUID: {{ mpi_app_recovery_vendor_name }} + suit-parameter-class-identifier: + RFC4122_UUID: + namespace: {{ mpi_app_recovery_vendor_name }} + name: {{ mpi_app_recovery_class_name }} +{%- endif %} +{%- if app_recovery_img is defined %} + - suit-directive-set-component-index: {{ app_img_component_index }} + - suit-directive-override-parameters: + suit-parameter-vendor-identifier: + RFC4122_UUID: {{ mpi_app_recovery_vendor_name }} + suit-parameter-class-identifier: + RFC4122_UUID: + namespace: {{ mpi_app_recovery_vendor_name }} + name: {{ mpi_app_recovery_class_name }} + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ app_recovery_img['binary'] }} + suit-parameter-image-size: + file: {{ app_recovery_img['binary'] }} +{%- endif %} + - suit-directive-set-component-index: [{{ component_list|join(',') }}] + - suit-condition-vendor-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-condition-class-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + suit-dependencies: + # Key is the index of suit-components that describe the dependency manifest + "1": {} +{%- for component_element in dependencies_list %} + "{{ component_element }}": {} +{%- endfor %} + + suit-validate: +{% if dependencies_list|length > 0 %} + - suit-directive-set-component-index: [{{ dependencies_list|join(',') }}] + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{% endif %} +{%- if app_recovery_img is defined %} + - suit-directive-set-component-index: {{ app_img_component_index }} + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} + + suit-invoke: +{% if dependencies_list|length > 0 %} + - suit-directive-set-component-index: [{{ dependencies_list|join(',') }}] + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{% endif %} +{%- if app_recovery_img is defined %} + - suit-directive-set-component-index: {{ app_img_component_index }} + - suit-directive-invoke: + - suit-send-record-failure +{%- endif %} + +{%- if APP_RECOVERY_VERSION is defined %} + suit-current-version: {{ APP_RECOVERY_VERSION }} +{%- elif DEFAULT_VERSION is defined %} + suit-current-version: {{ DEFAULT_VERSION }} +{%- endif %} + + suit-install: +{%- if rad_recovery is defined %} + - suit-directive-set-component-index: 1 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ rad_recovery['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ rad_recovery['name'] }}.suit + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} +{%- if app_recovery_img is defined %} + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: +{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in app_recovery_img['config'] and app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} + suit-parameter-uri: '{{ app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' +{%- else %} + suit-parameter-uri: '#{{ app_recovery_img['name'] }}' +{%- endif %} + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ app_recovery_img['binary'] }} + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-set-component-index: {{ app_img_component_index }} + - suit-directive-override-parameters: + suit-parameter-source-component: 0 + - suit-directive-copy: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} + suit-manifest-component-id: + - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_app_recovery_vendor_name }} + name: {{ mpi_app_recovery_class_name }} + suit-integrated-dependencies: +{%- if rad_recovery is defined %} + '#{{ rad_recovery['name'] }}': {{ artifacts_folder ~ rad_recovery['name'] }}.suit +{%- endif %} +{%- if app_recovery_img is defined %} +{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in app_recovery_img['config'] or app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %} + '#{{ app_recovery_img['name'] }}': {{ app_recovery_img['binary'] }} +{%- endif %} +{%- endif %} \ No newline at end of file diff --git a/config/suit/templates/nrf54h20/default/v1/app_recovery_local_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/app_recovery_local_envelope.yaml.jinja2 new file mode 100644 index 000000000000..0835c401b151 --- /dev/null +++ b/config/suit/templates/nrf54h20/default/v1/app_recovery_local_envelope.yaml.jinja2 @@ -0,0 +1,178 @@ +{%- set mpi_app_recovery_local_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_3_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_app_recovery_local_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_3_CLASS_NAME']|default('nRF54H20_sample_app_3') %} +SUIT_Envelope_Tagged: + suit-authentication-wrapper: + SuitDigest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-manifest: + suit-manifest-version: 1 +{%- if APP_LOCAL_3_SEQ_NUM is defined %} + suit-manifest-sequence-number: {{ APP_LOCAL_3_SEQ_NUM }} +{%- elif DEFAULT_SEQ_NUM is defined %} + suit-manifest-sequence-number: {{ DEFAULT_SEQ_NUM }} +{%- else %} + suit-manifest-sequence-number: 1 +{%- endif %} + suit-common: + suit-components: + - - MEM + - {{ app_recovery_img['dt'].label2node['cpu'].unit_addr }} + - {{ get_absolute_address(app_recovery_img['dt'].chosen_nodes['zephyr,code-partition']) }} + - {{ app_recovery_img['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }} + - - CAND_IMG + - 0 + suit-shared-sequence: + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-vendor-identifier: + RFC4122_UUID: {{ mpi_app_recovery_local_vendor_name }} + suit-parameter-class-identifier: + RFC4122_UUID: + namespace: {{ mpi_app_recovery_local_vendor_name }} + name: {{ mpi_app_recovery_local_class_name }} + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ app_recovery_img['binary'] }} + suit-parameter-image-size: + file: {{ app_recovery_img['binary'] }} + - suit-condition-vendor-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-condition-class-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + suit-validate: + - suit-directive-set-component-index: 0 + # In the case of streaming operations it is worth to retry them at least once. + # This increases the robustness against bit flips on the transport, + # for example when storing the data on an external memory device. + # The suit-directive-try-each will complete on the first successful subsequence. + - suit-directive-try-each: + - - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + suit-invoke: + - suit-directive-set-component-index: 0 +{%- if 'CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP' in app_recovery_img['config'] and app_recovery_img['config'][CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP] != '' %} + - suit-directive-override-parameters: + suit-parameter-invoke-args: + suit-synchronous-invoke: True + suit-timeout: 5000 +{%- endif %} + - suit-directive-invoke: + - suit-send-record-failure + +{%- if APP_LOCAL_3_VERSION is defined %} + suit-current-version: {{ APP_LOCAL_3_VERSION }} +{%- elif DEFAULT_VERSION is defined %} + suit-current-version: {{ DEFAULT_VERSION }} +{%- endif %} + + suit-install: + - suit-directive-set-component-index: 1 + - suit-directive-override-parameters: +{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in app_recovery_img['config'] and app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} + suit-parameter-uri: '{{ app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' +{%- else %} + suit-parameter-uri: '#{{ app_recovery_img['name'] }}' +{%- endif %} + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ app_recovery_img['binary'] }} + - suit-directive-fetch: + - suit-send-record-failure + - suit-directive-try-each: + - - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-source-component: 1 + # When copying the data it is worth to retry the sequence of + # suit-directive-copy and suit-condition-image-match at least once. + # If a bit flip occurs, it might be due to a transport issue, not + # a corrupted candidate image. In this case the bit flip is recoverable + # and it is worth retrying the operation. + # The suit-directive-try-each will complete on the first successful subsequence. + - suit-directive-try-each: + - - suit-directive-copy: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - - suit-directive-copy: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + suit-text: + suit-digest-algorithm-id: cose-alg-sha-256 + + suit-candidate-verification: + - suit-directive-set-component-index: 1 + - suit-directive-override-parameters: +{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in app_recovery_img['config'] and app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} + suit-parameter-uri: '{{ app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' +{%- else %} + suit-parameter-uri: '#{{ app_recovery_img['name'] }}' +{%- endif %} + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ app_recovery_img['binary'] }} + - suit-directive-fetch: + - suit-send-record-failure + - suit-directive-try-each: + - - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + + suit-manifest-component-id: + - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_app_recovery_local_vendor_name }} + name: {{ mpi_app_recovery_local_class_name }} + suit-text: + en: + '["MEM", {{ app_recovery_img['dt'].label2node['cpu'].unit_addr }}, {{ get_absolute_address(app_recovery_img['dt'].chosen_nodes['zephyr,code-partition']) }}, {{ app_recovery_img['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }}]': + suit-text-vendor-name: Nordic Semiconductor ASA + suit-text-model-name: nRF54H20_cpuapp_3 + suit-text-vendor-domain: nordicsemi.com + suit-text-model-info: The nRF54H20 application core companion/recovery + suit-text-component-description: Sample application core companion/recovery FW + suit-text-component-version: v1.0.0 +{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE' not in app_recovery_img['config'] or app_recovery_img['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE'] == '' %} + suit-integrated-payloads: + '#{{ app_recovery_img['name'] }}': {{ app_recovery_img['binary'] }} +{%- endif %} diff --git a/config/suit/templates/nrf54h20/default/v1/rad_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/rad_envelope.yaml.jinja2 index 0ffbeb1b7ae7..7b415196056e 100644 --- a/config/suit/templates/nrf54h20/default/v1/rad_envelope.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/default/v1/rad_envelope.yaml.jinja2 @@ -1,10 +1,12 @@ -{%- if application is defined %} - {%- set main_config = application %} +{%- set mpi_radio_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_radio_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} +{%- set suit_artifacts_base_dir = ( radio['binary'].split('/')[:-1] | join('/') ) %} +{%- if 'CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT' in radio['config'] and radio['config']['CONFIG_SUIT_ENVELOPE_TARGET_ENCRYPT'] != '' %} + {%- set encrypted = True %} + {%- set rad_encryption_dir = ( suit_artifacts_base_dir ) + "/" + ( radio['name'] ) + "_encryption_artifacts" %} {%- else %} - {%- set main_config = radio %} + {%- set encrypted = False %} {%- endif %} -{%- set mpi_radio_vendor_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_radio_class_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} SUIT_Envelope_Tagged: suit-authentication-wrapper: SuitDigest: @@ -38,9 +40,17 @@ SUIT_Envelope_Tagged: suit-parameter-image-digest: suit-digest-algorithm-id: cose-alg-sha-256 suit-digest-bytes: +{%- if encrypted %} + file_direct: {{ rad_encryption_dir }}/plain_text_digest.bin +{%- else %} file: {{ radio['binary'] }} +{%- endif %} suit-parameter-image-size: +{%- if encrypted %} + file_direct: {{ rad_encryption_dir }}/plain_text_size.txt +{%- else %} file: {{ radio['binary'] }} +{%- endif %} - suit-condition-vendor-identifier: - suit-send-record-success - suit-send-record-failure @@ -79,12 +89,7 @@ SUIT_Envelope_Tagged: suit-current-version: {{ DEFAULT_VERSION }} {%- endif %} -{%- if radio['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Radio DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} suit-install: -{%- endif %} - suit-directive-set-component-index: 1 - suit-directive-override-parameters: {%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} @@ -112,6 +117,10 @@ SUIT_Envelope_Tagged: - suit-directive-set-component-index: 0 - suit-directive-override-parameters: suit-parameter-source-component: 1 +{%- if encrypted %} + suit-parameter-encryption-info: + file: {{ rad_encryption_dir }}/suit_encryption_info.bin +{%- endif %} # When copying the data it is worth to retry the sequence of # suit-directive-copy and suit-condition-image-match at least once. # If a bit flip occurs, it might be due to a transport issue, not @@ -148,8 +157,21 @@ SUIT_Envelope_Tagged: suit-digest-algorithm-id: cose-alg-sha-256 suit-digest-bytes: file: {{ radio['binary'] }} +{%- if encrypted %} + # For the encrypted image this fetch directive is used to verify the tag and the AAD + # of the received encrypted image The target "CAND_IMG" behaves like a /dev/null device + # and all the data is discarded. + # This way even if the encrypted content is incorrect, the contents of the target memory + # will not be affected. + # Note that no digest checking is required on the encrypted content itself, as checking the tag + # and the AAD verifies the integrity of the content. In fact, suit-condition-image-match + # won't be able to work in this case, as the CAND_IMG won't contain any valid content. + suit-parameter-encryption-info: + file: {{ rad_encryption_dir }}/suit_encryption_info.bin +{%- endif %} - suit-directive-fetch: - suit-send-record-failure +{%- if not encrypted %} - suit-directive-try-each: - - suit-condition-image-match: - suit-send-record-success @@ -161,6 +183,7 @@ SUIT_Envelope_Tagged: - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure +{%- endif %} suit-manifest-component-id: - INSTLD_MFST diff --git a/config/suit/templates/nrf54h20/default/v1/rad_recovery_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/rad_recovery_envelope.yaml.jinja2 index 7f9beec0eb61..5c83a8de39b3 100644 --- a/config/suit/templates/nrf54h20/default/v1/rad_recovery_envelope.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/default/v1/rad_recovery_envelope.yaml.jinja2 @@ -1,5 +1,5 @@ -{%- set mpi_rad_recovery_vendor_name = application['config']['CONFIG_SUIT_MPI_RAD_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_rad_recovery_class_name = application['config']['CONFIG_SUIT_MPI_RAD_RECOVERY_CLASS_NAME']|default('nRF54H20_sample_rad_recovery') %} +{%- set mpi_rad_recovery_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_RECOVERY_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_rad_recovery_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_RECOVERY_CLASS_NAME']|default('nRF54H20_sample_rad_recovery') %} SUIT_Envelope_Tagged: suit-authentication-wrapper: SuitDigest: @@ -70,12 +70,7 @@ SUIT_Envelope_Tagged: suit-current-version: {{ DEFAULT_VERSION }} {%- endif %} -{%- if radio['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Radio DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} suit-install: -{%- endif %} - suit-directive-set-component-index: 1 - suit-directive-override-parameters: suit-parameter-uri: '#{{ rad_recovery['name'] }}' diff --git a/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 b/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 index abe79fb80a68..af2f476bc041 100644 --- a/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2 @@ -1,21 +1,43 @@ +# This SUIT manifest template can be for various scenarios, +# depending on which components are defined in the input context and which payloads +# are included/detached from the envelope. +# This manifest will only be installed if the SoC Binaries (nordic_top envelope) installed +# in the device have a semantic version of at least 0.8.0. +# If a partial update (only radio or only application) needs to be performed, +# several rules are enforced: +# - If the candidate only contains the radio core image, it is ensured that +# the major version of the candidate radio manifest is at most greater by 1 +# than the installed application manifest major version. +# - If the candidate only contains the application core image, it is ensured that +# the semantic version of the candidate application manifest exactly +# matches the installed radio manifest semantic version. {%- set component_index = 0 %} {%- set component_list = [] %} -{%- if application is not defined %} - {%- set main_config = radio %} +{%- set mpi_root_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_ROOT_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_root_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_ROOT_CLASS_NAME']|default('nRF54H20_sample_root') %} +{%- set mpi_application_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_application_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} +{%- set mpi_radio_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_radio_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} +{%- if RAD_LOCAL_1_VERSION is defined %} +{% set RAD_LOCAL_1_VERSION_MAJOR = ( RAD_LOCAL_1_VERSION.split('.')[0] | int ) %} {%- else %} - {%- set main_config = application %} +{% set RAD_LOCAL_1_VERSION_MAJOR = 0 %} {%- endif %} -{%- set mpi_root_vendor_name = main_config['config']['CONFIG_SUIT_MPI_ROOT_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_root_class_name = main_config['config']['CONFIG_SUIT_MPI_ROOT_CLASS_NAME']|default('nRF54H20_sample_root') %} -{%- set mpi_application_vendor_name = main_config['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_application_class_name = main_config['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} -{%- set mpi_radio_vendor_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_radio_class_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} {%- if 'SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY' in sysbuild['config'] and sysbuild['config']['SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY'] != '' %} {%- set nordic_top = True %} {%- else %} {%- set nordic_top = False %} {%- endif %} +{%- if 'SB_CONFIG_SUIT_RECOVERY_APPLICATION_IMAGE_MANIFEST_APP_LOCAL_3' in sysbuild['config'] and sysbuild['config']['SB_CONFIG_SUIT_RECOVERY_APPLICATION_IMAGE_MANIFEST_APP_LOCAL_3'] != '' %} + {%- set mpi_app_recovery_local_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_3_VENDOR_NAME']|default('nordicsemi.com') %} + {%- set mpi_app_recovery_local_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_3_CLASS_NAME']|default('nRF54H20_sample_app_3') %} +{%- endif %} +{%- if app_recovery_img is defined and 'CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP' in app_recovery_img['config'] and app_recovery_img['config'][CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP] != '' %} + {%- set recovery_button_check_on_invoke = True %} +{%- else %} + {%- set recovery_button_check_on_invoke = False %} +{%- endif %} SUIT_Envelope_Tagged: suit-authentication-wrapper: SuitDigest: @@ -33,14 +55,14 @@ SUIT_Envelope_Tagged: suit-components: - - CAND_MFST - 0 -{%- if radio is defined %} +{% if recovery_button_check_on_invoke %} {%- set component_index = component_index + 1 %} - {%- set rad_component_index = component_index %} - {{- component_list.append( rad_component_index ) or ""}} + {%- set app_recovery_local_component_index = component_index %} + {{- component_list.append( app_recovery_local_component_index ) or ""}} - - INSTLD_MFST - RFC4122_UUID: - namespace: {{ mpi_radio_vendor_name }} - name: {{ mpi_radio_class_name }} + namespace: {{ mpi_app_recovery_local_vendor_name }} + name: {{ mpi_app_recovery_local_class_name }} {%- endif %} {%- if application is defined %} {%- set component_index = component_index + 1 %} @@ -51,9 +73,17 @@ SUIT_Envelope_Tagged: namespace: {{ mpi_application_vendor_name }} name: {{ mpi_application_class_name }} {%- endif %} +{%- if radio is defined %} + {%- set component_index = component_index + 1 %} + {%- set rad_component_index = component_index %} + {{- component_list.append( rad_component_index ) or ""}} + - - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_radio_vendor_name }} + name: {{ mpi_radio_class_name }} +{%- endif %} {%- set component_list_without_top = component_list[:] %} -{%- if nordic_top %} {%- set component_index = component_index + 1 %} {%- set top_component_index = component_index %} {{- component_list.append( top_component_index ) or ""}} @@ -61,10 +91,27 @@ SUIT_Envelope_Tagged: - RFC4122_UUID: namespace: nordicsemi.com name: nRF54H20_nordic_top -{%- endif %} suit-shared-sequence: - - suit-directive-set-component-index: [{{ component_list|join(',') }}] + - suit-directive-set-component-index: [{{ component_list_without_top|join(',') }}] + - suit-directive-override-parameters: + suit-parameter-vendor-identifier: + RFC4122_UUID: {{ mpi_root_vendor_name }} + suit-parameter-class-identifier: + RFC4122_UUID: + namespace: {{ mpi_root_vendor_name }} + name: {{ mpi_root_class_name }} + - suit-condition-vendor-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-condition-class-identifier: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-set-component-index: [{{ top_component_index }}] - suit-directive-override-parameters: suit-parameter-vendor-identifier: RFC4122_UUID: {{ mpi_root_vendor_name }} @@ -120,44 +167,86 @@ SUIT_Envelope_Tagged: suit-current-version: {{ DEFAULT_VERSION }} {%- endif %} -{%- if main_config['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Main DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} suit-install: -{%- endif %} - suit-directive-set-component-index: 0 + # As the candidate-verification sequence has already verified that the envelope includes + # either a full set of images or a single image which is compatible with the installed images, + # We can blindly proceed with installing the images which are attached to this envelope. {%- if radio is defined %} - - suit-directive-override-parameters: - suit-parameter-uri: '#{{ radio['name'] }}' - - suit-directive-fetch: - - suit-send-record-failure - - suit-condition-dependency-integrity: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure + - suit-directive-run-sequence: + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ radio['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ radio['name'] }}.suit + suit-parameter-soft-failure: True + # The soft-failure parameter is set to True, so that if only one of the radio or application + # payloads is present in the current envelope, the installation process won't fail. + # Only processing of the current sequence in suit-directive-run-sequence will be interrupted. + # This serves as a "if radio payload is present" condition. + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + # At this stage it is already known that the radio payload is available in the envelope. + # A failure in the commands below means that the attached payload is invalid, which + # should result in a failure of the whole update process. + # Thus, the soft-failure parameter should be set to false. + - suit-directive-override-parameters: + suit-parameter-soft-failure: False + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure {%- endif %} {%- if application is defined %} - - suit-directive-override-parameters: - suit-parameter-uri: '#{{ application['name'] }}' - - suit-directive-fetch: - - suit-send-record-failure - - suit-condition-dependency-integrity: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure + - suit-directive-run-sequence: + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ application['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ application['name'] }}.suit + suit-parameter-soft-failure: True + # The soft-failure parameter is set to True, so that if only one of the radio or application + # payloads is present in the current envelope, the installation process won't fail. + # Only processing of the current sequence in suit-directive-run-sequence will be interrupted. + # This serves as a "if application payload is present" condition. + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + # At this stage it is already known that the application payload is available in the envelope. + # A failure in the commands below means that the attached payload is invalid, which + # should result in a failure of the whole update process. + # Thus, the soft-failure parameter should be set to false. + - suit-directive-override-parameters: + suit-parameter-soft-failure: False + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure {%- endif %} {%- if nordic_top %} - suit-directive-override-parameters: @@ -177,78 +266,206 @@ SUIT_Envelope_Tagged: {%- endif %} suit-candidate-verification: - - suit-directive-set-component-index: 0 -{%- if radio is defined %} + - suit-directive-set-component-index: {{ top_component_index }} + # The version check below should be modified if a different installed SoC Binaries version + # is required for the update. - suit-directive-override-parameters: - suit-parameter-uri: '#{{ radio['name'] }}' - suit-parameter-image-digest: - suit-digest-algorithm-id: cose-alg-sha-256 - suit-digest-bytes: - envelope: {{ artifacts_folder ~ radio['name'] }}.suit - - suit-directive-fetch: + suit-parameter-version: + suit-condition-version-comparison-greater-equal: 0.8.0 + - suit-condition-version: + - suit-send-record-success - suit-send-record-failure - # In the case of streaming operations it is worth to retry them at least once. - # This increases the robustness against bit flips on the transport, - # for example when storing the data on an external memory device. - # The suit-directive-try-each will complete on the first successful subsequence. + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-try-each: - - - suit-condition-image-match: +{%- if radio is not defined or application is not defined %} +# suit-directive-try-each needs at least two sequences. +# If the application is single core, add this dummy sequence, +# to provide the needed second sequence. + - - suit-condition-abort: + - suit-send-record-failure +{%- endif %} +{%- if radio is defined and application is defined %} + - - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ radio['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ radio['name'] }}.suit + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: - suit-send-record-success - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - - suit-condition-image-match: + + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ application['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ application['name'] }}.suit + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: - suit-send-record-success - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - suit-condition-dependency-integrity: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure +{%- endif %} +{%- if radio is defined %} + - - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ radio['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ radio['name'] }}.suit + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + # Radio payload is available and correct. Proceed with radio verification. + +{%- if RAD_LOCAL_1_VERSION_MAJOR > 0 and application is defined %} + - suit-directive-set-component-index: {{ app_component_index }} + - suit-directive-override-parameters: + suit-parameter-version: + # Verify that the major version of the new radio manifest is greater from the + # currently installed application manifest major version by at most 1. + suit-condition-version-comparison-greater-equal: {{ RAD_LOCAL_1_VERSION_MAJOR - 1 }}.0.0 + suit-parameter-soft-failure: False + - suit-condition-version: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} + {%- endif %} {%- if application is defined %} - - suit-directive-override-parameters: - suit-parameter-uri: '#{{ application['name'] }}' - suit-parameter-image-digest: - suit-digest-algorithm-id: cose-alg-sha-256 - suit-digest-bytes: - envelope: {{ artifacts_folder ~ application['name'] }}.suit - - suit-directive-fetch: - - suit-send-record-failure - # In the case of streaming operations it is worth to retry them at least once. - # This increases the robustness against bit flips on the transport, - # for example when storing the data on an external memory device. - # The suit-directive-try-each will complete on the first successful subsequence. - - suit-directive-try-each: - - - suit-condition-image-match: + # Radio payload is unavailable. + # Verify that the application payload is available and compatible with the currently installed + # radio image. In the case of this manifest this means the semantic version number of the + # candidate application manifest is identical to that of the installed radio manifest. + - - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ application['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ application['name'] }}.suit + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: - suit-send-record-success - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - - suit-condition-image-match: + {%- if radio is defined and APP_LOCAL_1_VERSION is defined %} + # Ensure that the application manifest version matches exactly the installed radio manifest version. + - suit-directive-set-component-index: {{ rad_component_index }} + - suit-directive-override-parameters: + suit-parameter-version: + suit-condition-version-comparison-equal: {{ APP_LOCAL_1_VERSION }} + suit-parameter-soft-failure: False + - suit-condition-version: - suit-send-record-success - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - suit-condition-dependency-integrity: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure + {%- endif %} {%- endif %} + + # At this stage the suit-processor has already verified that the envelope includes + # either a full set of images or a single image which is compatible with the installed images, + # we can proceed with simply validating the payloads which are attached to this envelope. +{%- if radio is defined %} + - suit-directive-run-sequence: + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ radio['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ radio['name'] }}.suit + suit-parameter-soft-failure: True + # The soft-failure parameter is set to True, so that if only one of the radio or application + # payloads is present in the current envelope, the installation process won't fail. + # Only processing of the current sequence in suit-directive-run-sequence will be interrupted. + # This serves as a "if radio payload is present" condition. + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + # At this stage it is already known that the radio payload is available in the envelope. + # A failure in the commands below means that the attached payload is invalid, which + # should result in a failure of the whole update process. + # Thus, the soft-failure parameter should be set to false. + - suit-directive-override-parameters: + suit-parameter-soft-failure: False + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} +{%- if application is defined %} + - suit-directive-run-sequence: + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: '#{{ application['name'] }}' + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + envelope: {{ artifacts_folder ~ application['name'] }}.suit + suit-parameter-soft-failure: True + # The soft-failure parameter is set to True, so that if only one of the radio or application + # payloads is present in the current envelope, the installation process won't fail. + # Only processing of the current sequence in suit-directive-run-sequence will be interrupted. + # This serves as a "if application payload is present" condition. + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + # At this stage it is already known that the application payload is available in the envelope. + # A failure in the commands below means that the attached payload is invalid, which + # should result in a failure of the whole update process. + # Thus, the soft-failure parameter should be set to false. + - suit-directive-override-parameters: + suit-parameter-soft-failure: False + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure +{%- endif %} + {%- if nordic_top %} + - suit-directive-set-component-index: 0 - suit-directive-override-parameters: suit-parameter-uri: '#top' suit-parameter-image-digest: @@ -257,21 +474,11 @@ SUIT_Envelope_Tagged: envelope: {{ sysbuild['config']['SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY'] }}/nordic_top.suit - suit-directive-fetch: - suit-send-record-failure - # In the case of streaming operations it is worth to retry them at least once. - # This increases the robustness against bit flips on the transport, - # for example when storing the data on an external memory device. - # The suit-directive-try-each will complete on the first successful subsequence. - - suit-directive-try-each: - - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure - suit-condition-dependency-integrity: - suit-send-record-success - suit-send-record-failure diff --git a/config/suit/templates/nrf54h20/matter/v1/app_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/matter/v1/app_envelope.yaml.jinja2 index 1b259d398326..5ed97b9ebdf7 100644 --- a/config/suit/templates/nrf54h20/matter/v1/app_envelope.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/matter/v1/app_envelope.yaml.jinja2 @@ -1,5 +1,5 @@ -{%- set mpi_application_vendor_name = application['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_application_class_name = application['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} +{%- set mpi_application_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_application_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} SUIT_Envelope_Tagged: suit-authentication-wrapper: SuitDigest: @@ -97,20 +97,18 @@ SUIT_Envelope_Tagged: - suit-send-record-failure {%- endif %} -{%- if application['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Application DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} suit-install: -{%- endif %} -{%- if flash_companion is defined %} - suit-directive-set-component-index: 1 - suit-directive-override-parameters: - suit-parameter-uri: '#{{ flash_companion['name'] }}' +{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} + suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' +{%- else %} + suit-parameter-uri: 'file://{{ application['filename'] }}' +{%- endif %} suit-parameter-image-digest: suit-digest-algorithm-id: cose-alg-sha-256 suit-digest-bytes: - file: {{ flash_companion['binary'] }} + file: {{ application['binary'] }} - suit-directive-fetch: - suit-send-record-failure - suit-condition-image-match: @@ -118,7 +116,7 @@ SUIT_Envelope_Tagged: - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - suit-directive-set-component-index: 3 + - suit-directive-set-component-index: 0 - suit-directive-override-parameters: suit-parameter-source-component: 1 - suit-directive-copy: @@ -128,20 +126,18 @@ SUIT_Envelope_Tagged: - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - suit-directive-invoke: - - suit-send-record-failure -{%- endif %} + suit-text: + suit-digest-algorithm-id: cose-alg-sha-256 + + suit-candidate-verification: +{%- if flash_companion is defined %} - suit-directive-set-component-index: 1 - suit-directive-override-parameters: -{%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} - suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' -{%- else %} - suit-parameter-uri: 'file://{{ application['filename'] }}' -{%- endif %} + suit-parameter-uri: '#{{ flash_companion['name'] }}' suit-parameter-image-digest: suit-digest-algorithm-id: cose-alg-sha-256 suit-digest-bytes: - file: {{ application['binary'] }} + file: {{ flash_companion['binary'] }} - suit-directive-fetch: - suit-send-record-failure - suit-condition-image-match: @@ -149,7 +145,7 @@ SUIT_Envelope_Tagged: - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - suit-directive-set-component-index: 0 + - suit-directive-set-component-index: 3 - suit-directive-override-parameters: suit-parameter-source-component: 1 - suit-directive-copy: @@ -159,10 +155,9 @@ SUIT_Envelope_Tagged: - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - suit-text: - suit-digest-algorithm-id: cose-alg-sha-256 - - suit-candidate-verification: + - suit-directive-invoke: + - suit-send-record-failure +{%- endif %} - suit-directive-set-component-index: 1 - suit-directive-override-parameters: {%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in application['config'] and application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} @@ -176,17 +171,17 @@ SUIT_Envelope_Tagged: file: {{ application['binary'] }} - suit-directive-fetch: - suit-send-record-failure - - suit-directive-try-each: - - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + {%- if 'SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_IN_ROOT' in sysbuild['config'] %} + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-image-size: + raw: 0 + {%- endif %} suit-manifest-component-id: - INSTLD_MFST diff --git a/config/suit/templates/nrf54h20/matter/v1/rad_envelope.yaml.jinja2 b/config/suit/templates/nrf54h20/matter/v1/rad_envelope.yaml.jinja2 index dc0c81a7a3f8..ee155e9f0f96 100644 --- a/config/suit/templates/nrf54h20/matter/v1/rad_envelope.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/matter/v1/rad_envelope.yaml.jinja2 @@ -1,10 +1,5 @@ -{%- if application is defined %} - {%- set main_config = application %} -{%- else %} - {%- set main_config = radio %} -{%- endif %} -{%- set mpi_radio_vendor_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_radio_class_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} +{%- set mpi_radio_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_radio_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} SUIT_Envelope_Tagged: suit-authentication-wrapper: SuitDigest: @@ -88,12 +83,7 @@ SUIT_Envelope_Tagged: - suit-send-record-failure {%- endif %} -{%- if radio['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Radio DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} suit-install: -{%- endif %} - suit-directive-set-component-index: 1 - suit-directive-override-parameters: {%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} @@ -127,7 +117,7 @@ SUIT_Envelope_Tagged: {%- if 'CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI' in radio['config'] and radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] != '' %} suit-parameter-uri: '{{ radio['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' {%- else %} - suit-parameter-uri: '#{{ radio['name'] }}' + suit-parameter-uri: 'file://{{ radio['filename'] }}' {%- endif %} suit-parameter-image-digest: suit-digest-algorithm-id: cose-alg-sha-256 @@ -135,17 +125,17 @@ SUIT_Envelope_Tagged: file: {{ radio['binary'] }} - suit-directive-fetch: - suit-send-record-failure - - suit-directive-try-each: - - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure - - - suit-condition-image-match: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + {%- if 'SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_IN_ROOT' in sysbuild['config'] %} + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-image-size: + raw: 0 + {%- endif %} suit-manifest-component-id: - INSTLD_MFST diff --git a/config/suit/templates/nrf54h20/matter/v1/root_with_binary_nordic_top.yaml.jinja2 b/config/suit/templates/nrf54h20/matter/v1/root_with_binary_nordic_top.yaml.jinja2 index ada7e8b29b56..43ef012c0f50 100644 --- a/config/suit/templates/nrf54h20/matter/v1/root_with_binary_nordic_top.yaml.jinja2 +++ b/config/suit/templates/nrf54h20/matter/v1/root_with_binary_nordic_top.yaml.jinja2 @@ -1,16 +1,11 @@ {%- set component_index = 0 %} {%- set component_list = [] %} -{%- if application is not defined %} - {%- set main_config = radio %} -{%- else %} - {%- set main_config = application %} -{%- endif %} -{%- set mpi_root_vendor_name = main_config['config']['CONFIG_SUIT_MPI_ROOT_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_root_class_name = main_config['config']['CONFIG_SUIT_MPI_ROOT_CLASS_NAME']|default('nRF54H20_sample_root') %} -{%- set mpi_application_vendor_name = main_config['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_application_class_name = main_config['config']['CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} -{%- set mpi_radio_vendor_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} -{%- set mpi_radio_class_name = main_config['config']['CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} +{%- set mpi_root_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_ROOT_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_root_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_ROOT_CLASS_NAME']|default('nRF54H20_sample_root') %} +{%- set mpi_application_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_application_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_app') %} +{%- set mpi_radio_vendor_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME']|default('nordicsemi.com') %} +{%- set mpi_radio_class_name = sysbuild['config']['SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME']|default('nRF54H20_sample_rad') %} {%- if 'SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY' in sysbuild['config'] and sysbuild['config']['SB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY'] != '' %} {%- set nordic_top = True %} {%- else %} @@ -156,16 +151,11 @@ SUIT_Envelope_Tagged: - suit-send-sysinfo-failure {%- endif %} -{%- if main_config['dt'].label2node['suit_storage_partition'].regs[0].size == 24576 %} - # Main DTS contains larger SUIT storage - use legacy encoding - suit-install-legacy: -{%- else %} suit-install: -{%- endif %} - suit-directive-set-component-index: 0 -{%- if application is defined %} +{%- if nordic_top %} - suit-directive-override-parameters: - suit-parameter-uri: '#{{ application['name'] }}' + suit-parameter-uri: '#top' - suit-directive-fetch: - suit-send-record-failure - suit-condition-dependency-integrity: @@ -173,15 +163,18 @@ SUIT_Envelope_Tagged: - suit-send-record-failure - suit-send-sysinfo-success - suit-send-sysinfo-failure - - suit-directive-process-dependency: - - suit-send-record-success - - suit-send-record-failure - - suit-send-sysinfo-success - - suit-send-sysinfo-failure + - suit-directive-run-sequence: + - suit-directive-override-parameters: + suit-parameter-soft-failure: True + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure {%- endif %} -{%- if radio is defined %} +{%- if application is defined %} - suit-directive-override-parameters: - suit-parameter-uri: '#{{ radio['name'] }}' + suit-parameter-uri: '#{{ application['name'] }}' - suit-directive-fetch: - suit-send-record-failure - suit-condition-dependency-integrity: @@ -195,9 +188,9 @@ SUIT_Envelope_Tagged: - suit-send-sysinfo-success - suit-send-sysinfo-failure {%- endif %} -{%- if nordic_top %} +{%- if radio is defined %} - suit-directive-override-parameters: - suit-parameter-uri: '#top' + suit-parameter-uri: '#{{ radio['name'] }}' - suit-directive-fetch: - suit-send-record-failure - suit-condition-dependency-integrity: diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index fb5723c7ba8d..e60cd5ff2301 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -133,6 +133,7 @@ function(add_docset name version) set(DOCSET_SRC_DIR ${CMAKE_BINARY_DIR}/${name}/src) set(DOCSET_DOCTREE_DIR ${CMAKE_BINARY_DIR}/${name}/doctree) set(DOCSET_HTML_DIR ${CMAKE_BINARY_DIR}/html/${name}) + set(DOCSET_LINKCHECK_DIR ${CMAKE_BINARY_DIR}/linkcheck/${name}) set(DOCSET_MAKE_DIRS ${DOCSET_BUILD_DIR};${DOCSET_SRC_DIR};${DOCSET_HTML_DIR}) set(DOCSET_CLEAN_DIRS ${DOCSET_BUILD_DIR};${DOCSET_HTML_DIR}) set(DOCSET_ENV DOXYGEN_EXECUTABLE=${DOXYGEN_EXECUTABLE};DOCSET_VERSION=${version};DOCS_HTML_DIR=${DOCSET_HTML_DIR}) @@ -211,7 +212,7 @@ function(add_docset name version) ${SPHINXOPTS_EXTRA} ${EXTRA_ARGS} ${DOCSET_SRC_DIR} - ${DOCSET_BUILD_DIR} + ${DOCSET_LINKCHECK_DIR} USES_TERMINAL COMMENT "Checking links for ${name} docset..." ) @@ -312,7 +313,7 @@ add_doxygen_docset(nrf ${NRF_BASE} ${NRF_VERSION}) #------------------------------------------------------------------------------- # docset: mcuboot -add_docset(mcuboot "2.0.99") +add_docset(mcuboot "2.1.99") #------------------------------------------------------------------------------- # docset: nrfx @@ -327,7 +328,7 @@ add_docset(tfm "2.1.0") #------------------------------------------------------------------------------- # docset: matter -add_docset(matter "1.3.0") +add_docset(matter "1.4.0") #------------------------------------------------------------------------------- # docset: nrfxlib @@ -335,6 +336,11 @@ add_docset(matter "1.3.0") add_docset(nrfxlib ${NRF_VERSION}) add_doxygen_docset(nrfxlib ${ZEPHYR_NRFXLIB_MODULE_DIR} ${NRF_VERSION}) +#------------------------------------------------------------------------------- +# docset: wifi + +add_doxygen_docset(wifi ${ZEPHYR_NRF_WIFI_MODULE_DIR} "" STANDALONE) + #------------------------------------------------------------------------------- # docset: internal @@ -405,6 +411,7 @@ add_dependencies(build-all tfm-all matter-all kconfig-all + wifi ) if (EXISTS "${ZEPHYR_DOC_INTERNAL_MODULE_DIR}" ) add_dependencies(build-all internal-all) diff --git a/doc/_extensions/page_filter.py b/doc/_extensions/page_filter.py index 56bc5a867f27..cebfe97bc9fc 100644 --- a/doc/_extensions/page_filter.py +++ b/doc/_extensions/page_filter.py @@ -197,10 +197,10 @@ def page_filter_install( if visitor.found_filter_dropdown: app.add_css_file("page_filter.css") app.add_js_file("page_filter.mjs", type="module") - filename = app.builder.script_files[-1] + script = app.builder.script_files[-1] page_depth = len(Path(pagename).parents) - 1 - body = f"import setupFiltering from './{page_depth * '../'}{filename}'; " + body = f"import setupFiltering from './{page_depth * '../'}{script.filename}'; " for dropdown in visitor.found_filter_dropdown: body += f"setupFiltering('{dropdown.name}'" if dropdown.container_element and dropdown.filter_tags: @@ -224,10 +224,11 @@ def read_versions(app: Sphinx) -> None: try: with open(VERSIONS_FILE) as version_file: nrf_versions = json.loads(version_file.read()) + # Updated regex to match versions with optional segments nrf_versions = list( - filter(lambda v: re.match(r"\d\.\d\.\d$", v), nrf_versions) + filter(lambda v: re.match(r"\d+\.\d+\.\d+(-.*)?$", v), nrf_versions) ) - # Versions classes are on the format "vX-X-X" + # Convert versions to a format suitable for class names app.env.nrf_versions = [ f"v{version.replace('.', '-')}" for version in reversed(nrf_versions) ] diff --git a/doc/_extensions/static/page_filter.mjs b/doc/_extensions/static/page_filter.mjs index 5e4f88b7c4a1..35d646bc2615 100644 --- a/doc/_extensions/static/page_filter.mjs +++ b/doc/_extensions/static/page_filter.mjs @@ -11,7 +11,7 @@ function displayOption(option, dropdown) { document.querySelectorAll(".hideable").forEach(e => e.hidden = false); var filters = all_dropdowns - .map(dp => dp.options[dp.selectedIndex].value) + .map(dp => dp.options[dp.selectedIndex].value.toLowerCase()) .filter(val => val !== "all"); if (filters.length == 0) return; @@ -48,7 +48,7 @@ function createFilterTags(dropdown, elementType, filterTags) { var classFilterRE = Object.keys(filterTags); var index = classFilterRE.indexOf("versions"); if (index !== -1) { - classFilterRE[index] = "v\\d+-\\d+-\\d+"; + classFilterRE[index] = "v\\d+-\\d+-\\d+(-.*)?"; } var parentElements = elementType.split("/"); document.querySelectorAll(parentElements.shift()).forEach((element) => { @@ -91,14 +91,17 @@ function createFilterTags(dropdown, elementType, filterTags) { spanTag.classList.add("filtertag"); filterName = filterTags[className]; } - else if (RegExp('v\\d+-\\d+-\\d+').test(className)) { + else if (RegExp('v\\d+-\\d+-\\d+(-.*)?').test(className)) { aTag.setAttribute("href", URL + "?v=" + className); spanTag.setAttribute("version", className); spanTag.classList.add("versiontag"); - filterName = className.replace(/v(\d+)-(\d+)-(\d+)/i, 'v$1.$2.$3'); + /** Updated replace method to handle additional segments after vX-X-X **/ + filterName = className.replace(/v(\d+)-(\d+)-(\d+)(-.*)?/, (match, p1, p2, p3, p4) => { + return `v${p1}.${p2}.${p3}${p4 || ''}`; + }); /** When clicking a version tag, filter by the corresponding version **/ spanTag.addEventListener("click", () => displayOption(className, dropdown)); - } + } var textNode = document.createTextNode(filterName); spanTag.appendChild(textNode); @@ -158,7 +161,7 @@ function setupFiltering(name, filterTagContainer=undefined, filterTags={}) { /** Retrieve the 'v' parameter and switch to that version, if applicable. Otherwise, switch to the version that is selected in the dropdown. **/ var v = getUrlParameter('v'); - if ("versions" in filterTags && (RegExp('v\\d+-\\d+-\\d+').test(v))) { + if ("versions" in filterTags && (RegExp('v\\d+-\\d+-\\d+(-.*)?').test(v))) { displayOption(v, dropdown); } else { diff --git a/doc/_extensions/table_from_rows.py b/doc/_extensions/table_from_rows.py index 3f0d07a74a65..eb117805cea1 100644 --- a/doc/_extensions/table_from_rows.py +++ b/doc/_extensions/table_from_rows.py @@ -180,12 +180,12 @@ def _find_shields(shields: Dict[str, Set[str]], sample_data: dict): if not extra_args_raw: return - if isinstance(extra_args_raw, list): - extra_args = " ".join(extra_args_raw) + if isinstance(extra_args_raw, str): + extra_args = extra_args_raw.split() else: extra_args = extra_args_raw - shield_args = re.findall(r'SHIELD=(\S*)', extra_args) + shield_args = [re.split(r'=', arg)[1] for arg in extra_args if 'SHIELD=' in arg] if not shield_args: return diff --git a/doc/_extensions/warnings_filter.py b/doc/_extensions/warnings_filter.py index 8076abbb5865..7912000a85ca 100644 --- a/doc/_extensions/warnings_filter.py +++ b/doc/_extensions/warnings_filter.py @@ -55,8 +55,7 @@ def filter(self, record: logging.LogRecord) -> bool: return True for expression in self._expressions: - # The message isn't always a string so we convert it before regexing as we can only regex strings - if expression.match(str(record.msg)): + if expression.match(record.getMessage()): if self._silent: return False else: diff --git a/doc/_scripts/software_maturity/requirements.txt b/doc/_scripts/software_maturity/requirements.txt deleted file mode 100644 index 1e4428e360d4..000000000000 --- a/doc/_scripts/software_maturity/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -azure-storage-blob==12.9.0 -azure-core==1.16.0 -kconfiglib==14.1.0 -PyYAML==5.4.1 diff --git a/doc/_scripts/software_maturity/software_maturity_features.yaml b/doc/_scripts/software_maturity/software_maturity_features.yaml deleted file mode 100644 index ddfe5f7a8751..000000000000 --- a/doc/_scripts/software_maturity/software_maturity_features.yaml +++ /dev/null @@ -1,173 +0,0 @@ -top_table: - Sidewalk: SIDEWALK - Bluetooth: BT_CTLR - Bluetooth Mesh: BT_MESH - Zigbee: ZIGBEE - Thread: NET_L2_OPENTHREAD - LTE: LTE_LINK_CONTROL - DECT NR+ PHY: - rule: NRF_MODEM_LINK_BINARY_DECT_PHY - boards_and_shields: - - BOARD_NRF9161DK_NRF9161_NS - - BOARD_NRF9151DK_NRF9151_NS - Matter: CHIP - Wi-Fi: - rule: WIFI && WIFI_NRF70 - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7000 - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - SHIELD_NRF700X_NRF54H20DK - - SHIELD_NRF700X_NRF54L15PDK - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 -features: - sidewalk: - Sidewalk over Bluetooth LE: SIDEWALK && SIDEWALK_LINK_MASK_BLE - Sidewalk over FSK: SIDEWALK && CONFIG_SIDEWALK_SUBGHZ_SUPPORT - Sidewalk over LORA: SIDEWALK && CONFIG_SIDEWALK_SUBGHZ_SUPPORT - Sidewalk - OTA DFU over Bluetooth LE: SIDEWALK && SIDEWALK_DFU_SERVICE_BLE - Sidewalk on-device certification: SIDEWALK - Sidewalk Multi-link + Auto-connect: SIDEWALK && CONFIG_SIDEWALK_SUBGHZ_SUPPORT - Sidewalk File Transfer (FUOTA): SIDEWALK && SIDEWALK_FILE_TRANSFER - bluetooth: - Bluetooth LE Peripheral/Central: BT_CTLR && (BT_CENTRAL || BT_PERIPHERAL) - LLPM: BT_CTLR_SDC_LLPM - LE Coded PHY: BT_CTLR_PHY_CODED_SUPPORT - Connectionless/Connected CTE Transmitter: BT_CTLR_DF_CTE_TX_SUPPORT - DECT NR+ PHY: - Immediate operations: NRF_MODEM_LINK_BINARY_DECT_PHY - zigbee: - Zigbee (Sleepy) End Device: ZIGBEE_ROLE_END_DEVICE - Zigbee Router: CONFIG_ZIGBEE_ROLE_ROUTER - Zigbee Coordinator: CONFIG_ZIGBEE_ROLE_COORDINATOR - Zigbee + Bluetooth LE multiprotocol: ZIGBEE && BT - Zigbee Network Co-Processor (NCP): ZIGBEE_LIBRARY_NCP_DEV - OTA DFU over Zigbee: ZIGBEE_FOTA - Zigbee + nRF21540 (GPIO): - ZIGBEE && (MPSL_FEM_NRF21540_GPIO_SUPPORT || MPSL_FEM_GENERIC_TWO_CTRL_PINS_SUPPORT) - thread: - Thread 1.1: - OPENTHREAD_THREAD_VERSION_1_1 || - OPENTHREAD_THREAD_VERSION_1_2 || - OPENTHREAD_THREAD_VERSION_1_3 - Thread 1.2 - Core: OPENTHREAD_THREAD_VERSION_1_2 || OPENTHREAD_THREAD_VERSION_1_3 - Thread 1.2 - CSL Receiver: OPENTHREAD_CSL_RECEIVER - Thread 1.2 - Link Metrics: OPENTHREAD_LINK_METRICS_INITIATOR && OPENTHREAD_LINK_METRICS_SUBJECT - Thread 1.3 - Core: OPENTHREAD_THREAD_VERSION_1_3 - Thread - Full Thread Device (FTD): OPENTHREAD_FTD - Thread - Minimal Thread Device (MTD): OPENTHREAD_MTD - Thread FTD + Bluetooth LE multiprotocol: OPENTHREAD_FTD && BT - Thread MTD + Bluetooth LE multiprotocol: OPENTHREAD_MTD && BT - Thread Radio Co-Processor (RCP): OPENTHREAD_COPROCESSOR && OPENTHREAD_COPROCESSOR_RCP - Thread + nRF21540 (GPIO): - NET_L2_OPENTHREAD && - (MPSL_FEM_NRF21540_GPIO_SUPPORT || MPSL_FEM_GENERIC_TWO_CTRL_PINS_SUPPORT) - Thread TCP: OPENTHREAD_TCP_ENABLE - matter: - Matter over Thread: CHIP && NET_L2_OPENTHREAD - Matter over Wi-Fi: CHIP && WIFI_NRF70 - Matter commissioning over IP: CHIP - Matter commissioning over Bluetooth LE with QR code onboarding: CHIP && BT - Matter commissioning over Bluetooth LE with NFC onboarding: CHIP && BT && CHIP_NFC_COMMISSIONING - Matter - OTA DFU over Bluetooth LE: CHIP && BT && MCUMGR_TRANSPORT_BT - OTA DFU over Matter: CHIP && CHIP_OTA_REQUESTOR - Matter Intermittently Connected Device: CHIP && CHIP_ENABLE_ICD_SUPPORT && - NET_L2_OPENTHREAD && OPENTHREAD_MTD_SED - wifi: - STA Mode: - rule: WIFI_NM_WPA_SUPPLICANT && WIFI_NRF70 - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7000 - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - SHIELD_NRF700X_NRF54H20DK - - SHIELD_NRF700X_NRF54L15PDK - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 - Scan only (for location accuracy): - rule: WIFI_NRF70 && !WIFI_NM_WPA_SUPPLICANT - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7000 - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 - Bluetooth LE coexistence: - rule: WIFI_NRF70 && NRF700X_SR_COEX - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 - Thread coexistence: - rule: WIFI_NRF70 && OPENTHREAD - boards_and_shields: - - BOARD_NRF7002DK_NRF5340_CPUAPP - SoftAP Mode (for Wi-Fi provisioning): - rule: WIFI_NRF70 && NRF700X_AP_MODE && WIFI_NM_WPA_SUPPLICANT_AP - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7000 - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 - Monitor Mode: - rule: WIFI_NRF70 && NRF700X_RAW_DATA_RX - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7000 - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 - TX injection Mode: - rule: WIFI_NRF70 && NRF700X_RAW_DATA_TX - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7000 - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 - Promiscuous Mode: - rule: WIFI_NRF70 && NRF700X_PROMISC_DATA_RX - boards_and_shields: - - SHIELD_NRF7002EK - - SHIELD_NRF7002EK_NRF7001 - - SHIELD_NRF7002EB - - BOARD_NRF7002DK_NRF5340_CPUAPP - - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001 - fast_pair: - Personalized Name extension: BT_FAST_PAIR_PN - Find My Device Network extension: BT_FAST_PAIR_FMDN - trusted_firmware_m: - Minimal Build: BUILD_WITH_TFM && TFM_PROFILE_TYPE_MINIMAL - Full build: BUILD_WITH_TFM && TFM_PROFILE_TYPE_NOT_SET && NRF_SECURITY - psa_crypto: - PSA Crypto APIs: NRF_SECURITY - immutable_bootloader: - Immutable Bootloader as part of build: SECURE_BOOT - hw_unique_key: - Key Derivation from Hardware Unique Key: HW_UNIQUE_KEY - trusted_storage: - Trusted storage implements the PSA Certified Secure Storage APIs without TF-M: TRUSTED_STORAGE - power_management: - nPM1100: REGULATOR_NPM1100 - nPM1300: MFD_NPM1300 - nPM6001: MFD_NPM6001 - -display_names: - SHIELD_NRF7002EK: nRF7002 EK - SHIELD_NRF7002EK_NRF7000: nRF7002 EK in nRF7000 emulation mode - SHIELD_NRF7002EK_NRF7001: nRF7002 EK in nRF7001 emulation mode - SHIELD_NRF7002EB: nRF7002 EB - BOARD_NRF7002DK_NRF5340_CPUAPP: nRF7002 DK - BOARD_NRF7002DK_NRF5340_CPUAPP_NRF7001: nRF7002 DK in nRF7001 emulation mode - BOARD_NRF9161DK_NRF9161_NS: nRF9161 - BOARD_NRF9151DK_NRF9151_NS: nRF9151 diff --git a/doc/_scripts/software_maturity/software_maturity_scanner.py b/doc/_scripts/software_maturity/software_maturity_scanner.py deleted file mode 100644 index b11ae15eaf5f..000000000000 --- a/doc/_scripts/software_maturity/software_maturity_scanner.py +++ /dev/null @@ -1,822 +0,0 @@ -""" -SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -Copyright (c) 2023 Nordic Semiconductor ASA - -NCS Software Maturity Level Scanner -=================================== - -This script can be used to generate a software maturity level report based -on experimental warnings in the build output and parsing Kconfig files. - -The script requires three inputs to be functional: -- The twister output directory. This directory is searched for build.log files - in which the experimental warnings appear. It is also searched for .config - files to find relevant enabled Kconfig symbols. -- An Azure access key, to write the generated report to Azure blob storage. -- A YAML file describing all the desired features and their respective Kconfig - rules. The file should contain a field for all the desired technologies - listed in the top-level table, and then a field for all features within each - technology. - - The Kconfig rules listed in the file can cosist of one or more Kconfig - symbols, related with '&&' (indicating that all symbols must be present) or - '||' (indicating that at least one of the symbols must be present). && has a - higher precedence than ||, so A || B && C is equivalent to A || (B && C). - Parenthesis can also be used to form rules like (A || B && (C || D)) && E. - Finally, a symbol can be negated with '!', indicating that the symbol must - not be present. Only symbols can be negated, not entire expressions. - - Specific values for symbols can be given with '=', e.g. A=2. When no specific - value is given, a symbol is automatically expanded to A=y. Negating a symbol - with a value allows all occurrences of the symbol where the value differs - from the given value. - - In cases where a feature is dependent on a companion chip to work, the feature - entry can be expanded to a dictionary containing the fields "rule" and - "boards_and_shields" where "rule" is the original KConfig rule and - "boards_and_shields" is a list of KConfig options indicating that the - required companion chip is present. If at least one sample is found - where none of the listed companion chip options are present, the feature - is marked as independent of the companion chips for the given SoC. Otherwise - all found companion chip options are added as a footnote. - The companion chip options can have a display name associated with them to - use in the footnotes, instead of a substring of the option name. The - associated display names are listed under the "display_names" section. - - One such file might look like this: - - top_table: - Bluetooth: BT_CTLR - Zigbee: ZIGBEE - Thread: NET_L2_OPENTHREAD - LTE: LTE_LINK_CONTROL - features: - bluetooth: - LLPM: CAF_BLE_USE_LLPM - Periodic Advertisement: BT_CTLR_SYNC_PERIODIC - matter: - Matter commissioning over IP: CHIP - Matter over Thread: CHIP && NET_L2_OPENTHREAD - wifi: - STA Mode: - rule: WIFI_NM_WPA_SUPPLICANT && WIFI_NRF70 - boards_and_shields: - - SHIELD_NRF7002EK - - BOARD_NRF7002DK_NRF5340_CPUAPP - display_names: - SHIELD_NRF7002EK: nRF7002 EK - BOARD_NRF7002DK_NRF5340_CPUAPP: nRF7002 DK - -If no input file is specified, the script will look in the local directory for -a 'software_maturity_features.yaml' file. - -The ``TWISTER_OUT_DIR`` environment variable is used by default to provide the -necessary input folder. It can be overwritten by supplying the -``--build-output`` option. - -The Azure access key can be supplied with the argument ``--access-key``. -If not provided as an argument explicitly, the environment variable -``AZURE_REPORT_CACHE_ACCESS_KEY`` is used by default. - -Publish Results/Run Locally -*************************** -The script can run in two different modes, based on which of the following -options are supplied: ``--save-output`` or ``--publish-results``. - -When ``--save-output`` is used, no Azure access keys are needed, and the -results are written to the specified file on the local filesystem. - -When run with the ``--publish-results``, the script will run as normal, and -upload the resulting YAML file to Azure blob storage. This should ONLY be -done by the CI build system. To differentiate the results of different runs, -use the ``--commit-sha`` option upon execution to mark the commit on which the -build output is based. - -Script Logic -************ - -A complete list of all available SoCs are found by searching through the -samples and applications folder for sample.yaml files and retrieving the -``integration_platforms`` list from each. Anything nRF51 and not starting with -nRF is excluded. - -To mark features as experimental the twister output folder is searched for -all build.log files and scanned for the string "Experimental symbol XXX is -enabled". When found, The SoC is looked up in /zephyr/.config, and a mapping -from each SoC to the experimental symbols detected when using it to build is -stored and used to evaluate the Kconfig rules. - -Next, the twister output folder is searched for all .config-files. These -are evaluated against the given Kconfig rules to determine which features -are supported, experimental or not supported. If a rule contains multiple -symbols connected with either && or ||, all of the symbols must be present in -the same .config-file for a SoC to be registered as supporting that feature. -That means that a feature is not marked as supported if there is no explicit -test case where all the required Kconfig symbols are present at the same time, -even if the required options have been enabled individually in separate -samples. If at least one of the symbols are marked as experimental, the feature -is also marked as experimental. - -In cases where there are rules with multiple symbols connected with ||, and one -is experimental and the others are not, the feature will still be marked as -experimental. If this is an undesired outcome, the feature should be split -into two separate features, one with the experimental symbols and the other -with the supported ones. -""" - -from enum import IntEnum -from pathlib import Path -from typing import Dict, List, Set, Tuple, Union -from azure.storage.blob import ContainerClient -import kconfiglib -import os -import re -import sys -import yaml -import logging -import argparse - - -AZ_CONN_STR = ";".join( - ( - "DefaultEndpointsProtocol=https", - "EndpointSuffix=core.windows.net", - "AccountName=ncsdocsa", - "AccountKey={}", - ) -) -"""Azure connection string (private acces)""" - -AZ_CONTAINER = "ncs-doc-generated-reports" -"""Azure container.""" - -UPLOAD_PREFIX = "software_maturity" -"""Prefix used by all files related to this script.""" - -UPLOAD_FILENAME = UPLOAD_PREFIX + "/{}.yaml" -"""Filename of uploaded software maturity level report.""" - -NRF_SAMPLE_DIR = Path(__file__).absolute().parents[3] -"""Directory containing samples/ and applications/ subfolders.""" - -BOARD_FILTER = lambda b: re.search(r"/nrf[0-9]+", b) and not b.startswith("nrf51") -"""Function to filter non-relevant boards.""" - - -class MaturityLevels(IntEnum): - """Software maturity level constants.""" - - NOT_SUPPORTED = 1 - EXPERIMENTAL = 2 - SUPPORTED = 3 - - def get_str(self): - return { - self.NOT_SUPPORTED: "Not supported", - self.EXPERIMENTAL: "Experimental", - self.SUPPORTED: "Supported", - }[self] - - -__version__ = "0.2.0" - -logger = logging.getLogger(__name__) - - -def upload_data(filename: str, data: dict, cc: ContainerClient) -> None: - """Upload software maturity level report to Azure blob storage. - - Args: - filename: Full path of uploaded file. - data: Data to publish to Azure. - cc: Azure container client. - - Raises: - azure.core.exceptions.ClientAuthenticationError: Invalid access keys. - """ - - data = yaml.safe_dump(data) - bc = cc.get_blob_client(filename) - - logger.info("Uploading software maturity level information...") - bc.upload_blob(data, overwrite=True) - logger.info("Upload complete") - - -def soc_from_kconfig(kconfig: kconfiglib.Kconfig) -> str: - """Extract the SoC from a Kconfig object. - - Args: - kconfig: Kconfig object containing variables. - - Returns: - SoC base name on the form "nrf1234". - """ - - if not "CONFIG_SOC" in kconfig.variables: - return None - soc = kconfig.variables["CONFIG_SOC"].value - return soc.strip('"').split("_")[0].lower() - - -def find_experimental_symbols(logs: List[str]) -> Dict[str, Set[str]]: - """Search through a list of files for experimental symbols. - - In cases where experimental symbols are found, search all .config files - in the build log folder to get a set of symbols for each SoC. - - Args: - logs: List of a full path to all build.log files. - - Return: - A mapping from each SoC to a set of symbols that trigger the - experimental warning when built with that SoC. - """ - - socs = {} - for log in logs: - path = Path(log) - content = path.read_text() - matches = re.findall(r"Experimental symbol ([A-Z0-9_]+) is enabled", content) - if matches: - for config_path in path.parent.glob("**/.config"): - kconf = kconfiglib.Kconfig(filename=config_path) - soc = soc_from_kconfig(kconf) - if not soc: - continue - for symbol in matches: - symbol = "CONFIG_" + symbol - if soc not in socs: - socs[soc] = set() - socs[soc].add(symbol) - return socs - - -def find_all_socs(all_samples: List[str]) -> List[str]: - """Search sample.yaml files to find all SoCs currently in use. - - The ``integration_platforms`` field under common and each test is used to - find all possible boards, and the SoCs are derived from the board names. - - Any board name that is not nRF, or any board of the nRF51 series is - excluded from the returned set. - - Args: - all_samples: List of full path to all sample.yaml files. - - Returns: - A sorted list of all unique SoC names. - - Raises: - yaml.YAMLError: Corrupted YAML file. - FileNotFoundError: Invalid file path. - """ - - all_boards = set() - for sample_path in all_samples: - with open(sample_path) as sample: - content = yaml.safe_load(sample) - - # Add common integration platforms - common_platforms = [] - if "common" in content and "integration_platforms" in content["common"]: - common_platforms = content["common"]["integration_platforms"] - - # Add each test's integration platforms - for test in content["tests"].values(): - integration_platforms = common_platforms - if "integration_platforms" in test: - integration_platforms = test["integration_platforms"] - all_boards.update(integration_platforms) - - # Only use nRF boards, but not nRF51 series - all_boards = set(filter(BOARD_FILTER, all_boards)) - all_socs = {b.split("/")[1] for b in all_boards} - return list(sorted(all_socs)) - - -def find_enclosing_parenthesis(rule: str) -> int: - """Get string length of a subrule enclosed in parenthesis. - - Args: - rule: Kconfig rule starting with a parenthesis. - - Returns: - Number of characters in the subrule. - """ - - level = 0 - for i, char in enumerate(rule): - if char == "(": - level += 1 - elif char == ")": - level -= 1 - if level == 0: - return i + 1 - - logger.error(f"Invalid Kconfig rule '{rule}': parenthesis missing") - - -def split_on(delimiter: str, rule: str) -> List[str]: - """Like regular split, but ignore delimiters in subrules. - - Args: - delimiter: Substring to split on ('||' or '&&'). - rule: Kconfig rule to split. - - Returns: - List of sub-expressions delimited by ``delimiter``. - """ - - i = 0 - parts = [] - while i < len(rule): - if rule[i] == "(": - i += find_enclosing_parenthesis(rule[i:]) - elif rule[i:].startswith(delimiter): - parts.append(rule[0:i].strip()) - rule = rule[i + len(delimiter) :] - i = 0 - else: - i += 1 - parts.append(rule.strip()) - return parts - - -def parse_rule(rule: str) -> list: - """Parse a Kconfig rule and return a nested list of expressions. - - A Kconfig rule can be described by the following CFG: - rule -> or-rule - or-rule -> and-rule | and-rule '||' or-rule - and-rule -> sub-rule | sub-rule '&&' and-rule - sub-rule -> not-symbol | '(' or-rule ')' - not-symbol -> symbol | '!' symbol - symbol -> any matches of the regular expression '[A-Z0-9_=]+' - - And-expressions have a higher precedence than or-expressions, making the - rule 'A || B && C' equivalent with 'A || (B && C)' - - Each list in the returned nested list of expressions is prefixed by the - 'AND' or 'OR' keyword. - - For example, the rule 'A && (B || C)' will return the following list: - [OR, [AND, A, [OR, [AND, B], [AND, C]]]] - - Every symbol can be negated. The rule 'A && !B' will return the following - list: [OR, [AND, A, (NOT B)]]. Only symbols can be negated, not expressions. - - Args: - rule: Kconfig rule string. - - Returns: - List of or-expressions with parsed sub-expressions. - """ - - and_expressions = split_on("||", rule) - parsed_rule = ["OR"] - for expression in and_expressions: - symbols = split_on("&&", expression) - for i, symbol in enumerate(symbols): - # Symbol is a nested expression - if symbol.startswith("(") and symbol.endswith(")"): - symbols[i] = parse_rule(symbol[1:-1]) - continue - - negation = False - if not re.match(r"^(!\s*)?[A-Z0-9_=]+$", symbol): - logger.error(f"Invalid Kconfig symbol '{symbol}'") - if symbol.startswith("!"): - negation = True - symbol = symbol[1:].strip() - if not symbol.startswith("CONFIG_"): - symbol = "CONFIG_" + symbol - symbols[i] = ("NOT", symbol) if negation else symbol - symbols.insert(0, "AND") - parsed_rule.append(symbols) - return parsed_rule - - -def parse_rule_set( - rule_set: Union[str, Dict[str, str]], display_names: Dict[str, str] -) -> dict: - """Parse a rule set consisting of the Kconfig rule and the companion chip - dependency KConfig options. - - Args: - rule_set: A Kconfig rule string or a dictionary containing the string and - companion chip dependency options. - - Returns: - A parsed rule set with the fields "rule" and "companion_chips". - """ - - companion_chips = {} - if isinstance(rule_set, str): - rule = parse_rule(rule_set) - else: - rule = parse_rule(rule_set["rule"]) - if "boards_and_shields" in rule_set: - companion_chips = {} - for chip_rule in list(rule_set["boards_and_shields"]): - name = chip_rule - # Use the dependency's given displayname, if present. - if chip_rule in display_names: - name = display_names[chip_rule] - companion_chips[name] = parse_rule(chip_rule) - - return {"rule": rule, "companion_chips": companion_chips} - - -def evaluate_rule(vars: Dict[str, kconfiglib.Variable], rule: list) -> bool: - """Evaluate a parsed Kconfig rule against a dictionary of Kconfig variables. - - Args: - vars: Dictionary of present Kconfig variables and their values. - rule: Parsed Kconfig rule, i.e. list of or-expressions. - - Returns: - False if any of the required variables are missing, True otherwise. - """ - - assert rule[0] == "OR", f"invalid or-rule {rule}" - # At least one of the and-rules must evaluate to True - for and_rule in rule[1:]: - assert and_rule[0] == "AND", f"invalid and-rule {and_rule}" - # All of the symbols in the and-rule must be present - for symbol_and_value in and_rule[1:]: - # Extract the required value (default: "y") - if "=" in symbol_and_value: - symbol, value = symbol_and_value.split("=") - else: - symbol, value = symbol_and_value, "y" - - # A nested list indicates a subrule in parentheses - if isinstance(symbol, list): - if not evaluate_rule(vars, symbol): - break - # The and-rule fails if a negated symbol is present - elif isinstance(symbol, tuple): - assert ( - len(symbol) == 2 and symbol[0] == "NOT" - ), f"invalid negation {symbol}" - symbol = symbol[1] - if symbol in vars and vars[symbol].value == value: - break - # The and-rule fails if a symbol is not present - elif symbol not in vars or vars[symbol].value != value: - break - # No breaks in for-loop means all symbols are present - else: - return True - return False - - -def evaluate_rule_set( - vars: Dict[str, kconfiglib.Variable], rule_set: dict -) -> Tuple[bool, Set[str]]: - """Evaluate a parsed Kconfig rule set against a dictionary of Kconfig variables. - - Args: - vars: Dictionary of present Kconfig variables and their values. - rule_set: The rule set consisting of a parsed Kconfig rule and a list - of individual rules for all associated companion chips. - - Returns: - (Match, Dependencies) - Match: False if any of the required variables are missing, True otherwise. - Dependencies: All companion chips found with the given variables. - """ - rule = rule_set["rule"] - companion_chips = rule_set["companion_chips"] - if not evaluate_rule(vars, rule): - return False, set() - - dependent_on = { - extract_dependency_name(chip) - for chip, rule in companion_chips.items() - if evaluate_rule(vars, rule) - } - return True, dependent_on - - -def extract_dependency_name(option: str) -> str: - """Extract the dependency names from the found KConfig symbols. - - If no display name is given, the symbol itself is used with the - following modifications: - - For shields, the SHIELD prefix is stripped. - - For boards, the BOARD prefix is stripped, as well as the last - occurrence of NRFxxx. - - Args: - option: The KConfig option. - - Returns: - The dependency name. - """ - if option.startswith("BOARD_"): - pattern = r"BOARD_(NRF.*)_NRF.*" - elif option.startswith("SHIELD_"): - pattern = r"SHIELD_(NRF.*)" - else: - return option - - return re.match(pattern, option).group(1).replace("NRF", "nRF") - - -def find_maturity_level( - vars: Dict[str, kconfiglib.Variable], experimental_symbols: Set[str] -) -> MaturityLevels: - """Find if any of the symbols used in a rule are experimental or not. - - Args: - vars: Dictionary of present Kconfig variables and their values. - experimental_symbols: A list of the experimental symbols used in the samples. - - Returns: - 'Experimental' | 'Supported' - """ - - for symbol in experimental_symbols: - if evaluate_rule(vars, ["OR", ["AND", symbol]]): - return MaturityLevels.EXPERIMENTAL - return MaturityLevels.SUPPORTED - - -def generate_tables( - build_output: Path, - input_file: Path, - save_output: Path = None, - publish_results: bool = False, - access_key: str = "", - commit_sha: str = "", -) -> None: - """Entry point of software maturity level scanning. - - Read all SoCs from sample.yaml files, find all .config files and evaluate - Kconfig rules given in ``input_file`` against them, and find if any of the - relevant Kconfig symbols for a feature is experimental or not by scanning - the build.log files. - - At least on of the arguments ``publish_results`` or ``save_output`` must - have a truthy value for a report of the results to be generated. - - Args: - build_output: Path to the twister build output. - input_file: Path to the input YAML file containing features and - their corresponding Kconfig rules. - save_output: Path to the generated YAML report. If None, no report - is generated. - publish_results: If True, the report is stored in Azure blob storage. - This requires ``access_key`` and ``commit_sha`` to be - set to function. - access_key: Azure access key to write to blob storage. - commit_sha: SHA of the commit the twister output is generated by. - """ - - # Directory sanity check - sample_dir = NRF_SAMPLE_DIR - if not build_output.exists(): - sys.exit("Invalid output directory") - elif ( - not (sample_dir / "samples").exists() - or not (sample_dir / "applications").exists() - ): - sys.exit(f"samples/ or applications/ cannot be found in {sample_dir}") - - # Read input file - try: - with open(input_file) as f: - input_doc = yaml.safe_load(f) - except FileNotFoundError as fnfe: - sys.exit(f"Could not find input file '{fnfe.filename}'") - except yaml.YAMLError as yamlerr: - sys.exit(f"Invalid or corrupt input file: {yamlerr}") - - # Extract the display name lookup table - display_names = input_doc["display_names"] - - # Create a dictionary of all unique features and their respective rule - all_features = {} - feature_categories = input_doc["features"] - for cat, features in feature_categories.items(): - for feature, rule_set in features.items(): - key = f"{cat}_{feature}" - all_features[key] = parse_rule_set(rule_set, display_names) - - # Find all sample.yaml files - all_samples = list(sample_dir.glob("samples/**/sample.yaml")) - all_samples += list(sample_dir.glob("applications/**/sample.yaml")) - - # Find all SoCs from integration_platforms in sample.yaml - all_socs = find_all_socs(all_samples) - - # Check which symbols are experimental by looking through build.log files - build_logs = list(build_output.glob("**/build.log")) - exp_soc_sets = find_experimental_symbols(build_logs) - - # Each feature is associated with a dictionary mapping each supported SoC - # to its state (Experimental/Supported) - soc_sets = {} - top_table_info = input_doc["top_table"] - for tech in top_table_info: - soc_sets[tech] = {} - - for feature in all_features: - soc_sets[feature] = {} - - # Look for the desired symbol combinations in all .config files - all_conf_files = build_output.glob("**/zephyr/.config") - for conf_file in all_conf_files: - kconf = kconfiglib.Kconfig(filename=conf_file) - soc = soc_from_kconfig(kconf) - if not soc: - continue - - # Look for technology symbols - for tech, rule_set in top_table_info.items(): - parsed_rule_set = parse_rule_set(rule_set, display_names) - # Top level technologies are currently only Supported/Not supported - match, dependent_on = evaluate_rule_set(kconf.variables, parsed_rule_set) - if match: - # Dependencies are added together, or cleared if at least one instance has no dependencies - if soc in soc_sets[tech]: - previous_dependencies = soc_sets[tech][soc] - if len(previous_dependencies) != 0: - dependent_on.update(previous_dependencies) - else: - dependent_on = set() - soc_sets[tech][soc] = dependent_on - - # Look for feature symbols - for feature, rule_set in all_features.items(): - match, dependent_on = evaluate_rule_set(kconf.variables, rule_set) - if match: - experimental_symbols = ( - exp_soc_sets[soc] if soc in exp_soc_sets else set() - ) - status = find_maturity_level(kconf.variables, experimental_symbols) - if soc in soc_sets[feature]: - status = max(status, soc_sets[feature][soc]["status"]) - previous_dependencies = soc_sets[feature][soc]["dependent_on"] - if previous_dependencies: - dependent_on.update(previous_dependencies) - else: - dependent_on = set() - soc_sets[feature][soc] = { - "status": status, - "dependent_on": dependent_on, - } - - # Create the output data structure - top_table = {} - for tech in sorted(top_table_info): - top_table[tech] = { - MaturityLevels.SUPPORTED.get_str(): [], - MaturityLevels.EXPERIMENTAL.get_str(): [], - } - for soc in all_socs: - if soc in soc_sets[tech]: - entry = soc - if soc_sets[tech][soc]: - entry = {soc: sorted(soc_sets[tech][soc])} - top_table[tech][MaturityLevels.SUPPORTED.get_str()].append(entry) - - # Feature tables - category_results = {} - for cat in sorted(feature_categories): - features = feature_categories[cat] - table = {} - - for feature_name in sorted(features): - feature = f"{cat}_{feature_name}" - table[feature] = { - MaturityLevels.SUPPORTED.get_str(): [], - MaturityLevels.EXPERIMENTAL.get_str(): [], - } - - for soc in all_socs: - if soc in soc_sets[feature]: - status = soc_sets[feature][soc]["status"].get_str() - entry = soc - if soc_sets[feature][soc]["dependent_on"]: - entry = {soc: sorted(soc_sets[feature][soc]["dependent_on"])} - table[feature][status].append(entry) - - category_results[cat] = table - - output = { - "version": __version__, - "all_socs": all_socs, - "top_level": top_table, - "features": category_results, - } - - # Save to local file - if save_output: - with open(save_output, "w") as f: - yaml.safe_dump(output, f) - - # Upload to Azure - if publish_results: - cc = ContainerClient.from_connection_string( - AZ_CONN_STR.format(access_key), AZ_CONTAINER - ) - - filename = UPLOAD_FILENAME.format(commit_sha) - upload_data(filename, output, cc) - - -if __name__ == "__main__": - build_output = os.environ.get("TWISTER_OUT_DIR", None) - access_key = os.environ.get("AZURE_REPORT_CACHE_ACCESS_KEY", None) - - parser = argparse.ArgumentParser(allow_abbrev=False) - - parser.add_argument( - "-bo", - "--build-output", - default=build_output, - type=Path, - help="Twister output directory. " - "The environment variable TWISTER_OUT_DIR is used by default.", - ) - - parser.add_argument( - "-f", - "--input-file", - default=Path(__file__).parent / "software_maturity_features.yaml", - type=Path, - help="Input YAML file name. " - "Defaults to look for 'software_maturity_features.yaml' in the local directory.", - ) - - parser.add_argument( - "-o", - "--save-output", - type=Path, - default=None, - help="If not None, save results to the specified local file.", - ) - - parser.add_argument( - "--publish-results", - action="store_true", - help="Store the results in Azure blob storage. " - "This should only be done by the CI build system. " - "Requires the --access-key option.", - ) - - parser.add_argument( - "-a", - "--access-key", - default=access_key, - type=str, - help="Azure access key. " - "The environment variable AZURE_REPORT_CACHE_ACCESS_KEY is used by default.", - ) - - parser.add_argument( - "-sha", - "--commit-sha", - default=None, - type=str, - help="Git SHA of the commit used to produce the build output.", - ) - - args = parser.parse_args() - - if not args.save_output and not args.publish_results: - sys.exit( - "Must be run with one of the following options:\n" - "--save-output or --publish-results.\n" - "Use --help for more information." - ) - elif args.publish_results and not args.access_key: - sys.exit( - "Azure access key not found, please supply it using the" - "--access-key option or set the AZURE_REPORT_CACHE_ACCESS_KEY" - "environment variable and retry." - ) - elif args.publish_results and not args.commit_sha: - sys.exit( - "Git SHA of the commit used to produce the build output " - "must be supplied to publish the results." - ) - - if not args.build_output: - sys.exit( - "twister output directory not provided, please provide it " - "as an argument or set the TWISTER_OUT_DIR environment " - "variable and retry." - ) - - generate_tables( - args.build_output, - args.input_file, - args.save_output, - args.publish_results, - args.access_key, - args.commit_sha, - ) diff --git a/doc/_utils/redirects.py b/doc/_utils/redirects.py index dec13c2fa87a..2c6a321af43d 100644 --- a/doc/_utils/redirects.py +++ b/doc/_utils/redirects.py @@ -34,9 +34,10 @@ ("device_guides/working_with_nrf/nrf70/gs", "gsg_guides/nrf7002_gs"), ("device_guides/working_with_nrf/nrf53/nrf5340_gs", "gsg_guides"), # Getting started with nRF5340 DK (removed in v2.8.0) ("gsg_guides/nrf5340_gs", "gsg_guides"), - ("ug_thingy53_gs", "gsg_guides/thingy53_gs"), # Getting started with Thingy:53 - ("working_with_nrf/nrf53/thingy53_gs", "gsg_guides/thingy53_gs"), - ("device_guides/working_with_nrf/nrf53/thingy53_gs", "gsg_guides/thingy53_gs"), + ("ug_thingy53_gs", "app_dev/device_guides/thingy53/thingy53_precompiled"), # Getting started with Thingy:53 (removed in v3.0.0) + ("working_with_nrf/nrf53/thingy53_gs", "app_dev/device_guides/thingy53/thingy53_precompiled"), + ("device_guides/working_with_nrf/nrf53/thingy53_gs", "app_dev/device_guides/thingy53/thingy53_precompiled"), + ("gsg_guides/thingy53_gs", "app_dev/device_guides/thingy53/thingy53_precompiled"), ("ug_nrf52_gs", "gsg_guides"), # Getting started with nRF52 Series (removed in v2.8.0) ("working_with_nrf/nrf52/gs", "gsg_guides"), ("device_guides/working_with_nrf/nrf52/gs", "gsg_guides"), @@ -58,7 +59,6 @@ ("config_and_build/board_support/index", "app_dev/board_support/index"), ("config_and_build/board_support/board_names", "app_dev/board_support/board_names"), # Board names ("config_and_build/board_support/processing_environments", "app_dev/board_support/processing_environments"), # Processing environments - ("config_and_build/board_support/defining_custom_board", "app_dev/board_support/defining_custom_board"), # Defining custom board ("gs_modifying", "app_dev/config_and_build/index"), # Configuring and building (landing) ("getting_started/modifying", "app_dev/config_and_build/index"), ("config_and_build/modifying", "app_dev/config_and_build/index"), @@ -150,26 +150,29 @@ ("ug_nrf9161", "app_dev/device_guides/nrf91/index"), ## Developing with nRF9161 (pre-2.7.0; removed) ("working_with_nrf/nrf91/nrf9161", "app_dev/device_guides/nrf91/index"), ("device_guides/working_with_nrf/nrf91/nrf9161", "app_dev/device_guides/nrf91/index"), - ("ug_thingy91", "app_dev/device_guides/nrf91/index"), ## Developing with Thingy:91 (pre-2.7.0; removed) - ("working_with_nrf/nrf91/thingy91", "app_dev/device_guides/nrf91/index"), - ("device_guides/working_with_nrf/nrf91/thingy91", "app_dev/device_guides/nrf91/index"), ("ug_nrf91_features", "app_dev/device_guides/nrf91/nrf91_features"), # Features of nRF91 Series ("working_with_nrf/nrf91/nrf91_features", "app_dev/device_guides/nrf91/nrf91_features"), ("device_guides/working_with_nrf/nrf91/nrf91_features", "app_dev/device_guides/nrf91/nrf91_features"), ("device_guides/nrf91/nrf91_features", "app_dev/device_guides/nrf91/nrf91_features"), ("device_guides/nrf91/nrf91_board_controllers", "app_dev/device_guides/nrf91/nrf91_board_controllers"), # Configuring board controller ("device_guides/nrf91/nrf91_cloud_certificate", "app_dev/device_guides/nrf91/nrf91_cloud_certificate"), # Updating the nRF Cloud certificate - ("device_guides/nrf91/thingy91_connecting", "app_dev/device_guides/nrf91/thingy91_connecting"), # Connecting to Thingy:91 ("device_guides/nrf91/nrf91_dk_updating_fw_programmer", "app_dev/device_guides/nrf91/nrf91_dk_updating_fw_programmer"), # Updating the firmware for nRF91 Series devices (landing) - ("device_guides/nrf91/nrf91_updating_fw_programmer", "app_dev/device_guides/nrf91/nrf91_updating_fw_programmer"), # Updating the DK firmware using Programmer - ("device_guides/nrf91/thingy91_updating_fw_programmer", "app_dev/device_guides/nrf91/thingy91_updating_fw_programmer"), # Updating the Thingy:91 firmware using Programmer + ("device_guides/nrf91/nrf91_updating_fw_programmer", "app_dev/device_guides/nrf91/nrf91_dk_updating_fw_programmer"), # Updating the DK firmware using Programmer ("device_guides/nrf91/nrf91_building", "app_dev/device_guides/nrf91/nrf91_building"), # Configuring and building with nRF91 Series ("device_guides/nrf91/nrf91_programming", "app_dev/device_guides/nrf91/nrf91_programming"), # Programming onto nRF91 Series devices ("device_guides/nrf91/nrf91_testing_at_client", "app_dev/device_guides/nrf91/nrf91_testing_at_client"), # Testing the cellular connection on nRF91 Series DK ("device_guides/working_with_nrf/nrf91/nrf91_snippet", "app_dev/device_guides/nrf91/nrf91_snippet"), # Snippets for an nRF91 Series device ("device_guides/nrf91/nrf91_snippet", "app_dev/device_guides/nrf91/nrf91_snippet"), ("device_guides/nrf91/nrf9160_external_flash", "app_dev/device_guides/nrf91/nrf9160_external_flash"), # Configuring external flash memory on the nRF9160 DK - ("ug_nrf70", "app_dev/device_guides/nrf70/index"), # Developing with nRF70 Series (post-2.7.0 landing) + ("ug_thingy91", "app_dev/device_guides/thingy91/index"), ## Developing with Thingy:91 (pre-2.7.0; removed) + ("working_with_nrf/nrf91/thingy91", "app_dev/device_guides/thingy91/index"), + ("device_guides/working_with_nrf/nrf91/thingy91", "app_dev/device_guides/thingy91/index"), + ("device_guides/nrf91/thingy91_connecting", "app_dev/device_guides/thingy91/thingy91_connecting"), # Connecting to Thingy:91 + ("app_dev/device_guides/nrf91/thingy91_connecting", "app_dev/device_guides/thingy91/thingy91_connecting"), + ("device_guides/nrf91/thingy91_updating_fw_programmer", "app_dev/device_guides/thingy91/thingy91_updating_fw_programmer"), # Updating the Thingy:91 firmware using Programmer + ("app_dev/device_guides/nrf91/thingy91_updating_fw_programmer", "app_dev/device_guides/thingy91/thingy91_updating_fw_programmer"), + ("device_guides/nrf91/thingy91x_updating_fw_programmer", "app_dev/device_guides/thingy91x/thingy91x_updating_fw_programmer"), # Updating the Thingy:91 X firmware using nRF Util + ("ug_nrf70", "app_dev/device_guides/nrf70/index"), ## Developing with nRF70 Series (post-2.7.0 landing) ("device_guides/nrf70", "app_dev/device_guides/nrf70/index"), ("device_guides/nrf70/index", "app_dev/device_guides/nrf70/index"), ("ug_nrf70_developing", "app_dev/device_guides/nrf70/index"), ## Developing with nRF70 Series (pre-2.7.0 landing; removed) @@ -201,33 +204,10 @@ ("app_dev/device_guides/working_with_nrf/nrf54l/features", "app_dev/device_guides/nrf54l/features"), ("device_guides/working_with_nrf/nrf54l/nrf54l15_gs", "gsg_guides"), # Getting started with nRF54L15 PDK (removed after 2.8.0) ("app_dev/device_guides/working_with_nrf/nrf54l/nrf54l15_gs", "gsg_guides"), - ("device_guides/working_with_nrf/nrf54l/testing_dfu", "app_dev/device_guides/nrf54l/testing_dfu"), # Testing the DFU solution - ("app_dev/device_guides/working_with_nrf/nrf54l/testing_dfu", "app_dev/device_guides/nrf54l/testing_dfu"), - ("device_guides/nrf54h", "app_dev/device_guides/nrf54h"), # Developing with nRF54H Series - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_gs", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_gs"), # Getting started with the nRF54H20 DK - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_app_samples", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_app_samples"), # nRF54H20 applications and samples (orphaned as of 2.7.0) - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture"), # Architecture of nRF54H20 (landing) - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_cpu", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_cpu"), # nRF54H20 Domains - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_memory", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_memory"), # nRF54H20 Memory Layout - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_ipc", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_ipc"), # Interprocessor Communication in nRF54H20 - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_boot", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_boot"), # nRF54H20 Boot Sequence - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_lifecycle", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_lifecycle"), # nRF54H20 lifecycle states - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_configuration", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_configuration"), # Configuring the nRF54H20 DK - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_logging", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_logging"), # nRF54H20 logging (orphaned as of 2.7.0) - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_nrf7002ek", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_nrf7002ek"), # Working with the nRF54H20 DK and the nRF7002 EK (orphaned as of 2.7.0) - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu"), # Device Firmware Update using SUIT (landing) - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_intro", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_intro"), # Introduction to SUIT - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_manifest_overview", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_manifest_overview"), # SUIT manifest overview - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_qsg", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_qsg"), # Customize SUIT DFU quick start guide - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_dfu", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_dfu"), # How to customize the SUIT DFU process - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_fetch", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_fetch"), # How to fetch payloads - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_external_memory", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_external_memory"), # Firmware upgrade with external memory - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_components", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_components"), # SUIT components - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_hierarchical_manifests", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_hierarchical_manifests"), # Hierarchical manifests - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_compare_other_dfu", "app_dev/bootloaders_dfu/index"), # DFU and bootloader comparison (removed after 2.7.0) > Bootloaders and DFU (landing) - ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_compare_other_dfu", "app_dev/bootloaders_dfu/index"), - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_debugging", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_debugging"), # nRF54H20 debugging - ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb", "app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb"), # Configuring your application for a custom PCB + ("device_guides/working_with_nrf/nrf54l/testing_dfu", "app_dev/device_guides/nrf54l/fota_update"), # Testing the DFU solution (removed after 2.8.0) + ("app_dev/device_guides/working_with_nrf/nrf54l/testing_dfu", "app_dev/device_guides/nrf54l/fota_update"), + ("app_dev/device_guides/nrf54l/testing_dfu", "app_dev/device_guides/nrf54l/fota_update"), + ("app_dev/device_guides/nrf54l/snippets", "app_dev/device_guides/nrf54l/index"), # Snippets for nRF54L05 and nRF54L10 (removed after 2.8.0) ("ug_nrf53", "app_dev/device_guides/nrf53/index"), # Developing with nRF53 Series (landing) ("nrf53", "app_dev/device_guides/nrf53/index"), ("device_guides/nrf53", "app_dev/device_guides/nrf53/index"), @@ -236,9 +216,9 @@ ("working_with_nrf/nrf53/nrf5340", "app_dev/device_guides/nrf53/index"), ("device_guides/working_with_nrf/nrf53/nrf5340", "app_dev/device_guides/nrf53/index"), ("device_guides/nrf53/index", "app_dev/device_guides/nrf53/index"), - ("ug_thingy53", "app_dev/device_guides/nrf53/index"), # Developing with Thingy:53 (removed for 2.7.0) - ("working_with_nrf/nrf53/thingy53", "app_dev/device_guides/nrf53/index"), - ("device_guides/working_with_nrf/nrf53/thingy53", "app_dev/device_guides/nrf53/index"), + ("ug_thingy53", "app_dev/device_guides/thingy53/index"), # Developing with Thingy:53 (removed for 2.7.0) + ("working_with_nrf/nrf53/thingy53", "app_dev/device_guides/thingy53/index"), + ("device_guides/working_with_nrf/nrf53/thingy53", "app_dev/device_guides/thingy53/index"), ("device_guides/nrf53/features_nrf53", "app_dev/device_guides/nrf53/features_nrf53"), # Features of nRF53 Series ("device_guides/nrf53/building_nrf53", "app_dev/device_guides/nrf53/building_nrf53"), # Building and programming with nRF53 Series ("device_guides/nrf53/fota_update_nrf5340", "app_dev/device_guides/nrf53/fota_update_nrf5340"), # FOTA updates with nRF5340 DK @@ -246,7 +226,8 @@ ("device_guides/nrf53/simultaneous_multi_image_dfu_nrf5340", "app_dev/device_guides/nrf53/simultaneous_multi_image_dfu_nrf5340"), # Simultaneous multi-image DFU with nRF5340 DK ("device_guides/nrf53/serial_recovery", "app_dev/device_guides/nrf53/serial_recovery"), # MCUboot’s serial recovery of the networking core image ("device_guides/nrf53/logging_nrf5340", "app_dev/device_guides/nrf53/logging_nrf5340"), # Getting logging output with nRF5340 DK - ("device_guides/nrf53/thingy53_application_guide", "app_dev/device_guides/nrf53/thingy53_application_guide"), # Application guide for Thingy:53 + ("device_guides/nrf53/thingy53_application_guide", "app_dev/device_guides/thingy53/thingy53_application_guide"), # Application guide for Thingy:53 + ("app_dev/device_guides/nrf53/thingy53_application_guide", "app_dev/device_guides/thingy53/thingy53_application_guide"), ("device_guides/working_with_nrf/nrf53/qspi_xip_guide", "app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340"), # External execute in place (XIP) configuration on the nRF5340 SoC ("device_guides/nrf53/qspi_xip_guide_nrf5340", "app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340"), ("ug_nrf52", "app_dev/device_guides/nrf52/index"), # Developing with nRF52 Series (landing) @@ -281,6 +262,8 @@ ("device_guides/fem/fem_incomplete_connections", "app_dev/device_guides/fem/fem_incomplete_connections"), # Use case of incomplete physical connections to the FEM module ("device_guides/fem/fem_power_models", "app_dev/device_guides/fem/fem_power_models"), # Using FEM power models ("device_guides/fem/21540ek_dev_guide", "app_dev/device_guides/fem/21540ek_dev_guide"), # Developing with the nRF21540 EK + ("config_and_build/board_support/defining_custom_board", "app_dev/device_guides/custom/defining_custom_board"), # Defining custom board + ("app_dev/board_support/defining_custom_board", "app_dev/device_guides/custom/defining_custom_board"), ("ug_radio_coex", "app_dev/device_guides/wifi_coex"), # Coexistence of short-range radio and other radios ("app_dev/wifi_coex/index", "app_dev/device_guides/wifi_coex"), ("device_guides/wifi_coex", "app_dev/device_guides/wifi_coex"), @@ -305,7 +288,8 @@ ("app_dev/ap_protect/index", "security/ap_protect"), # Enabling access port protection mechanism ("ug_ble_controller", "protocols/bt/index"), # Bluetooth LE Controller ("protocols/ble/index", "protocols/bt/index"), - ("protocols/bt/ble/radio_notification_conn_cb", "libraries/bluetooth_services/radio_notification_conn_cb"), + ("protocols/bt/ble/index", "protocols/bt/bt_stack_arch"), + ("protocols/bt/ble/radio_notification_conn_cb", "libraries/bluetooth/radio_notification_conn_cb"), ("ug_bt_mesh", "protocols/bt/bt_mesh/index"), # Bluetooth Mesh (landing) ("protocols/bt_mesh/index", "protocols/bt/bt_mesh/index"), ("ug_bt_mesh_supported_features", "protocols/bt/bt_mesh/overview/index"), # Supported Bluetooth Mesh features (file removed; part of the overview index page now) @@ -414,6 +398,8 @@ ("ug_zigbee_tools", "protocols/zigbee/tools"), # Zigbee tools ("applications/nrf5340_audio/README", "applications/nrf5340_audio/index"), # nRF5340 Audio applications (landing) ("samples/samples_bl", "samples/bl"), # Bluetooth samples (landing) + ("samples/bluetooth/connection_event_trigger/README", "samples/bluetooth/event_trigger/README"), + ("samples/bluetooth/broadcast_config_tool/README", "samples/bluetooth/nrf_auraconfig/README"), ("samples/samples_nrf9160", "samples/cellular"), # Cellular samples (landing) ("samples/samples_crypto", "samples/crypto"), # Cryptography samples (landing) ("samples/samples_edge", "samples/edge"), # Edge Impulse samples (landing) @@ -427,6 +413,107 @@ ("samples/wifi/sr_coex/README", "samples/wifi/ble_coex/README"), # Wi-Fi: Bluetooth LE coexistence ("samples/samples_zigbee", "samples/zigbee"), # Zigbee samples (landing) ("samples/samples_other", "samples/other"), # Other samples (landing) + ("libraries/bluetooth_services/index", "libraries/bluetooth/index"), # Changed the folder name libraries/bluetooth_services to libraries/bluetooth to better match the include folder structure + ("libraries/bluetooth_services/adv_prov", "libraries/bluetooth/adv_prov"), + ("libraries/bluetooth_services/conn_ctx", "libraries/bluetooth/conn_ctx"), + ("libraries/bluetooth_services/enocean", "libraries/bluetooth/enocean"), + ("libraries/bluetooth_services/gatt_dm", "libraries/bluetooth/gatt_dm"), + ("libraries/bluetooth_services/gatt_pool", "libraries/bluetooth/gatt_pool"), + ("libraries/bluetooth_services/mesh", "libraries/bluetooth/mesh"), + ("libraries/bluetooth_services/mesh/model_types", "libraries/bluetooth/mesh/model_types"), + ("libraries/bluetooth_services/mesh/gen_onoff", "libraries/bluetooth/mesh/gen_onoff"), + ("libraries/bluetooth_services/mesh/gen_onoff_srv", "libraries/bluetooth/mesh/gen_onoff_srv"), + ("libraries/bluetooth_services/mesh/gen_onoff_cli", "libraries/bluetooth/mesh/gen_onoff_cli"), + ("libraries/bluetooth_services/mesh/gen_lvl", "libraries/bluetooth/mesh/gen_lvl"), + ("libraries/bluetooth_services/mesh/gen_lvl_srv", "libraries/bluetooth/mesh/gen_lvl_srv"), + ("libraries/bluetooth_services/mesh/gen_lvl_cli", "libraries/bluetooth/mesh/gen_lvl_cli"), + ("libraries/bluetooth_services/mesh/gen_dtt", "libraries/bluetooth/mesh/gen_dtt"), + ("libraries/bluetooth_services/mesh/gen_dtt_srv", "libraries/bluetooth/mesh/gen_dtt_srv"), + ("libraries/bluetooth_services/mesh/gen_dtt_cli", "libraries/bluetooth/mesh/gen_dtt_cli"), + ("libraries/bluetooth_services/mesh/gen_ponoff", "libraries/bluetooth/mesh/gen_ponoff"), + ("libraries/bluetooth_services/mesh/gen_ponoff_srv", "libraries/bluetooth/mesh/gen_ponoff_srv"), + ("libraries/bluetooth_services/mesh/gen_ponoff_cli", "libraries/bluetooth/mesh/gen_ponoff_cli"), + ("libraries/bluetooth_services/mesh/gen_plvl", "libraries/bluetooth/mesh/gen_plvl"), + ("libraries/bluetooth_services/mesh/gen_plvl_srv", "libraries/bluetooth/mesh/gen_plvl_srv"), + ("libraries/bluetooth_services/mesh/gen_plvl_cli", "libraries/bluetooth/mesh/gen_plvl_cli"), + ("libraries/bluetooth_services/mesh/gen_battery", "libraries/bluetooth/mesh/gen_battery"), + ("libraries/bluetooth_services/mesh/gen_battery_srv", "libraries/bluetooth/mesh/gen_battery_srv"), + ("libraries/bluetooth_services/mesh/gen_battery_cli", "libraries/bluetooth/mesh/gen_battery_cli"), + ("libraries/bluetooth_services/mesh/gen_loc", "libraries/bluetooth/mesh/gen_loc"), + ("libraries/bluetooth_services/mesh/gen_loc_srv", "libraries/bluetooth/mesh/gen_loc_srv"), + ("libraries/bluetooth_services/mesh/gen_loc_cli", "libraries/bluetooth/mesh/gen_loc_cli"), + ("libraries/bluetooth_services/mesh/gen_prop", "libraries/bluetooth/mesh/gen_prop"), + ("libraries/bluetooth_services/mesh/gen_prop_srv", "libraries/bluetooth/mesh/gen_prop_srv"), + ("libraries/bluetooth_services/mesh/gen_prop_cli", "libraries/bluetooth/mesh/gen_prop_cli"), + ("libraries/bluetooth_services/mesh/lightness", "libraries/bluetooth/mesh/lightness"), + ("libraries/bluetooth_services/mesh/lightness_srv", "libraries/bluetooth/mesh/lightness_srv"), + ("libraries/bluetooth_services/mesh/lightness_cli", "libraries/bluetooth/mesh/lightness_cli"), + ("libraries/bluetooth_services/mesh/light_ctrl", "libraries/bluetooth/mesh/light_ctrl"), + ("libraries/bluetooth_services/mesh/light_ctrl_srv", "libraries/bluetooth/mesh/light_ctrl_srv"), + ("libraries/bluetooth_services/mesh/light_ctrl_cli", "libraries/bluetooth/mesh/light_ctrl_cli"), + ("libraries/bluetooth_services/mesh/light_ctrl_reg", "libraries/bluetooth/mesh/light_ctrl_reg"), + ("libraries/bluetooth_services/mesh/light_ctrl_reg_spec", "libraries/bluetooth/mesh/light_ctrl_reg_spec"), + ("libraries/bluetooth_services/mesh/light_ctl", "libraries/bluetooth/mesh/light_ctl"), + ("libraries/bluetooth_services/mesh/light_ctl_cli", "libraries/bluetooth/mesh/light_ctl_cli"), + ("libraries/bluetooth_services/mesh/light_ctl_srv", "libraries/bluetooth/mesh/light_ctl_srv"), + ("libraries/bluetooth_services/mesh/light_temp_srv", "libraries/bluetooth/mesh/light_temp_srv"), + ("libraries/bluetooth_services/mesh/light_xyl", "libraries/bluetooth/mesh/light_xyl"), + ("libraries/bluetooth_services/mesh/light_xyl_cli", "libraries/bluetooth/mesh/light_xyl_cli"), + ("libraries/bluetooth_services/mesh/light_xyl_srv", "libraries/bluetooth/mesh/light_xyl_srv"), + ("libraries/bluetooth_services/mesh/light_hsl", "libraries/bluetooth/mesh/light_hsl"), + ("libraries/bluetooth_services/mesh/light_hsl_cli", "libraries/bluetooth/mesh/light_hsl_cli"), + ("libraries/bluetooth_services/mesh/light_hsl_srv", "libraries/bluetooth/mesh/light_hsl_srv"), + ("libraries/bluetooth_services/mesh/light_hue_srv", "libraries/bluetooth/mesh/light_hue_srv"), + ("libraries/bluetooth_services/mesh/light_sat_srv", "libraries/bluetooth/mesh/light_sat_srv"), + ("libraries/bluetooth_services/mesh/sensor_models", "libraries/bluetooth/mesh/sensor_models"), + ("libraries/bluetooth_services/mesh/sensor_srv", "libraries/bluetooth/mesh/sensor_srv"), + ("libraries/bluetooth_services/mesh/sensor_cli", "libraries/bluetooth/mesh/sensor_cli"), + ("libraries/bluetooth_services/mesh/time", "libraries/bluetooth/mesh/time"), + ("libraries/bluetooth_services/mesh/time_tai", "libraries/bluetooth/mesh/time_tai"), + ("libraries/bluetooth_services/mesh/time_srv", "libraries/bluetooth/mesh/time_srv"), + ("libraries/bluetooth_services/mesh/time_cli", "libraries/bluetooth/mesh/time_cli"), + ("libraries/bluetooth_services/mesh/scene", "libraries/bluetooth/mesh/scene"), + ("libraries/bluetooth_services/mesh/scene_srv", "libraries/bluetooth/mesh/scene_srv"), + ("libraries/bluetooth_services/mesh/scene_cli", "libraries/bluetooth/mesh/scene_cli"), + ("libraries/bluetooth_services/mesh/scheduler", "libraries/bluetooth/mesh/scheduler"), + ("libraries/bluetooth_services/mesh/scheduler_srv", "libraries/bluetooth/mesh/scheduler_srv"), + ("libraries/bluetooth_services/mesh/scheduler_cli", "libraries/bluetooth/mesh/scheduler_cli"), + ("libraries/bluetooth_services/mesh/vnd/silvair_enocean_srv", "libraries/bluetooth/mesh/vnd/silvair_enocean_srv"), + ("libraries/bluetooth_services/mesh/vnd/dm", "libraries/bluetooth/mesh/vnd/dm"), + ("libraries/bluetooth_services/mesh/vnd/dm_srv", "libraries/bluetooth/mesh/vnd/dm_srv"), + ("libraries/bluetooth_services/mesh/vnd/dm_cli", "libraries/bluetooth/mesh/vnd/dm_cli"), + ("libraries/bluetooth_services/mesh/vnd/le_pair_resp", "libraries/bluetooth/mesh/vnd/le_pair_resp"), + ("libraries/bluetooth_services/mesh/models", "libraries/bluetooth/mesh/models"), + ("libraries/bluetooth_services/mesh/properties", "libraries/bluetooth/mesh/properties"), + ("libraries/bluetooth_services/mesh/dk_prov", "libraries/bluetooth/mesh/dk_prov"), + ("libraries/bluetooth_services/mesh/sensor", "libraries/bluetooth/mesh/sensor"), + ("libraries/bluetooth_services/mesh/sensor_types", "libraries/bluetooth/mesh/sensor_types"), + ("libraries/bluetooth_services/radio_notification_conn_cb", "libraries/bluetooth/radio_notification_conn_cb"), + ("libraries/bluetooth_services/rpc", "libraries/bluetooth/rpc"), + ("libraries/bluetooth_services/scan", "libraries/bluetooth/scan"), + ("libraries/bluetooth_services/services/ams_client", "libraries/bluetooth/services/ams_client"), + ("libraries/bluetooth_services/services/ancs_client", "libraries/bluetooth/services/ancs_client"), + ("libraries/bluetooth_services/services/bas_client", "libraries/bluetooth/services/bas_client"), + ("libraries/bluetooth_services/services/bms", "libraries/bluetooth/services/bms"), + ("libraries/bluetooth_services/services/cgms", "libraries/bluetooth/services/cgms"), + ("libraries/bluetooth_services/services/cts_client", "libraries/bluetooth/services/cts_client"), + ("libraries/bluetooth_services/services/ddfs", "libraries/bluetooth/services/ddfs"), + ("libraries/bluetooth_services/services/dfu_smp", "libraries/bluetooth/services/dfu_smp"), + ("libraries/bluetooth_services/services/fast_pair", "libraries/bluetooth/services/fast_pair"), + ("libraries/bluetooth_services/services/gattp", "libraries/bluetooth/services/gattp"), + ("libraries/bluetooth_services/services/hids", "libraries/bluetooth/services/hids"), + ("libraries/bluetooth_services/services/hogp", "libraries/bluetooth/services/hogp"), + ("libraries/bluetooth_services/services/hrs_client", "libraries/bluetooth/services/hrs_client"), + ("libraries/bluetooth_services/services/latency", "libraries/bluetooth/services/latency"), + ("libraries/bluetooth_services/services/latency_client", "libraries/bluetooth/services/latency_client"), + ("libraries/bluetooth_services/services/lbs", "libraries/bluetooth/services/lbs"), + ("libraries/bluetooth_services/services/mds", "libraries/bluetooth/services/mds"), + ("libraries/bluetooth_services/services/nsms", "libraries/bluetooth/services/nsms"), + ("libraries/bluetooth_services/services/nus", "libraries/bluetooth/services/nus"), + ("libraries/bluetooth_services/services/nus_client", "libraries/bluetooth/services/nus_client"), + ("libraries/bluetooth_services/services/rscs", "libraries/bluetooth/services/rscs"), + ("libraries/bluetooth_services/services/throughput", "libraries/bluetooth/services/throughput"), + ("libraries/bluetooth_services/services/wifi_prov", "libraries/bluetooth/services/wifi_prov"), ("libraries/networking/nrf_cloud_agps", "libraries/networking/nrf_cloud_agnss"), # nRF Cloud A-GNSS ("libraries/bootloader/index", "libraries/security/bootloader/index"), # Bootloader libraries (landing) ("libraries/bootloader/bl_crypto", "libraries/security/bootloader/bl_crypto"), # Bootloader crypto @@ -482,4 +569,67 @@ ("software_maturity", "releases_and_maturity/software_maturity"), # Software maturity ("known_issues", "releases_and_maturity/known_issues"), # Known issues ("releases_and_maturity/glossary", "glossary"), # Glossary + # 54H new links + ("device_guides/nrf54h", "app_dev/device_guides/nrf54h/index"), # Developing with nRF54H Series + ("app_dev/device_guides/nrf54h", "app_dev/device_guides/nrf54h/index"), # Developing with nRF54H Series + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_app_samples", "app_dev/device_guides/nrf54h/ug_nrf54h20_app_samples"), # nRF54H20 applications and samples (orphaned as of 2.7.0) + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture"), # Architecture of nRF54H20 (landing) + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_boot", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_boot"), # nRF54H20 Boot Sequence + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_clockman", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_clockman"), # nRF54H20 clock management + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_cpu", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_cpu"), # nRF54H20 Domains + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_ipc", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_ipc"), # Interprocessor Communication in nRF54H20 + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_lifecycle", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_lifecycle"), # nRF54H20 lifecycle states + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_memory", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_memory"), # nRF54H20 Memory Layout + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_pm", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_pm"), # nRF54H20 Power Management + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_reset", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_reset"), # nRF54H20 Reset + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_configuration", "app_dev/device_guides/nrf54h/ug_nrf54h20_configuration"), # Configuring the nRF54H20 DK + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb", "app_dev/device_guides/nrf54h/ug_nrf54h20_custom_pcb"), # Configuring your application for a custom PCB + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_debugging", "app_dev/device_guides/nrf54h/ug_nrf54h20_debugging"), # nRF54H20 debugging + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_flpr", "app_dev/device_guides/nrf54h/ug_nrf54h20_flpr"), # nRF54H20 SoC FLPR guide + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_gs", "app_dev/device_guides/nrf54h/ug_nrf54h20_gs"), # Getting started with the nRF54H20 DK + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_logging", "app_dev/device_guides/nrf54h/ug_nrf54h20_logging"), # nRF54H20 logging (orphaned as of 2.7.0) + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_nrf7002ek", "app_dev/device_guides/nrf54h/ug_nrf54h20_nrf7002ek"), # Working with the nRF54H20 DK and the nRF7002 EK (orphaned as of 2.7.0) + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_components", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_components"), # SUIT components + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_dfu", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_dfu"), # How to customize the SUIT DFU process + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_qsg", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_qsg"), # Customize SUIT DFU quick start guide + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_device_config", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_device_config"), # SUIT device configuration + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_dfu"), # Device Firmware Update using SUIT (landing) + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_external_memory", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_external_memory"), # Firmware upgrade with external memory + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_fetch", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_fetch"), # How to fetch payloads + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_hierarchical_manifests", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_hierarchical_manifests"), # Hierarchical manifests + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_intro", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_intro"), # Introduction to SUIT + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_manifest_overview", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_manifest_overview"), # SUIT manifest overview + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_push", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_push"), # SUIT push + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_recovery", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_recovery"), # SUIT recovery + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_sdfw_sdrfw_update", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_sdfw_sdrfw_update"), # SUIT SoC binaries update + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_smp", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_smp"), # SUIT SMP protocol + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_soc_binaries", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_soc_binaries"), # SUIT SoC binaries + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_compare_other_dfu", "app_dev/bootloaders_dfu/index"), # DFU and bootloader comparison (removed after 2.7.0) > Bootloaders and DFU (landing) + ("app_dev/device_guides/working_with_nrf/nrf54h", "app_dev/device_guides/nrf54h/index"), # nRF54H index + # 54H legacy links + ("device_guides/nrf54h", "app_dev/device_guides/nrf54h"), # Developing with nRF54H Series + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_gs", "app_dev/device_guides/nrf54h/ug_nrf54h20_gs"), # Getting started with the nRF54H20 DK + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_app_samples", "app_dev/device_guides/nrf54h/ug_nrf54h20_app_samples"), # nRF54H20 applications and samples (orphaned as of 2.7.0) + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture"), # Architecture of nRF54H20 (landing) + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_cpu", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_cpu"), # nRF54H20 Domains + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_memory", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_memory"), # nRF54H20 Memory Layout + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_ipc", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_ipc"), # Interprocessor Communication in nRF54H20 + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_boot", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_boot"), # nRF54H20 Boot Sequence + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_lifecycle", "app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_lifecycle"), # nRF54H20 lifecycle states + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_configuration", "app_dev/device_guides/nrf54h/ug_nrf54h20_configuration"), # Configuring the nRF54H20 DK + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_logging", "app_dev/device_guides/nrf54h/ug_nrf54h20_logging"), # nRF54H20 logging (orphaned as of 2.7.0) + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_nrf7002ek", "app_dev/device_guides/nrf54h/ug_nrf54h20_nrf7002ek"), # Working with the nRF54H20 DK and the nRF7002 EK (orphaned as of 2.7.0) + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_dfu"), # Device Firmware Update using SUIT (landing) + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_intro", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_intro"), # Introduction to SUIT + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_manifest_overview", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_manifest_overview"), # SUIT manifest overview + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_qsg", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_qsg"), # Customize SUIT DFU quick start guide + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_dfu", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_dfu"), # How to customize the SUIT DFU process + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_fetch", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_fetch"), # How to fetch payloads + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_external_memory", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_external_memory"), # Firmware upgrade with external memory + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_components", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_components"), # SUIT components + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_hierarchical_manifests", "app_dev/device_guides/nrf54h/ug_nrf54h20_suit_hierarchical_manifests"), # Hierarchical manifests + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_compare_other_dfu", "app_dev/bootloaders_dfu/index"), # DFU and bootloader comparison (removed after 2.7.0) > Bootloaders and DFU (landing) + ("app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_compare_other_dfu", "app_dev/bootloaders_dfu/index"), + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_debugging", "app_dev/device_guides/nrf54h/ug_nrf54h20_debugging"), # nRF54H20 debugging + ("device_guides/working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb", "app_dev/device_guides/nrf54h/ug_nrf54h20_custom_pcb"), # Configuring your application for a custom PCB ] diff --git a/doc/_zoomin/ncs.tags.yml b/doc/_zoomin/ncs.tags.yml index fb420c1337f8..a3e934b56f04 100644 --- a/doc/_zoomin/ncs.tags.yml +++ b/doc/_zoomin/ncs.tags.yml @@ -9,50 +9,71 @@ mapping_global: # Tags for individual topics: mapping_topics: - nrf/index.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", - "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", "nrf9161", "nrf9151", - "nrf9131", "nrf54h20", "nrf54l15", "nrf5340", "thingy53", "nrf52840", - "nrf52833", "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", - "nrf21540", "npm1100", "npm1300", "npm6001"] + "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", "thingy91x", "nrf9161", + "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf54l05", "nrf54l10", + "nrf5340", "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", + "nrf52811", "nrf52810", "nrf52805", "nrf21540", "npm1100", "npm1300", + "npm6001"] - nrf/gsg_guides.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", - "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf5340", - "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", "nrf52811", - "nrf52810", "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001", - "development-kits", "prototyping-platforms", "evaluation-kits", "pmic"] + "thingy91x", "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", + "nrf54l05", "nrf54l10", "nrf5340", "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", "nrf21540", + "npm1100", "npm1300", "npm6001", "development-kits", + "prototyping-platforms", "evaluation-kits", "pmic"] - nrf/gsg_guides/nrf9160_gs.html: ["nrf91-series", "nrf9160", "nrf-cloud", "development-kits", "lte"] - nrf/gsg_guides/thingy91_gsg.html: ["nrf91-series", "thingy91", "nrf9160", "nrf52840", "lte", "prototyping-platforms"] - nrf/gsg_guides/nrf7002_gs.html: ["nrf70-series", "nrf7002", "development-kits"] - - nrf/gsg_guides/thingy53_gs.html: ["nrf53-series", "thingy53", "prototyping-platforms"] - - nrf/gsg_guides/gsg_other.html: ["nrf52-series", "nrf52840", "nrf52833", - "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", - "nrf53-series", "nrf5340", "thingy53", "nrf9161", - "nrf9160", "nrf9151", "thingy91", "development-kits", - "npm1300", "nrf54h20", "nrf54l15", "nrf7002", "evaluation-kits", - "pmic"] + - nrf/gsg_guides/gsg_other.html: ["nrf52-series", "nrf52840", "nrf52833", "nrf52832", "nrf52820", + "nrf52811", "nrf52810", "nrf52805", "nrf53-series", "nrf5340", + "thingy53", "nrf9161", "nrf9160", "nrf9151", "thingy91", + "thingy91x", "development-kits", "npm1300", "nrf54h20", + "nrf54l15", "nrf54l05", "nrf54l10", "nrf7002", + "evaluation-kits", "pmic"] - nrf/installation.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", - "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf5340", - "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", "nrf52811", - "nrf52810", "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001"] + "thingy91x", "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", + "nrf54l05", "nrf54l10", "nrf5340", "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", "nrf21540", + "npm1100", "npm1300", "npm6001"] - nrf/installation/*.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", - "thingy91", "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", - "nrf5340", "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", - "nrf52811", "nrf52810", "nrf52805", "nrf21540", "npm1100", - "npm1300", "npm6001"] + "thingy91", "thingy91x", "nrf9161", "nrf9151", "nrf9131", "nrf54h20", + "nrf54l15", "nrf54l05", "nrf54l10", "nrf5340", "thingy53", "nrf52840", + "nrf52833", "nrf52832", "nrf52820", "nrf52811", "nrf52810", + "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001"] - nrf/app_dev.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", - "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf5340", - "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", "nrf52811", - "nrf52810", "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001"] - - nrf/app_dev/*.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", - "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", - "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf5340", - "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", "nrf52811", - "nrf52810", "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001"] - - nrf/app_dev/create_application.html: ["applications", "nrf-connect-vsc"] + "thingy91x", "nrf9161", "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", + "nrf54l05", "nrf54l10", "nrf5340", "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", "nrf21540", + "npm1100", "npm1300", "npm6001"] + - nrf/app_dev/create_application.html: ["nrf91-series", "nrf70-series", "nrf54-series", + "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", "thingy91x", "nrf9161", + "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf54l05", + "nrf54l10", "nrf5340", "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", "nrf52810", + "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001", + "applications", "nrf-connect-vsc"] + - nrf/app_dev/board_support/*.html: ["nrf91-series", "nrf70-series", "nrf54-series", + "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", "thingy91x", "nrf9161", + "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf54l05", + "nrf54l10", "nrf5340", "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", + "nrf21540", "npm1100", "npm1300", "npm6001"] + - nrf/app_dev/config_and_build/*.html: ["nrf91-series", "nrf70-series", "nrf54-series", + "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", "thingy91x", "nrf9161", + "nrf9151", "nrf9131", "nrf54h20", "nrf54l15", "nrf54l05", + "nrf54l10", nrf5340", "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", "nrf52810", + "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001"] + - nrf/app_dev/config_and_build/config_and_build_system.html: ["applications", "samples", + "kconfig"] - nrf/app_dev/config_and_build/cmake/index.html: ["applications", "samples", "kconfig", "development-kits", "evaluation-kits", "prototyping-platforms", "nrf-connect-vsc"] @@ -70,58 +91,127 @@ mapping_topics: - nrf/app_dev/config_and_build/output_build_files.html: ["applications", "samples", "kconfig", "development-kits", "evaluation-kits", "prototyping-platforms"] - - nrf/app_dev/programming.html: ["applications", "samples", "development-kits", "evaluation-kits", - "prototyping-platforms"] - - nrf/app_dev/companion_components.html: ["applications", "samples", "development-kits", + - nrf/app_dev/programming.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", + "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", + "thingy91", "thingy91x", "nrf9161", "nnrf9151", "nrf9131", + "nrf54h20", "nrf54l15", "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", + "nrf52811", "nrf52810", "nrf52805", "nrf21540", "npm1100", + "npm1300", "npm6001", "applications", "samples", + "development-kits", "evaluation-kits", "prototyping-platforms"] + - nrf/app_dev/companion_components.html: ["nrf91-series", "nrf70-series", "nrf54-series", + "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", "thingy91x", + "nrf9161", "nnrf9151", "nrf9131", "nrf54h20", + "nrf54l15", "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", "nrf52832", + "nrf52820", "nrf52811", "nrf52810", "nrf52805", + "nrf21540", "npm1100", "npm1300", "npm6001", + "applications", "samples", "development-kits", "evaluation-kits", "prototyping-platforms"] - - nrf/app_dev/bootloaders_dfu/*.html: ["applications"] + - nrf/app_dev/bootloaders_dfu/index.html: ["nrf91-series", "nrf70-series", "nrf54-series", + "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", "thingy91x", + "nrf9161", "nrf9151", "nrf9131", "nrf54h20", + "nrf54l15", "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", "nrf52832", + "nrf52820", "nrf52811", "nrf52810", "nrf52805", + "nrf21540", "npm1100", "npm1300", "npm6001"] + - nrf/app_dev/bootloaders_dfu/mcuboot_nsib/*.html: ["nrf91-series", "nrf70-series", + "nrf54-series", "nrf53-series", + "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", "thingy91x", + "nrf9161", "nrf9151", "nrf9131", "nrf54h20", + "nrf54l15", "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", + "nrf52810", "nrf52805", "nrf21540", "npm1100", + "npm1300", "npm6001", "applications"] - nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_adding.html: ["kconfig"] - nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_config.html: ["kconfig"] - - nrf/app_dev/device_guides/nrf91/index.html: ["nrf9160", "thingy91", "nrf9161", "nrf9151", - "nrf9131", "development-kits", "dect-nr+", - "prototyping-platforms"] + - nrf/app_dev/bootloaders_dfu/qspi_xip_split_image.html: ["nrf52840", "thingy53", "nrf5340"] + - nrf/app_dev/bootloaders_dfu/dfu_tools_mcumgr_cli.html: ["nrf91-series", "nrf70-series", + "nrf54-series", "nrf53-series", + "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", + "thingy91x", "nrf9161", "nrf9151", + "nrf9131", "nrf54h20", "nrf54l15", + "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", + "nrf52810", "nrf52805", "nrf21540", + "npm1100", "npm1300", "npm6001"] + - nrf/app_dev/bootloaders_dfu/mcuboot_image_compression.html: ["nrf91-series", "nrf70-series", + "nrf54-series", "nrf53-series", + "nrf52-series", "nrf7002", + "nrf7001", "nrf7000", "nrf9160", + "thingy91", "thingy91x", "nrf9161", + "nrf9151", "nrf9131", "nrf54h20", + "nrf54l15", "nrf54l05", "nrf54l10", + "nrf5340", "thingy53", "nrf52840", + "nrf52833", "nrf52832", "nrf52820", + "nrf52811", "nrf52810", "nrf52805", + "nrf21540", "npm1100", "npm1300", + "npm6001"] + - nrf/app_dev/bootloaders_dfu/sysbuild_image_ids.html: ["nrf91-series", "nrf70-series", + "nrf54-series", "nrf53-series", + "nrf52-series", "nrf7002", "nrf7001", + "nrf7000", "nrf9160", "thingy91", + "thingy91x", "nrf9161", "nrf9151", + "nrf9131", "nrf54h20", "nrf54l15", + "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", + "nrf52832", "nrf52820", "nrf52811", + "nrf52810", "nrf52805", "nrf21540", + "npm1100", "npm1300", "npm6001"] + - nrf/app_dev/device_guides/nrf91/index.html: ["nrf9160", "nrf9161", "thingy91", "thingy91x", + "nrf9151", "nrf9131", "development-kits", + "dect-nr+", "prototyping-platforms"] - nrf/app_dev/device_guides/nrf91/*.html: ["nrf91-series", "lte"] - - nrf/app_dev/device_guides/nrf91/nrf91_features.html: ["nrf9160", "thingy91", "nrf9151", - "nrf9161", "nrf9131", "development-kits", + - nrf/app_dev/device_guides/nrf91/nrf91_features.html: ["nrf9160", "thingy91", "thingy91x", + "nrf9151", "nrf9161", "nrf9131", + "development-kits", "prototyping-platforms", "dect-nr+"] - nrf/app_dev/device_guides/nrf91/nrf91_board_controllers.html: ["nrf9160", "nrf9161", "nrf9151", "nrf9161", "development-kits"] - nrf/app_dev/device_guides/nrf91/nrf91_cloud_certificate.html: ["nrf9160", "nrf9161", "nrf9151", "development-kits", "nrf-cloud"] - - nrf/app_dev/device_guides/nrf91/thingy91_connecting.html: ["thingy91", "prototyping-platforms"] - nrf/app_dev/device_guides/nrf91/nrf91_dk_updating_fw_programmer.html: ["nrf9160", "nrf9161", "nrf9151", "development-kits"] - - nrf/app_dev/device_guides/nrf91/thingy91_updating_fw_programmer.html: ["thingy91", "nrf9160", - "prototyping-platforms"] - - nrf/app_dev/device_guides/nrf91/nrf91_building.html: ["nrf9160", "thingy91", "nrf9161", - "nrf9151", "development-kits", + - nrf/app_dev/device_guides/nrf91/nrf91_building.html: ["nrf9160", "thingy91", "thingy91x", + "nrf9161", "nrf9151", "development-kits", "prototyping-platforms"] - - nrf/app_dev/device_guides/nrf91/nrf91_programming.html: ["nrf9160", "thingy91", "nrf9161", - "nrf9151", "development-kits", + - nrf/app_dev/device_guides/nrf91/nrf91_programming.html: ["nrf9160", "thingy91", "thingy91x", + "nrf9161", "nrf9151", + "development-kits", "prototyping-platforms"] - nrf/app_dev/device_guides/nrf91/nrf91_testing_at_client.html: ["nrf9160", "nrf9161", "nrf9151", "development-kits"] - - nrf/app_dev/device_guides/nrf91/nrf91_snippet.html: ["nrf9160", "thingy91", "nrf9161", - "nrf9151", "nrf9131", "development-kits", + - nrf/app_dev/device_guides/nrf91/nrf91_snippet.html: ["nrf9160", "thingy91", "thingy91x", + "nrf9161", "nrf9151", "nrf9131", + "development-kits", "prototyping-platforms"] - nrf/app_dev/device_guides/nrf91/nrf9160_external_flash.html: ["nrf9160", "development-kits"] - - nrf/app_dev/device_guides/nrf70/index.html: ["evaluation-kits"] + - nrf/app_dev/device_guides/thingy91/*.html: ["thingy91", "prototyping-platforms", "nrf91-series", + "lte"] + - nrf/app_dev/device_guides/thingy91/thingy91_updating_fw_programmer.html: ["nrf9160"] + - nrf/app_dev/device_guides/thingy91x/*.html: ["thingy91x", "prototyping-platforms", + "nrf91-series", "lte"] + - nrf/app_dev/device_guides/thingy91x/thingy91x_updating_fw_programmer.html: ["nrf9151"] - nrf/app_dev/device_guides/nrf70/*.html: ["nrf70-series", "nrf7002", "nrf7001", "nrf7000", "development-kits"] + - nrf/app_dev/device_guides/nrf70/index.html: ["evaluation-kits"] - nrf/app_dev/device_guides/nrf70/nrf7002ek_dev_guide.html: ["evaluation-kits"] - nrf/app_dev/device_guides/nrf70/constrained.html: ["kconfig"] - nrf/app_dev/device_guides/nrf54l/*.html: ["nrf54-series", "nrf54l15"] - - nrf/app_dev/device_guides/nrf54h.html: ["nrf54-series", "nrf54h20", "development-kits"] - - nrf/app_dev/device_guides/working_with_nrf/nrf54h/*.html: ["nrf54-series", "nrf54h20", - "development-kits"] + - nrf/app_dev/device_guides/nrf54h/*.html: ["nrf54-series", "nrf54h20", "development-kits"] - nrf/app_dev/device_guides/nrf53/index.html: ["nrf5340", "thingy53", "development-kits", "prototyping-platforms"] - nrf/app_dev/device_guides/nrf53/*.html: ["nrf53-series"] - nrf/app_dev/device_guides/nrf53/features_nrf53.html: ["nrf5340", "thingy53", "development-kits", "prototyping-platforms"] - - nrf/app_dev/device_guides/nrf53/building_nrf53.html: ["nrf5340", "thingy53", "development-kits", - "prototyping-platforms", + - nrf/app_dev/device_guides/nrf53/building_nrf53.html: ["nrf5340", "development-kits", "nrf-connect-vsc"] - nrf/app_dev/device_guides/nrf53/fota_update_nrf5340.html: ["nrf5340", "development-kits"] - nrf/app_dev/device_guides/nrf53/multi_image_nrf5340.html: ["nrf5340", "development-kits"] @@ -129,9 +219,8 @@ mapping_topics: "development-kits"] - /nrf/app_dev/device_guides/nrf53/serial_recovery.html: ["nrf5340", "development-kits"] - /nrf/app_dev/device_guides/nrf53/logging_nrf5340.html: ["nrf5340", "development-kits"] - - nrf/app_dev/device_guides/nrf53/thingy53_application_guide.html: ["thingy53", - "prototyping-platforms"] - nrf/app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340.html: ["nrf5340", "development-kits"] + - nrf/app_dev/device_guides/thingy53/*.html: ["thingy53", "prototyping-platforms", "nrf53-series"] - nrf/app_dev/device_guides/nrf52/*.html: ["nrf52-series", "development-kits", "nrf52840", "nrf52833", "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805"] @@ -143,19 +232,21 @@ mapping_topics: - nrf/app_dev/device_guides/fem/*.html: ["fem", "nrf21540", "evaluation-kits", "development-kits"] - nrf/app_dev/device_guides/wifi_coex.html: ["kconfig", "ble", "nrf70-series", "nrf7002", "nrf7001", "nrf7000", "wifi"] + - nrf/app_dev/device_guides/custom/*.html: ["development-kits"] - nrf/test_and_optimize.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", - "thingy91", "nrf9161", "nrf9151", "nrf9131", "nrf54h20", - "nrf54l15", "nrf5340", "thingy53", "nrf52840", "nrf52833", - "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", - "nrf21540", "npm1100", "npm1300", "npm6001", "applications", - "samples"] + "thingy91", "thingy91x", "nrf9161", "nrf9151", "nrf9131", + "nrf54h20", "nrf54l15", "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", + "nrf52811", "nrf52810", "nrf52805", "nrf21540", "npm1100", + "npm1300", "npm6001", "applications", "samples"] - nrf/test_and_optimize/*.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", - "thingy91", "nrf9161", "nrf9151", "nrf9131", "nrf54h20", - "nrf54l15", "nrf5340", "thingy53", "nrf52840", "nrf52833", - "nrf52832", "nrf52820", "nrf52811", "nrf52810", "nrf52805", - "nrf21540", "npm1100", "npm1300", "npm6001"] + "thingy91", "thingy91x", "nrf9161", "nrf9151", "nrf9131", + "nrf54h20", "nrf54l15", "nrf54l05", "nrf54l10", "nrf5340", + "thingy53", "nrf52840", "nrf52833", "nrf52832", "nrf52820", + "nrf52811", "nrf52810", "nrf52805", "nrf21540", "npm1100", + "npm1300", "npm6001"] - nrf/test_and_optimize/optimizing/*.html: ["applications", "protocols"] - nrf/test_and_optimize/optimizing/memory.html: ["kconfig", "ble", "blemesh", "gazell", "matter", "nfc", "thread", "zigbee", @@ -208,10 +299,11 @@ mapping_topics: - nrf/protocols/wifi/station_mode/powersave.html: ["power-profiler-kit"] - nrf/applications.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", - "nrf9161", "nrf9151", "nrf54h20", "nrf54l15", "nrf5340", "thingy53", - "nrf52840", "nrf52833", "nrf52832", "nrf52820", "nrf52811", "nrf52810", - "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001", "kconfig", - "development-kits", "prototyping-platforms"] + "thingy91x", "nrf9161", "nrf9151", "nrf54h20", "nrf54l15", "nrf54l05", + "nrf54l10", "nrf5340", "thingy53", "nrf52840", "nrf52833", "nrf52832", + "nrf52820", "nrf52811", "nrf52810", "nrf52805", "nrf21540", "npm1100", + "npm1300", "npm6001", "kconfig", "development-kits", + "prototyping-platforms"] - nrf/applications/*.html: ["applications", "kconfig"] - nrf/applications/connectivity_bridge/README.html: ["lte"] - nrf/applications/matter_bridge/*.html: ["matter", "wifi"] @@ -226,10 +318,10 @@ mapping_topics: - nrf/applications/zigbee_weather_station/README.html: ["zigbee", "thingy53"] - nrf/samples.html: ["nrf91-series", "nrf70-series", "nrf54-series", "nrf53-series", "nrf52-series", "nrf7002", "nrf7001", "nrf7000", "nrf9160", "thingy91", - "nrf9161", "nrf9151", "nrf54h20", "nrf54l15", "nrf5340", "thingy53", - "nrf52840", "nrf52833", "nrf52832", "nrf52820", "nrf52811", "nrf52810", - "nrf52805", "nrf21540", "npm1100", "npm1300", "npm6001", "development-kits", - "prototyping-platforms", "kconfig"] + "thingy91x", "nrf9161", "nrf9151", "nrf54h20", "nrf54l15", "nrf54l05", + "nrf54l10", "nrf5340", "thingy53", "nrf52840", "nrf52833", "nrf52832", + "nrf52820", "nrf52811", "nrf52810", "nrf52805", "nrf21540", "npm1100", + "npm1300", "npm6001", "development-kits", "prototyping-platforms", "kconfig"] - nrf/samples/*.html: ["samples", "kconfig"] - nrf/samples/amazon_sidewalk.html: ["sidewalk"] - nrf/samples/bl.html: ["ble"] @@ -263,17 +355,17 @@ mapping_topics: - nrf/samples/wifi.html: ["wifi"] - nrf/samples/wifi/*.html: ["wifi"] - nrf/drivers/*.html: ["drivers"] - - nrf/drivers/wifi/nrf700x/nrf700x.html: ["wifi", "nrf70-series", "nrf7002", "nrf7001", "nrf7000"] + - nrf/drivers/wifi/*.html: ["wifi", "nrf70-series", "nrf7002", "nrf7001", "nrf7000"] - nrf/libraries/*.html: ["libraries", "kconfig"] - - nrf/libraries/bin/bt_ll_acs_nrf53/index.html: ["nrf5340", "development-kits"] - nrf/libraries/bin/lwm2m_carrier/*.html: ["nrf91-series", "nrf9161", "nrf9151", "nrf9160", "lte", "development-kits"] - nrf/libraries/bin/lwm2m_carrier/certification.html: ["certification"] - - nrf/libraries/bluetooth_services/*.html: ["ble", "nrf52-series", "nrf52840", "nrf52833", - "nrf52832", "nrf52820", "nrf52811", "nrf52810", - "nrf52805", "development-kits"] - - nrf/libraries/bluetooth_services/mesh.html: ["blemesh"] - - nrf/libraries/bluetooth_services/mesh/*.html: ["blemesh"] + - nrf/libraries/bluetooth/*.html: ["ble", "nrf52-series", "nrf52840", "nrf52833", "nrf52832", + "nrf52820", "nrf52811", "nrf52810", "nrf52805", "nrf54-series", + "nrf54h20", "nrf54l15", "nrf54l05", "nrf54l10", + "development-kits"] + - nrf/libraries/bluetooth/mesh.html: ["blemesh"] + - nrf/libraries/bluetooth/mesh/*.html: ["blemesh"] - nrf/libraries/gazell/*.html: ["gazell"] - nrf/libraries/modem/*.html: ["lte", "nrf91-series", "nrf9160", "nrf9161", "nrf9151", "development-kits", "at-commands"] @@ -294,6 +386,7 @@ mapping_topics: "nrf7000"] - nrf/libraries/networking/wifi_mgmt_ext.html: ["wifi", "nrf70-series", "nrf7002", "nrf7001", "nrf7000"] + - nrf/libraries/networking/ot_rpc.html: ["thread"] - nrf/libraries/networking/wifi_ready: ["wifi", "nrf70-series", "nrf7002", "nrf7001", "nrf7000"] - nrf/libraries/nfc/*.html: ["nfc"] - nrf/libraries/others/adp536x.html: ["pmic"] @@ -305,10 +398,12 @@ mapping_topics: - nrf/libraries/others/fem_al.html: ["fem", "nrf21540"] - nrf/libraries/others/st25r3911b_nfc.html: ["nfc"] - nrf/libraries/zigbee/*.html: ["zigbee"] + - nrf/external_comp/bt_fast_pair.html: ["ble"] - nrf/external_comp/nrf_cloud.html: ["nrf-cloud"] - nrf/external_comp/avsystem.html: ["lte"] - nrf/releases_and_maturity/release_notes.html: ["release-notes"] - nrf/releases_and_maturity/releases/*.html: ["release-notes"] + - nrf/releases_and_maturity/abi_compatibility.html: ["nrf54h20"] - nrf/releases_and_maturity/software_maturity.html: ["sidewalk", "ble", "blemesh", "matter", "thread", "zigbee", "wifi", "lte", "dect-nr+"] @@ -320,14 +415,15 @@ mapping_topics: - nrfxlib/lc3/*.html: ["nrf5340", "ble"] - nrfxlib/nrf_modem/*.html: ["nrf91-series", "nrf9160", "nrf9161", "nrf9151", "lte", "dect-nr+"] - nrfxlib/nrf_modem/doc/at_interface.html: ["at-commands"] - - nrfxlib/nrf_802154/README.html: ["nrf52-series", "nrf52840", "nrf52833", "nrf52832", "nrf52820", - "nrf52811", "nrf52810", "nrf52805", "multiprotocol"] + - nrfxlib/nrf_802154/README.html: ["nrf52-series", "nrf54-series", "nrf54h20", "nrf54l15", + "nrf54l05", "nrf54l10", "nrf52840", "nrf52833", "nrf52832", + "nrf52820", "nrf52811", "nrf52810", "nrf52805", + "multiprotocol"] - nrfxlib/nrf_802154/*.html: ["multiprotocol"] - nrfxlib/nrf_fuel_gauge/*.html: ["pmic", "npm1100", "npm1300", "npm6001", "evaluation-kits"] - nrfxlib/nfc/*.html: ["nrf52-series", "nrf53-series", "nfc"] - nrfxlib/openthread/*.html: ["thread"] - nrfxlib/nrf_dm/*.html: ["nrf52-series", "nrf53-series"] - - nrfxlib/nrf_wifi/*.html: ["wifi", "nrf70-series", "nrf7002", "nrf7001", "nrf7000", "drivers"] - nrfxlib/softdevice_controller/*.html: ["nrf52-series", "nrf53-series", "ble"] - nrfxlib/zboss/*.html: ["kconfig", "zigbee"] - nrfx/*.html: ["drivers"] diff --git a/doc/nrf/app_dev.rst b/doc/nrf/app_dev.rst index 8f149bd2aaa7..524929402c4a 100644 --- a/doc/nrf/app_dev.rst +++ b/doc/nrf/app_dev.rst @@ -27,9 +27,13 @@ For detailed integration instructions of specific technologies and components, c app_dev/device_guides/nrf91/index app_dev/device_guides/nrf70/index app_dev/device_guides/nrf54l/index - app_dev/device_guides/nrf54h + app_dev/device_guides/nrf54h/index app_dev/device_guides/nrf53/index app_dev/device_guides/nrf52/index + app_dev/device_guides/thingy91x/index + app_dev/device_guides/thingy91/index + app_dev/device_guides/thingy53/index app_dev/device_guides/pmic/index app_dev/device_guides/fem/index + app_dev/device_guides/custom/index app_dev/device_guides/wifi_coex diff --git a/doc/nrf/app_dev/board_support/board_names.rst b/doc/nrf/app_dev/board_support/board_names.rst index dc08a441a7e8..a56e9b84beae 100644 --- a/doc/nrf/app_dev/board_support/board_names.rst +++ b/doc/nrf/app_dev/board_support/board_names.rst @@ -11,10 +11,10 @@ Board names The following tables list all boards and corresponding board targets for Nordic Semiconductor's hardware platforms. The board targets follow Zephyr's :ref:`zephyr:board_terminology` scheme and are used mostly when :ref:`building`. -For example, the board target ``nrf54l15pdk@0.2.1/nrf54l15/cpuapp`` can be read as made of the following elements: +For example, the board target ``nrf54l15dk/nrf54l15/cpuapp`` can be read as made of the following elements: +-------------+----------------+-------------------------+---------------------------------+--------------------------------------------------+ -| nrf54l15pdk | @0.2.1 | /nrf54l15 | /cpuapp | | +| nrf54l15dk | | /nrf54l15 | /cpuapp | | +=============+================+=========================+=================================+==================================================+ | Board name | Board revision | Board qualifier for SoC | Board qualifier for CPU cluster | Board qualifier for variant (empty in this case) | +-------------+----------------+-------------------------+---------------------------------+--------------------------------------------------+ @@ -87,13 +87,11 @@ Also see the :ref:`zephyr:boards` section in the Zephyr documentation. | | | | | | | | | ``nrf54h20dk/nrf54h20/cpuppr`` | +-------------------+------------+-------------------------------------------------------------------+---------------------------------------+ -| nRF54L15 PDK | PCA10156 | :ref:`nrf54l15pdk ` | ``nrf54l15pdk/nrf54l15/cpuapp`` | -| | | | | -| | | | ``nrf54l15pdk@0.2.1/nrf54l15/cpuapp`` | -+-------------------+------------+-------------------------------------------------------------------+---------------------------------------+ | nRF54L15 DK | PCA10156 | :ref:`nrf54l15dk ` | ``nrf54l15dk/nrf54l15/cpuapp`` | | | | | | | | | | ``nrf54l15dk/nrf54l15/cpuapp/ns`` | +| | | | | +| | | | ``nrf54l15dk/nrf54l15/cpuflpr`` | +-------------------+------------+-------------------------------------------------------------------+---------------------------------------+ | nRF5340 DK | PCA10095 | :ref:`nrf5340dk ` | ``nrf5340dk/nrf5340/cpunet`` | | | | | | @@ -127,6 +125,12 @@ Also see the :ref:`zephyr:boards` section in the Zephyr documentation. +-------------------+------------+-------------------------------------------------------------------+---------------------------------------+ | nRF21540 DK | PCA10112 | :ref:`nrf21540dk ` | ``nrf21540dk/nrf52840`` | +-------------------+------------+-------------------------------------------------------------------+---------------------------------------+ +| nRF7002 DK | PCA10143 | :ref:`nrf7002dk ` | ``nrf7002dk/nrf5340/cpunet`` | +| | | | | +| | | | ``nrf7002dk/nrf5340/cpuapp`` | +| | | | | +| | | | ``nrf7002dk/nrf5340/cpuapp/ns`` | ++-------------------+------------+-------------------------------------------------------------------+---------------------------------------+ .. note:: In |NCS| releases before v1.6.1: @@ -168,17 +172,15 @@ The following boards are defined in the :file:`nrf/boards/nordic/` folder. | | +----------------------------------------------------------+---------------------------------------+ | | | :ref:`thingy91 ` | ``thingy91/nrf52840`` | +-------------------+------------+----------------------------------------------------------+---------------------------------------+ -| Thingy:91 X | PCA20065 | :ref:`thingy91x ` | ``thingy91x/nrf9151`` | +| Thingy:91 X | PCA20065 | :ref:`thingy91x ` | ``thingy91x/nrf9151`` | | | | | | | | | | ``thingy91x/nrf9151/ns`` | | | +----------------------------------------------------------+---------------------------------------+ -| | | :ref:`thingy91x ` | ``thingy91x/nrf5340/cpuapp`` | -+-------------------+------------+----------------------------------------------------------+---------------------------------------+ -| nRF7002 DK | PCA10143 | :ref:`nrf7002dk ` | ``nrf7002dk/nrf5340/cpunet`` | +| | | :ref:`thingy91x ` | ``thingy91x/nrf5340/cpuapp`` | | | | | | -| | | | ``nrf7002dk/nrf5340/cpuapp`` | +| | | | ``thingy91x/nrf5340/cpuapp/ns`` | | | | | | -| | | | ``nrf7002dk/nrf5340/cpuapp/ns`` | +| | | | ``thingy91x/nrf5340/cpunet`` | +-------------------+------------+----------------------------------------------------------+---------------------------------------+ .. _shield_names_nrf: diff --git a/doc/nrf/app_dev/board_support/defining_custom_board.rst b/doc/nrf/app_dev/board_support/defining_custom_board.rst deleted file mode 100644 index 9ac2abd5b266..000000000000 --- a/doc/nrf/app_dev/board_support/defining_custom_board.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _defining_custom_board: - -Defining custom board -##################### - -.. contents:: - :local: - :depth: 2 - -Defining your own board is a very common step in application development, because applications are typically designed to run on boards that are not directly supported by the |NCS|, and are often custom designs not available publicly. - -Guidelines for custom boards -**************************** - -To define your own board, you can use the following Zephyr guides as reference, since boards are defined in the |NCS| just as they are in Zephyr: - -* :ref:`custom_board_definition` is a guide to adding your own custom board to the Zephyr build system. -* :ref:`board_porting_guide` is a complete guide to porting Zephyr to your own board. - -Adding a custom board in the |nRFVSC| -************************************* - -The |nRFVSC| lets you add your own boards to your |NCS| project. -Read the `How to work with boards and devices`_ page in the extension documentation for detailed steps. - -Application porting guides -************************** - -Some :ref:`applications` in the |NCS| provide detailed guides for adapting the application to custom boards: - -* :ref:`nrf_desktop` - See :ref:`nrf_desktop_porting_guide` in the application documentation. -* :ref:`nrf53_audio_app` - See :ref:`nrf53_audio_app_adapting` in the application documentation. -* :ref:`nrf_machine_learning_app` - See :ref:`nrf_machine_learning_app_porting_guide` in the application documentation. diff --git a/doc/nrf/app_dev/board_support/index.rst b/doc/nrf/app_dev/board_support/index.rst index 81c0a50fcd42..6c69392a8911 100644 --- a/doc/nrf/app_dev/board_support/index.rst +++ b/doc/nrf/app_dev/board_support/index.rst @@ -10,12 +10,9 @@ You can select the board targets for these boards when :ref:`building`. Some boards can support Cortex-M Security Extensions (CMSE), with their board targets separated for different :ref:`app_boards_spe_nspe`. -In addition, you can :ref:`define custom boards `. - .. toctree:: :maxdepth: 1 :caption: Subpages: board_names processing_environments - defining_custom_board diff --git a/doc/nrf/app_dev/bootloaders_dfu/dfu_tools_mcumgr_cli.rst b/doc/nrf/app_dev/bootloaders_dfu/dfu_tools_mcumgr_cli.rst index 48f2571cda60..2f42dacb86ee 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/dfu_tools_mcumgr_cli.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/dfu_tools_mcumgr_cli.rst @@ -1,7 +1,7 @@ .. _dfu_tools_mcumgr_cli: -Command-line tool -################# +MCUmgr Command-line tool +######################## .. contents:: :local: @@ -396,7 +396,7 @@ Adding names requires an additional step: STATS_NAME(my_stats, my_stat_counter3) STATS_NAME_END(my_stats); -The :kconfig:option:`CONFIG_MCUMGR_GRP_STAT_MAX_NAME_LEN` Kconfig option sets the maximum length of a section name that can can be accepted as parameter for showing the section data. +The :kconfig:option:`CONFIG_MCUMGR_GRP_STAT_MAX_NAME_LEN` Kconfig option sets the maximum length of a section name that can be accepted as parameter for showing the section data. This may need adjustment for particularly long section names. .. note:: @@ -479,7 +479,7 @@ To upload a new file to a littleFS storage, mounted under ``/lfs``, use the foll where ``25`` is the size of the file. To download a file, first you must use the ``fs`` command with the :kconfig:option:`CONFIG_FILE_SYSTEM_SHELL` Kconfig option enabled. -This allows operations via remote shell. +This allows operations using remote shell. Create a new file on the remote system: .. code-block:: console diff --git a/doc/nrf/app_dev/bootloaders_dfu/index.rst b/doc/nrf/app_dev/bootloaders_dfu/index.rst index 2b9b73b4f266..4b63da0d780a 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/index.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/index.rst @@ -53,3 +53,4 @@ To learn more, refer to the following documentation pages: qspi_xip_split_image dfu_tools_mcumgr_cli mcuboot_image_compression + sysbuild_image_ids diff --git a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_image_compression.rst b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_image_compression.rst index 4a87348d34a2..1d71b1b1834f 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_image_compression.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_image_compression.rst @@ -55,17 +55,17 @@ The following shows an example static Partition Manager layout for image compres .. group-tab:: nRF52840 - .. literalinclude:: ../../../../tests/subsys/nrf_compress/decompression/mcuboot_update/pm_static_nrf52840dk_nrf52840.yml + .. literalinclude:: ../../../../samples/nrf_compress/mcuboot_update/pm_static_nrf52840dk_nrf52840.yml :language: yaml .. group-tab:: nRF5340 - .. literalinclude:: ../../../../tests/subsys/nrf_compress/decompression/mcuboot_update/pm_static_nrf5340dk_nrf5340_cpuapp.yml + .. literalinclude:: ../../../../samples/nrf_compress/mcuboot_update/pm_static_nrf5340dk_nrf5340_cpuapp.yml :language: yaml .. group-tab:: nRF54L15 - .. literalinclude:: ../../../../tests/subsys/nrf_compress/decompression/mcuboot_update/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml + .. literalinclude:: ../../../../samples/nrf_compress/mcuboot_update/pm_static_nrf54l15dk_nrf54l15_cpuapp.yml :language: yaml Required sysbuild configuration options diff --git a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_adding_sysbuild.rst b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_adding_sysbuild.rst index c80b6d193895..09a53cd42a32 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_adding_sysbuild.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_adding_sysbuild.rst @@ -361,7 +361,7 @@ Using MCUboot in firmware loader mode MCUboot includes a firmware loader mode supported in sysbuild. This mode enables a project configuration that includes MCUboot instance (optionally with serial recovery), a main application not intended for firmware updates, and a secondary application which is dedicated to loading firmware updates. -The benefit of this configuration is having a dedicated application for loading firmware updates, for example, over Bluetooth. +The benefit of this configuration is having a dedicated application for loading firmware updates, for example, over Bluetooth®. This allows the main application to be larger in comparison to any symmetric size dual-bank mode update, which helps on devices with limited flash or RAM. To use this mode, you must create a static partition file for the application that designates the addresses and sizes of the main image and firmware loader applications. diff --git a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_partitioning.rst b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_partitioning.rst index b4271548dadf..11abb17cc51f 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_partitioning.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_partitioning.rst @@ -11,6 +11,48 @@ Partitioning device memory is a crucial aspect of managing how a device's storag By default, the Partition Manager in the system dynamically generates a partition map, which is suitable for most applications that do not use Device Firmware Upgrades (DFU). For scenarios involving DFU, read the following sections. +.. _bootloader_partitioning_partitions_file: + +Partition map file +****************** + +After you enable the Partition Manager, it will :ref:`start generating ` the :file:`partitions.yml` file in the build folder directory. +In this file, you will see detailed information about the memory layout used for the build. + +The :file:`partitions.yml` file is present also if the Partition Manager generates the partition map dynamically. +You can use this file as a base for your static partition map. + +.. _bootloader_partitioning_partitions_file_report: + +Partition reports +================= + +After building the application, you can print a report of how the partitioning has been handled for a bootloader, or combination of bootloaders, by using partition memory reports. + +Depending on your development environment, you can use one of the following options: + +.. tabs:: + + .. group-tab:: nRF Connect for VS Code + + Use the extension's `Memory report`_ feature, which shows the size and percentage of memory that each symbol uses on your device for RAM, ROM, and partitions. + Click the :guilabel:`Memory report` button in the :guilabel:`Actions View` to generate the report. + The partition map is available in the :guilabel:`Partitions` tab. + + Alternatively, you can also use the `Memory Explorer `_ feature of the extension's nRF Debug to check memory sections for the partitions. + This feature requires `enabling debugging in the build configuration `_ and providing the partition addresses manually. + + .. group-tab:: Command line + + Use the Partition Manager's :ref:`pm_partition_reports` feature. + Run the following command: + + .. code-block:: console + + west build -t partition_manager_report + + This command generates an output in ASCII with the addresses and sizes of each partition. + .. _ug_bootloader_flash_static_requirement: Static partition requirement for DFU @@ -22,13 +64,6 @@ This is important also when you use a precompiled HEX file as a child image (sub In such cases, the newly generated application images may no longer use a partition map that is compatible with the partition map used by the bootloader. As a result, the newly built application image may not be bootable by the bootloader. -.. note:: - For detailed information about the memory layout used for the build, see the partition configuration in the :file:`partitions.yml` file, located in the build folder directory, or run ``ninja partition_manager_report``. - You must enable the Partition Manager to make the :file:`partitions.yml` file and the ``partition_manager_report`` target available. - - The :file:`partitions.yml` file is present also if the Partition Manager generates the partition map dynamically. - You can use this file as a base for your static partition map. - The memory partitions that must be defined in the static partition map depend on the selected bootloader chain. For details, see :ref:`ug_bootloader_flash`. @@ -39,7 +74,7 @@ Flash memory partitions Each bootloader handles flash memory partitioning differently. -After building the application, you can print a report of how the flash partitioning has been handled for a bootloader, or combination of bootloaders, by using :ref:`pm_partition_reports`. +After building the application, you can print a report of how the flash partitioning has been handled for a bootloader, or combination of bootloaders, by using :ref:`bootloader_partitioning_partitions_file_report`. .. _ug_bootloader_flash_b0: @@ -64,7 +99,7 @@ This is particularly useful in memory-constrained devices to avoid providing spa See the *Image Slots* section in the :doc:`MCUboot documentation ` for more information. The |NCS| variant of MCUboot uses the :ref:`partition_manager` to configure the flash memory partitions for these image slots. -In the default configuration, defined in :file:`bootloader/mcuboot/boot/zephyr/pm.yml`, the partition manager dynamically sets up the partitions as required for MCUboot. +In the default configuration, defined in :file:`bootloader/mcuboot/boot/zephyr/pm.yml`, the Partition Manager dynamically sets up the partitions as required for MCUboot. For example, the partition layout for :file:`zephyr/samples/hello_world` using MCUboot on the ``nrf52840dk`` board would look like the following: .. code-block:: console @@ -82,16 +117,11 @@ For example, the partition layout for :file:`zephyr/samples/hello_world` using M You can also store secondary slot images in external flash memory when using MCUboot. See :ref:`ug_bootloader_external_flash` for more information. - .. _ug_bootloader_external_flash: Using external flash memory partitions ************************************** -.. contents:: - :local: - :depth: 2 - When using MCUboot, you can store the storage partition for the secondary slot in the external flash memory, using a driver for the external flash memory that supports the following features: * Single-byte read and write. @@ -112,7 +142,7 @@ To enable external flash with MCUboot, complete the following steps: .. note:: - The :ref:`partition_manager` will only support run-time access to flash partitions defined in regions placed on external flash devices that have drivers compiled in. + The Partition Manager will only support run-time access to flash partitions defined in regions placed on external flash devices that have drivers compiled in. The Partition Manager cannot determine which partitions will be used at runtime, but only those that have drivers enabled, and those are included into the partition map. Lack of partition access will cause MCUboot to fail at runtime. For more details on configuring and enabling access to external flash devices, see :ref:`pm_external_flash`. @@ -126,6 +156,11 @@ See also :ref:`ug_multi_image_variables` for more details on how to pass configu Troubleshooting *************** +This section describes some of the issues you might come across when partitioning device memory. + +MCUboot failure +=============== + MCUboot could fail, reporting the following error: .. code-block:: console @@ -139,7 +174,7 @@ MCUboot could fail, reporting the following error: This error could be caused by the following issues: - * The external flash driver for the application image partitions used by MCUboot is not enabled or an incorrect Kconfig option has been given to the ``DEFAULT_DRIVER_KCONFIG`` of the partition manager external region definition. + * The external flash driver for the application image partitions used by MCUboot is not enabled or an incorrect Kconfig option has been given to the ``DEFAULT_DRIVER_KCONFIG`` of the Partition Manager external region definition. See :ref:`pm_external_flash` for details. * An out-of-tree external flash driver is not selecting :kconfig:option:`CONFIG_PM_EXTERNAL_FLASH_HAS_DRIVER`, resulting in partitions for images located in the external flash memory being not accessible. @@ -148,6 +183,9 @@ This error could be caused by the following issues: * Insufficient value set for the ``CONFIG_BOOT_MAX_IMG_SECTORS`` Kconfig option, as MCUboot typically increases slot sizes when external flash is enabled. See `MCUboot's Kconfig options used in Zephyr `_ for details. +Compilation failure +=================== + The compilation could fail, reporting a linker error similar to following: .. code-block:: console diff --git a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_quick_start.rst b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_quick_start.rst index 79f8d153c4c8..708a4c4004d1 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_quick_start.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_quick_start.rst @@ -61,7 +61,7 @@ This setup supports both UART and Bluetooth® LE connections. The following samples are supported: * :zephyr:code-sample:`smp-svr` -* :ref:`zephyr:with_mcuboot` +* :zephyr:code-sample:`with_mcuboot` .. rst-class:: numbered-step @@ -79,7 +79,7 @@ The following APIs are essential for interacting with the bootloader or implemen - Supported transfer * - :ref:`zephyr:mcu_mgr` - Library in Zephyr that implementing the Simple Management Protocol (SMP), which is used to receive or send updates over different protocols. - - Wired (SMP over UART or USB virtual serial port) and OTA (SMP over Bluetooth® LE) + - Wired (SMP over UART or USB virtual serial port) and OTA (SMP over Bluetooth LE) * - :ref:`lib_dfu_target` - Library in the |NCS| used to perform DFU for data from any source. - | The application provides the data and is responsible for receiving updates. @@ -87,7 +87,7 @@ The following APIs are essential for interacting with the bootloader or implemen * - :ref:`lib_fota_download` - | Library in the nRF Connect SDK providing functions for downloading firmware files as upgrade candidates to the DFU target. | It is commonly used by IoT libraries, including the nRF Cloud library. - - OTA (LTE, Wi-Fi) + - OTA (LTE, Wi-Fi®) * - :ref:`zephyr:blinfo_api` - API that enables applications to access shared data from a bootloader. - -- @@ -171,16 +171,16 @@ You can use the following tools to interact with DFU: * - Cloud interfaces - | Each cloud has its own interface for sending updates to devices. | For details, refer to the documentation for :ref:`lib_nrf_cloud`, :ref:`lib_aws_fota`, or :ref:`lib_azure_fota`. - - Wired (SMP over UART or USB) and OTA (SMP over Bluetooth® LE). + - Wired (SMP over UART or USB) and OTA (SMP over Bluetooth LE). * - `nRF Connect Device Manager`_ - - | Mobile application designed for sending SMP updates over Bluetooth® LE. + - | Mobile application designed for sending SMP updates over Bluetooth LE. | It also supports additional SMP features. - - OTA (SMP over Bluetooth® LE) + - OTA (SMP over Bluetooth LE) * - `nRF Connect for Mobile`_ - - General purpose mobile application for sending SMP updates over Bluetooth® LE and other functionalities. - - OTA (SMP over Bluetooth® LE) + - General purpose mobile application for sending SMP updates over Bluetooth LE and other functionalities. + - OTA (SMP over Bluetooth LE) * - :ref:`zephyr:mcumgr_smp_protocol_specification` - | SMP Client operates on a microcontroller. - | For a Bluetooth® LE example, refer to :ref:`bluetooth_central_dfu_smp`. + | For a Bluetooth LE example, refer to :ref:`bluetooth_central_dfu_smp`. | SMP Client can also be implemented using the :ref:`zephyr:mcu_mgr` library. - - Wired (SMP over UART or USB) and OTA (SMP Client over Bluetooth® LE) + - Wired (SMP over UART or USB) and OTA (SMP Client over Bluetooth LE) diff --git a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_signature_keys.rst b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_signature_keys.rst index 89459073c224..4737dd998672 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_signature_keys.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/mcuboot_nsib/bootloader_signature_keys.rst @@ -217,6 +217,9 @@ To test that the bootloader no longer boots images signed with the earlier keys, nrfjprog -f nRF52 -r --verify --program build/zephyr/signed_by_b0_s0_image.hex --sectorerase + .. note:: + |nrfjprog_deprecation_note| + #. Observe the bootloader skipping the invalid image and booting the valid image in the other slot: .. code-block:: console diff --git a/doc/nrf/app_dev/bootloaders_dfu/qspi_xip_split_image.rst b/doc/nrf/app_dev/bootloaders_dfu/qspi_xip_split_image.rst index c875ba8be08d..5253dc089b78 100644 --- a/doc/nrf/app_dev/bootloaders_dfu/qspi_xip_split_image.rst +++ b/doc/nrf/app_dev/bootloaders_dfu/qspi_xip_split_image.rst @@ -152,7 +152,7 @@ Configure :ref:`configuration_system_overview_sysbuild` to enable the required K .. tabs:: - .. group-tab:: With networe core support + .. group-tab:: With network core support .. code-block:: cmake @@ -217,10 +217,13 @@ Programming with the QSPI XIP split image Programming of the application is supported using the :ref:`standard procedure `. The standard procedure will program the firmware using the default nrfjprog configuration which, for QSPI, is PP4IO mode. +.. note:: + |nrfjprog_deprecation_note| + Programming using a different SPI mode ====================================== -If you are using an a different SPI mode on the QSPI interface, such as DSPI, you must use a custom :file:`Qspi.ini` file. +If you are using a different SPI mode on the QSPI interface, such as DSPI, you must use a custom :file:`Qspi.ini` file. The following is an example for the Thingy:53, which supports DSPI and PP: .. literalinclude:: ../../../../samples/nrf5340/extxip_smp_svr/Qspi_thingy53.ini diff --git a/doc/nrf/app_dev/bootloaders_dfu/sysbuild_image_ids.rst b/doc/nrf/app_dev/bootloaders_dfu/sysbuild_image_ids.rst new file mode 100644 index 000000000000..3f1ca76b162d --- /dev/null +++ b/doc/nrf/app_dev/bootloaders_dfu/sysbuild_image_ids.rst @@ -0,0 +1,109 @@ +.. _sysbuild_assigned_images_ids: + +Sysbuild-assigned image IDs +########################### + +.. contents:: + :local: + :depth: 2 + +When using sysbuild in |NCS| with MCUboot, the build system automatically assigns image IDs based on your project configuration. + +Sysbuild has the following configuration options that display the image IDs assigned to each image. +A value of ``-1`` indicates that the image is not present: + +.. note:: + These options are also shared with MCUboot and the main application through Kconfig values, except for the ``SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER`` option, which is exclusive to MCUboot. + ++-------------------------------------------------+------------------------------------------------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------+ +| Kconfig option (sysbuild) | Kconfig option (application/MCUboot) | Description | Dependencies | ++=================================================+============================================================+==============================================+==============================================================================================================+ +| ``SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER` | Image number for application update | -- | ++-------------------------------------------------+------------------------------------------------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER` | Image number for network core update | nRF5340 device and ``SB_CONFIG_NETCORE_APP_UPDATE`` | ++-------------------------------------------------+------------------------------------------------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER` | Image number for Wi-Fi-patch update | nRF7x device used and ``SB_CONFIG_WIFI_PATCHES_EXT_FLASH_XIP`` or ``SB_CONFIG_WIFI_PATCHES_EXT_FLASH_STORE`` | ++-------------------------------------------------+------------------------------------------------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER` | Image number for QSPI XIP split image update | nRF52840 or nRF5340 device and ``SB_CONFIG_QSPI_XIP_SPLIT_IMAGE`` | ++-------------------------------------------------+------------------------------------------------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER` | Image number for MCUboot update | ``SB_CONFIG_SECURE_BOOT_APPCORE`` | +| | (only set for MCUboot image) | | | ++-------------------------------------------------+------------------------------------------------------------+----------------------------------------------+--------------------------------------------------------------------------------------------------------------+ + +The following configuration options specify the number of images and how these image numbers are configured: + ++--------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| Kconfig option (sysbuild) | Description | ++========================================================+======================================================================================================================================================+ +| ``SB_CONFIG_MCUBOOT_MIN_UPDATEABLE_IMAGES`` | Minimum number of MCUboot images | ++--------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES`` | Minimum number of additional MCUboot images for MCUboot only (see :ref:`sysbuild_assigned_images_ids_mcuboot_only`) | ++--------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_MAX_UPDATEABLE_IMAGES`` | Maximum number of MCUboot images | ++--------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES`` | Number of MCUboot images to set in images | ++--------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES`` | Number of additional MCUboot images to include in MCUboot (see :ref:`sysbuild_assigned_images_ids_mcuboot_only`) | ++--------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ +| ``SB_CONFIG_MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES`` | If enabled, this option sets the number of MCUboot images for both MCUboot and the main application. | +| | If disabled, it sets the number only for the MCUboot image. | ++--------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ + +See :ref:`configuring_kconfig` for information about how to configure these options. + +.. _sysbuild_assigned_images_ids_mcuboot_only: + +MCUboot-only images +******************* + +Some images are visible only to MCUboot, allowing it to manage them independently of the main application. +This setup supports features like shared secondary slots. +Currently, MCUboot uses this capability to update itself, which can be enabled with secure boot. +MCUboot then shares the main application's secondary slot for firmware updates. +However, it directly transfers the update to the designated MCUboot image slot, which is then booted by :ref:`bootloader`. + +The main application does not need to be aware of this process; it only needs to handle an MCUboot update as it would any normal application update and reboot to apply changes. +This functionality is possible because there are additional MCUboot-only images that are not accessible to the main application and are configured only within MCUboot. + +The total number of images configured in MCUboot is the sum of ``SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES`` and ``SB_CONFIG_MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES``. +If ``SB_CONFIG_MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES`` is enabled, the main application sets only ``SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES``. +Otherwise, it is not set. + +Getting image IDs in an application +*********************************** + +When building with sysbuild, the image IDs are provided to the application through Kconfig values and can be used in the code as needed. +These image IDs are also used in |NCS| hooks for various tasks (such as :ref:`nRF5340 network core updates `), so no additional configuration is required. + +Image numbers +************* + +Image numbers are assigned in ascending order based on the following priority: + ++----------------------+--------------------------------+-------------------------------------------------+------------------------------------------------------------+ +| Image | Value (if all enabled) | Kconfig option (sysbuild) | Kconfig option (application/MCUboot) | ++======================+================================+=================================================+============================================================+ +| Application | 0 | ``SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER` | ++----------------------+--------------------------------+-------------------------------------------------+------------------------------------------------------------+ +| Network core | 1 | ``SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER` | ++----------------------+--------------------------------+-------------------------------------------------+------------------------------------------------------------+ +| nRF7x Wi-Fi patch | 2 | ``SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER` | ++----------------------+--------------------------------+-------------------------------------------------+------------------------------------------------------------+ +| QSPI XIP split image | 3 | ``SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER` | ++----------------------+--------------------------------+-------------------------------------------------+------------------------------------------------------------+ +| MCUboot | 4 (only set for MCUboot image) | ``SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER`` | :kconfig:option:`CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER` | ++----------------------+--------------------------------+-------------------------------------------------+------------------------------------------------------------+ + +MCUboot update package version +****************************** + +When MCUboot updates are enabled, the firmware embeds the |NSIB| version using the :kconfig:option:`CONFIG_FW_INFO_FIRMWARE_VERSION` Kconfig option. +However, during an update, MCUboot does not check this version; it only checks the MCUboot package version. + +You can set the MCUboot update package version in sysbuild with ``SB_CONFIG_SECURE_BOOT_MCUBOOT_VERSION``. +You must increase this version number when deploying an MCUboot update. +If the version in the update is lower than the current version, MCUboot will reject the update and not transfer it to the opposing secure boot firmware slot. + +Additionally, make sure to load the correct update image onto the device. +If MCUboot is currently running from the ``s0`` slot, then you must use the ``s1`` update, and if it is running from the ``s1`` slot, then you must use the ``s0`` update. +If you upload to the wrong slot image, MCUboot will reject the update. diff --git a/doc/nrf/app_dev/companion_components.rst b/doc/nrf/app_dev/companion_components.rst index a848fd89c7c4..09de6703cb5f 100644 --- a/doc/nrf/app_dev/companion_components.rst +++ b/doc/nrf/app_dev/companion_components.rst @@ -41,7 +41,7 @@ The following table lists the available companion components: - :ref:`mcuboot:mcuboot_ncs` * - `Trusted Firmware-M (TF-M) `_ - Platform security architecture reference implementation aligning with PSA Certified guidelines, enabling chips, Real Time Operating Systems and devices to become PSA Certified. - - :ref:`nRF91 Series devices `, :ref:`nRF54L15 PDK `, :ref:`nRF54H20 DK `, :ref:`nRF5340 DK `, :ref:`Thingy:53 ` + - :ref:`nRF91 Series devices `, :ref:`nRF54L15 DK `, :ref:`nRF54H20 DK `, :ref:`nRF5340 DK `, :ref:`Thingy:53 ` - :file:`ncs/modules/tee/tf-m` (external module), :file:`ncs/nrf/modules/trusted-firmware-m` (integration files) - :ref:`ug_tfm` * - :ref:`bootloader` @@ -59,3 +59,13 @@ The following table lists the available companion components: - :ref:`Sample requirements ` - :file:`samples/suit/recovery` - :ref:`Sample's building and running section ` + * - :ref:`Secure Domain Firmware ` + - Secure Domain Firmware exposes security services to the other cores through an IPC interface and is part of Platform Root of Trust (PRoT). + - :ref:`nRF54H20 DK ` + - :file:`nrf54h20_soc_binaries_v0.6.5.zip` (This component is not yet fully integrated in the |NCS| and is currently distributed as a bundle.) + - :ref:`ug_nrf54h20_SoC_binaries` + * - :ref:`System Controller Firmware ` + - System Controller Firmware performs system clock and power management operations delegated by Secure Domain and is part of Platform Root of Trust (PRoT). + - :ref:`nRF54H20 DK ` + - :file:`nrf54h20_soc_binaries_v0.6.5.zip` (This component is not yet fully integrated in the |NCS| and is currently distributed as a bundle.) + - :ref:`ug_nrf54h20_SoC_binaries` diff --git a/doc/nrf/app_dev/config_and_build/building.rst b/doc/nrf/app_dev/config_and_build/building.rst index 390e01521bb8..21b32f9e2417 100644 --- a/doc/nrf/app_dev/config_and_build/building.rst +++ b/doc/nrf/app_dev/config_and_build/building.rst @@ -16,12 +16,13 @@ Just as for creating the application, you can build the application using either .. group-tab:: nRF Connect for VS Code - For instructions about building with the |nRFVSC|, see `How to build an application`_ in the extension documentation. + To build with the |nRFVSC|, you first need to create a build configuration. + For instructions, see `How to build an application`_ in the extension documentation. By default, the extension runs both stages of the CMake build (:ref:`configuration phase and building phase `). If you want to only set up the build configuration without building it, make sure the :guilabel:`Build after generating configuration` is not selected. - To build with :ref:`configuration_system_overview_sysbuild`, select the :guilabel:`Use sysbuild` checkbox. + To build with :ref:`configuration_system_overview_sysbuild`, :ref:`keep the default setting selected ` or select the :guilabel:`Use sysbuild` radio button. If you want to build with custom options or scripts, read about `Binding custom tasks to actions`_ in the extension documentation. @@ -123,7 +124,7 @@ For more options, see Zephyr's :ref:`zephyr:west-building` or run the ``west --h - ``west build -b nrf52840dk/nrf52840 --no-sysbuild`` * - ``-vvv`` - Enable a detailed :ref:`zephyr:west-building-verbose` log, which includes the full commands used by the build system to generate the :ref:`app_build_output_files`. - - ``west build -b nrf52840dk/nrf52840 -vvv`` + - ``west -vvv build -b nrf52840dk/nrf52840`` * - *directory_name* - Build from a directory other than the current directory. - ``west build -b nrf5340dk/nrf5340/cpuapp/ns nrf/samples/tfm/tfm_psa_template`` diff --git a/doc/nrf/app_dev/config_and_build/cmake/index.rst b/doc/nrf/app_dev/config_and_build/cmake/index.rst index 2a97747acb51..022b692f3ad5 100644 --- a/doc/nrf/app_dev/config_and_build/cmake/index.rst +++ b/doc/nrf/app_dev/config_and_build/cmake/index.rst @@ -115,12 +115,14 @@ This is how you can specify them: See `How to build an application`_ in the |nRFVSC| documentation. You can specify the additional configuration variables when `setting up a build configuration `_: - * :makevar:`FILE_SUFFIX` (and :makevar:`CONF_FILE`) - Select the configuration in the :guilabel:`Configuration` menu. - * :makevar:`EXTRA_CONF_FILE` - Add the Kconfig fragment file in the :guilabel:`Kconfig fragments` menu. - * :makevar:`EXTRA_DTC_OVERLAY_FILE` - Add the devicetree overlays in the :guilabel:`Devicetree overlays` menu. + * :makevar:`FILE_SUFFIX` (and :makevar:`CONF_FILE`) - Select the configuration in the :guilabel:`Base configuration files` menu. + * :makevar:`EXTRA_CONF_FILE` - Add the Kconfig fragment file in the :guilabel:`Extra Kconfig fragments` menu. + * :makevar:`DTC_OVERLAY_FILE` - Select the configuration in the :guilabel:`Base devicetree overlays` menu. + * :makevar:`EXTRA_DTC_OVERLAY_FILE` - Add the devicetree overlays in the :guilabel:`Extra devicetree overlays` menu. + * :makevar:`SNIPPET` - Select the snippet from the list in the :guilabel:`Snippets` menu. * Other variables - Provide CMake arguments in the :guilabel:`Extra CMake arguments` field, preceded by ``--``. - For example, to build the :ref:`location_sample` sample for the nRF9161 DK with the nRF7002 EK Wi-Fi support, select ``nrf9161dk/nrf9161/ns`` in the :guilabel:`Board` menu, :file:`overlay-nrf7002ek-wifi-scan-only.conf` in the :guilabel:`Kconfig fragments` menu, and provide ``-- -DSHIELD=nrf7002ek`` in the :guilabel:`Extra CMake arguments` field. + For example, to build the :ref:`location_sample` sample for the nRF9161 DK with the nRF7002 EK Wi-Fi® support, select ``nrf9161dk/nrf9161/ns`` in the :guilabel:`Board` menu, :file:`overlay-nrf7002ek-wifi-scan-only.conf` in the :guilabel:`Extra Kconfig fragments` menu, and provide ``-- -DSHIELD=nrf7002ek`` in the :guilabel:`Extra CMake arguments` field. .. group-tab:: Command line diff --git a/doc/nrf/app_dev/config_and_build/config_and_build_system.rst b/doc/nrf/app_dev/config_and_build/config_and_build_system.rst index 07735a06148a..49f17073175a 100644 --- a/doc/nrf/app_dev/config_and_build/config_and_build_system.rst +++ b/doc/nrf/app_dev/config_and_build/config_and_build_system.rst @@ -273,12 +273,13 @@ Sysbuild enabled by default :ref:`configuration_system_overview_sysbuild` in the |NCS| works differently than in Zephyr. -The |NCS| `modifies the default behavior `_ of ``west build``, so that the :ref:`standard building procedure ` will use sysbuild by default for :ref:`repository applications ` in the :ref:`SDK repositories `. +The |NCS| `modifies the default behavior `_ of ``west build``: the :ref:`standard building procedure ` in the |NCS| uses sysbuild by default for all types of applications in the :ref:`SDK repositories `. +This includes :ref:`repository applications ` and the out-of-tree applications (:ref:`workspace ` and :ref:`freestanding applications `). + For this reason, unlike in Zephyr, ``--sysbuild`` does not have to be explicitly mentioned in the command prompt when building a repository application. This setting only applies to repositories delivered with the |NCS|, to maintain compatibility with child/parent images. -This setting does not apply to out-of-tree applications, such as :ref:`workspace ` or :ref:`freestanding applications `. -In such cases, once you ported your application to sysbuild, it is up to you to either use the ``--sysbuild`` parameter on the command line every time you build or to :ref:`configure west to always use it `. +If you want to disable this feature, for example if you want to explicitly use the ``--sysbuild`` parameter on the command line every time you build, :ref:`configure west to disable this default setting `. Moreover, this |NCS| setting does not apply to the following areas: diff --git a/doc/nrf/app_dev/config_and_build/hardware/add_new_driver.rst b/doc/nrf/app_dev/config_and_build/hardware/add_new_driver.rst new file mode 100644 index 000000000000..72c5c5648ef9 --- /dev/null +++ b/doc/nrf/app_dev/config_and_build/hardware/add_new_driver.rst @@ -0,0 +1,91 @@ +.. _add_new_driver: + +Adding new drivers +################## + +.. contents:: + :local: + :depth: 2 + +Adding drivers to your embedded project allows you to add support for additional hardware components and extend functionalities of your application. + +To add a new driver to an application in the |NCS|, complete the following steps: + +.. rst-class:: numbered-step + +Create a devicetree binding +*************************** + +In most of the cases you want to make it possible to configure some properties of your driver instance. +For example, a sensor may need to allow configuring used GPIO pins or communication interface. + +A driver instance can be made configurable through a devicetree node that is compatible with a specific binding. + +|devicetree_bindings| + +You can create a devicetree binding YAML file for your driver in the :file:`dts/bindings` directory of your project. +If applicable, you can also use one of the existing DTS bindings available in the |NCS| or Zephyr. +For implementation examples, see :file:`nrf/dts/bindings` and :file:`zephyr/dts/bindings` directories. +See also :ref:`zephyr:devicetree` documentation for more information about devicetree. + +.. rst-class:: numbered-step + +Create the driver files +*********************** + +First, create the files that will implement driver and expose driver APIs. +As a reference, you can check the |NCS| :ref:`drivers`, whose code is located at :file:`nrf/drivers`. + +You will need the following files: + +* :file:`CMakeLists.txt` - This file adds your driver sources to the build as a Zephyr library. + See :ref:`app_build_system` for more information about the build system. +* :file:`Kconfig` - This file will include all custom Kconfig options for your driver, including the Kconfig option to enable and disable the driver. + See Zephyr's :ref:`zephyr:kconfig` for more information. +* Driver's source files - These files will include the code for your driver, such as :ref:`zephyr:device_struct` device definition through the :c:macro:`DEVICE_DT_DEFINE` macro, and other elements. + If possible, your driver should expose a generic API to simplify integrating the driver in user application. + For example, the driver could expose sensor driver API (:c:struct:`sensor_driver_api`). + See :file:`nrf/drivers/sensor/paw3212/paw3212.c` for an example. + See also Zephyr's :ref:`zephyr:device_model_api` for more information, in particular the "Subsystems and API structures" section. + +.. rst-class:: numbered-step + +Enable the driver in your application +************************************* + +To enable the driver in your application's configuration, complete the following steps: + +1. Enable the necessary Kconfig options in the application's Kconfig configuration. + This includes the Kconfig option you defined for enabling and disabling the driver. + See :ref:`configuring_kconfig` for information about how to enable Kconfig options. +#. Create or modify a devicetree overlay file for your board to add the necessary devicetree node for your custom driver. + This step is crucial for connecting the driver to the specific hardware on your board. + For information about how to create or modify devicetree files, see :ref:`configuring_devicetree`. +#. Include the appropriate header file for your custom driver in your application code and use the driver APIs in the application. + If your driver exposes a generic API (for example, :ref:`sensor driver API `), you can use generic headers defined for the API. + +DevAcademy courses +****************** + +`Nordic Developer Academy`_ contains introductory courses to the |NCS| and Zephyr. +See the following course lessons to get started with driver development: + +* `Lesson 6 – Serial communication (I2C)`_ in `nRF Connect SDK Fundamentals course`_ describes how to communicate with a sensor connected over I2C using I2C APIs. +* `Lesson 5 – Serial Peripheral Interface (SPI)`_ in `nRF Connect SDK Intermediate course`_ describes how to communicate with sensors over SPI in Zephyr. +* `Lesson 7 - Device driver model`_ in `nRF Connect SDK Intermediate course`_ describes how to start with adding your own sensor driver in the Exercise 1. + +Related documentation +********************* + +The :ref:`nrf_desktop` application describes how to :ref:`add a new motion sensor to the project `. + +Implementation examples +*********************** + +Check the driver implementation examples at the following paths: + +* |NCS|: :ref:`drivers`, with code located at :file:`nrf/drivers`. +* Zephyr: + + * :file:`zephyr/drivers` for driver implementation examples. + * :zephyr:code-sample-category:`drivers` for driver usage examples, with code located at :file:`zephyr/samples/drivers`. diff --git a/doc/nrf/app_dev/config_and_build/hardware/add_new_led_example.rst b/doc/nrf/app_dev/config_and_build/hardware/add_new_led_example.rst new file mode 100644 index 000000000000..769fa61ff0db --- /dev/null +++ b/doc/nrf/app_dev/config_and_build/hardware/add_new_led_example.rst @@ -0,0 +1,98 @@ +.. _add_new_led_example: + +Adding a dimmable LED node +########################## + +.. contents:: + :local: + :depth: 2 + +This example demonstrates how to add support for a dimmable LED node to your board in an overlay file. + +To implement this example, you can either edit the devicetree files manually or use the |nRFVSC| with its `Devicetree language support`_ and the `Devicetree Visual Editor `_ (recommended). + +For more advanced LED control, you can also use the :ref:`LEDs module ` of the :ref:`Common Application Framework (CAF) `, which provides additional features, such as LED effects and power management integration. + +Implementation overview +*********************** + +This example uses Zephyr's generic binding for PWM LED controllers named ``pwm-leds``. + +|devicetree_bindings| + +See also the following related documentation: + +* :ref:`zephyr:pwm_api` - Zephyr's PWM driver API documentation +* :ref:`zephyr:dt-guide` - Zephyr's devicetree user guide + +.. rst-class:: numbered-step + +Open or create the overlay file to edit +*************************************** + +Overlay files are a category of devicetree's :ref:`zephyr:devicetree-in-out-files`. +These files can override node property values in multiple ways. + +You can add them to your configuration :ref:`manually ` or by using the |nRFVSC| (see `How to create devicetree files`_). + +.. rst-class:: numbered-step + +Add the PWM LED controller node +******************************* + +Complete the following steps: + +1. Add the controller node ``pwmleds`` under the root node in devicetree. +#. Add the ``pwm-leds`` binding for the driver to pick up. +#. Add LEDs as child nodes on the ``pwmleds`` controller node, with ``pwms`` and ``label`` properties. +#. Make sure the ``pwms`` property of the ``phandle-array`` type points to a PWM instance. + The PWM instance takes the pin number as its only parameter. + +The following code example uses pins 6 and 7 on the GPIO port 0 (``&pwm0``): + +.. code-block:: C + + / { // Devicetree root + // ... + pwmleds { // Controller node + compatible = "pwm-leds"; // Compatible binding + led_pwm_1 { + pwms = <&pwm0 6>; // Pin assigned to GPIO port 0 for LED 1 + label = "PWM LED 1"; + }; + + led_pwm_2 { + pwms = <&pwm0 7>; // Pin assigned to GPIO port 0 for LED 2 + label = "PWM LED 2"; + }; + }; + }; + +.. rst-class:: numbered-step + +Configure the PWM node +********************** + +Enable the referenced PWM0 node by setting ``status`` to ``"okay"`` and configuring the node's channels. +Use the ``&pwm0`` node label reference on the root of the file: + +.. code-block:: C + + &pwm0 { + status = "okay"; // Status + ch0-pin = <6>; // Pin assignment for channel 0 + ch1-pin = <7>; // Pin assignment for channel 1 + }; + +.. rst-class:: numbered-step + +Enable the LED PWM driver +************************* + +Add the following line to your :file:`prj.conf` file: + +.. code-block:: none + + CONFIG_LED_PWM=y + +Once you have added the LED PWM driver, :ref:`build your application ` and :ref:`program it to your board `. diff --git a/doc/nrf/app_dev/config_and_build/hardware/index.rst b/doc/nrf/app_dev/config_and_build/hardware/index.rst index b35c0852c669..b6dc4b14f03d 100644 --- a/doc/nrf/app_dev/config_and_build/hardware/index.rst +++ b/doc/nrf/app_dev/config_and_build/hardware/index.rst @@ -19,9 +19,15 @@ The following guides provide information about configuring specific aspects of h Read them together with Zephyr's :ref:`zephyr:hardware_support` and :ref:`zephyr:dt-guide` guides, and the official `Devicetree Specification`_. In particular, :ref:`zephyr:set-devicetree-overlays` explains how the base devicetree files are selected. +.. note:: + If you want to go through dedicated training related to some of the topics covered here, enroll in the courses in the `Nordic Developer Academy`_. + For example, `nRF Connect SDK Fundamentals course`_ describes devicetree in `Lesson 2 `_. + .. toctree:: :maxdepth: 1 :caption: Subpages: + add_new_driver + add_new_led_example pin_control use_gpio_pin_directly diff --git a/doc/nrf/app_dev/config_and_build/hardware/use_gpio_pin_directly.rst b/doc/nrf/app_dev/config_and_build/hardware/use_gpio_pin_directly.rst index 69fea7e5fe32..6ea91f34dc5f 100644 --- a/doc/nrf/app_dev/config_and_build/hardware/use_gpio_pin_directly.rst +++ b/doc/nrf/app_dev/config_and_build/hardware/use_gpio_pin_directly.rst @@ -1,4 +1,4 @@ -.. _config_gpio_pin: +.. _gpio_pin_config: Driving a GPIO pin directly ########################### @@ -7,21 +7,36 @@ Driving a GPIO pin directly :local: :depth: 2 -This user guide shows how to drive a GPIO pin directly. -In the development phase of an embedded project, it can be used to collect execution timings or as a debugging tool. +This user guide shows how to control a GPIO pin directly using GPIO driver APIs. +In the development phase of an embedded project, you can use this configuration to set the pin state using software, without any intermediary circuitry or additional hardware components. +You can use this solution to collect execution timings, or as a debugging tool. -Declaring the GPIO pin -********************** +You can copy the following configuration snippets manually into the devicetree overlay files. +You can also use the `Devicetree Visual Editor `_ (either in GUI or text mode) in the |nRFVSC| to apply them. -To declare a GPIO pin node, use a DTS node with ``nordic,gpio-pins`` compatible set in the :term:`devicetree `. -If your application does not use the same GPIO instance as used by the node, enable the GPIO port instance required by the GPIO driver. +.. rst-class:: numbered-step -This DTS content can be introduced in the DTS of your board, application, or overlay file. -Pins defined this way can be accessed using devicetree macros. +Define the compatible DTS node +****************************** -The following snippet shows the declaration of a GPIO pin node for **Pin 2** of **GPIO0**. -The node is labeled as ``user-dbg-pin``. -Additionally, the ``gpio0`` instance and ``gpiote0`` are enabled, so the GPIO driver can be built and executed. +You need to define a new GPIO pin devicetree node for the pin. +The devicetree node needs to be compatible with the GPIO devicetree binding. +GPIO APIs use the devicetree node to refer to the specified GPIO pin. + +If you work with a Nordic Semiconductor device, you can use the binding definition in :file:`nrf/dts/bindings/gpio`. + +See Zephyr's documentation about :ref:`zephyr:devicetree` and :ref:`zephyr:gpio_api` for more information. + +.. rst-class:: numbered-step + +Configure the GPIO pin through DTS +********************************** + +To declare a GPIO pin node, create a DTS node in the DTS of your board or application's DTS overlay. +Pins defined this way can be accessed using the :ref:`GPIO devicetree APIs`. + +Make sure that GPIO ports used by the GPIO pins are enabled. +The following snippet shows the declaration of a GPIO pin node called ``user_dbg_pin``: .. code-block:: c @@ -41,8 +56,20 @@ Additionally, the ``gpio0`` instance and ``gpiote0`` are enabled, so the GPIO dr status = "okay"; }; -Using the pin in your application -********************************* +In this snippet: + +* The GPIO pin node is labelled as ``user_dbg_pin`` (with the ``user-dbg-pin`` node name). + + * ``compatible`` specifies the binding definition to be used (``nordic,gpio-pins`` from :file:`nrf/dts/bindings/gpio`). + * ``gpios`` specifies which pin node is being used (**Pin 2** of **GPIO0**). + * ``status`` enables the pin node when it is set to ``"okay"``. + +* Additionally, the ``gpio0`` and ``gpiote0`` instances are enabled, so the GPIO driver can be built and executed. + +.. rst-class:: numbered-step + +Include the pin in your application +*********************************** To let your application access the declared pins, use the following devicetree macros: @@ -54,7 +81,7 @@ To let your application access the declared pins, use the following devicetree m static const struct gpio_dt_spec pin_dbg = GPIO_DT_SPEC_GET_OR(DT_NODELABEL(user_dbg_pin), gpios, {0}); -#. Make sure your application initializes the pin: +#. Make sure your application initializes the pin using the :c:func:`gpio_pin_configure_dt` function: .. code-block:: c @@ -62,7 +89,7 @@ To let your application access the declared pins, use the following devicetree m gpio_pin_configure_dt(&pin_dbg, GPIO_OUTPUT_INACTIVE); } -#. To let your application drive the pin, add the following code where needed: +#. Add the following code where needed to let your application drive the pin using the :c:func:`gpio_pin_set_dt` function: .. code-block:: c @@ -83,7 +110,8 @@ This is an easy way to disable this debugging infrastructure. Declaring multiple pins *********************** -Multiple pins can be declared in one GPIO property as well. +You can also declare multiple pins in one GPIO property. +See the following code snippet: .. code-block:: c @@ -96,8 +124,7 @@ Multiple pins can be declared in one GPIO property as well. }; }; -To initialize the defined GPIO pin structures, use the ``GPIO_DT_SPEC_INST_GET_BY_IDX_OR()`` macro. - +To initialize the defined GPIO pin structures, use the :c:macro:`GPIO_DT_SPEC_INST_GET_BY_IDX_OR` macro: .. code-block:: c diff --git a/doc/nrf/app_dev/config_and_build/kconfig/index.rst b/doc/nrf/app_dev/config_and_build/kconfig/index.rst index 9cb30b41dad6..f5dec6f213fb 100644 --- a/doc/nrf/app_dev/config_and_build/kconfig/index.rst +++ b/doc/nrf/app_dev/config_and_build/kconfig/index.rst @@ -88,7 +88,7 @@ See :ref:`zephyr:setting_configuration_values` in the Zephyr documentation for i .. group-tab:: nRF Connect for VS Code - If you work with |nRFVSC|, you can use one of the following options: + If you work with the |nRFVSC|, you can use one of the following options: * Edit the :file:`prj.conf` directly in |VSC|. * Select an extra Kconfig fragment file when you `build an application `_. diff --git a/doc/nrf/app_dev/config_and_build/multi_image.rst b/doc/nrf/app_dev/config_and_build/multi_image.rst index 5292c17eb22d..bca2861a7437 100644 --- a/doc/nrf/app_dev/config_and_build/multi_image.rst +++ b/doc/nrf/app_dev/config_and_build/multi_image.rst @@ -339,11 +339,6 @@ For example, in the |NCS| applications and samples that use different :ref:`buil The listing below describes how to leverage this functionality, where ``ACI_NAME`` is the name of the child image to which the configuration will be applied. -.. literalinclude:: ../../../../cmake/multi_image.cmake - :language: c - :start-at: It is possible for a sample to use a custom set of Kconfig fragments for a - :end-before: set(ACI_CONF_DIR ${config_dir}/child_image) - When you are using :ref:`app_build_additions_build_types` and the configuration name has been inferred, the child image Kconfig overlay file is searched at :file:`child_image/_.conf`. Alternatively, the child image Kconfig configuration file can be introduced as :file:`child_image//prj.conf` and follow the same pattern as the parent Kconfig. For example, :file:`child_image/mcuboot/prj_release.conf` can be used to define the ``release`` build type for the ``mcuboot`` child image. diff --git a/doc/nrf/app_dev/config_and_build/output_build_files.rst b/doc/nrf/app_dev/config_and_build/output_build_files.rst index bdf014ebe2df..e5b0f339b4dc 100644 --- a/doc/nrf/app_dev/config_and_build/output_build_files.rst +++ b/doc/nrf/app_dev/config_and_build/output_build_files.rst @@ -101,6 +101,13 @@ Which files you are going to use depends on the application configuration and no | | (customizable by user, sample name by default). | | | | For example: :file:`127F-0141-01020003-light_switch.zigbee`. | | +--------------------------------------+--------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ +| :file:`_.bin`| Set of application update images specific for :ref:`liblwm2m_carrier_readme`. It is required for the | Divided FOTA over LwM2M using the :ref:`liblwm2m_carrier_readme` library for | +| in :file:`lwm2m_carrier_divided_dfu` | divided FOTA procedure in the SoftBank network. | single-core applications certified in the SoftBank network. | +| folder | See :kconfig:option:`CONFIG_LWM2M_CARRIER_SOFTBANK_DIVIDED_FOTA` for more information. | | +| | The ** is the value of ``SB_CONFIG_LWM2M_CARRIER_DIVIDED_DFU_VERSION``. | | +| | The ** is a zero-padded three digit number that corresponds to the number of the file in the | | +| | update sequence. For example: :file:`versionA_001.bin`. | | ++--------------------------------------+--------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+ .. _app_build_mcuboot_output: diff --git a/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_configuring_west.rst b/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_configuring_west.rst index f1522bbc1e8b..7f53dcd0a4f8 100644 --- a/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_configuring_west.rst +++ b/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_configuring_west.rst @@ -3,16 +3,23 @@ Configuring sysbuild usage in west ################################## -The |NCS| has :ref:`sysbuild enabled by default ` for for :ref:`repository applications ` in the :ref:`SDK repositories `. +The |NCS| has :ref:`sysbuild enabled by default ` for :ref:`all types of applications ` in the :ref:`SDK repositories `. -If you work with out-of-tree applications, such as :ref:`workspace ` or :ref:`freestanding applications `, you can configure your project to use sysbuild by default whenever invoking ``west build``. +You can configure your project to not sysbuild by default whenever invoking ``west build``. You can do this either per-workspace, using the local configuration option, or for all your workspaces, using the global configuration option: .. tabs:: .. group-tab:: Local sysbuild configuration - Use the following command to configure west to use sysbuild by default for building all projects in the current workspace (including any freestanding applications that are built against it): + Use the following command to configure west not to use sysbuild by default for building all projects in the current workspace: + + .. parsed-literal:: + :class: highlight + + west config --local build.sysbuild False + + Use the following command to configure west to use sysbuild by default: .. parsed-literal:: :class: highlight @@ -21,7 +28,14 @@ You can do this either per-workspace, using the local configuration option, or f .. group-tab:: Global sysbuild configuration - Use the following command to configure west to use sysbuild by default for building all projects in all workspaces: + Use the following command to configure west not to use sysbuild by default for building all projects in all workspaces: + + .. parsed-literal:: + :class: highlight + + west config --global build.sysbuild False + + Use the following command to configure west to use sysbuild by default: .. parsed-literal:: :class: highlight diff --git a/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_forced_options.rst b/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_forced_options.rst index 2768ae589ff0..b2f4773cefff 100644 --- a/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_forced_options.rst +++ b/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_forced_options.rst @@ -64,10 +64,6 @@ Trying to change them directly in an image will result in the new value being ov | :kconfig:option:`CONFIG_CHIP_OTA_REQUESTOR` + ``SB_CONFIG_MATTER_OTA`` | | +-------------------------------------------------------------------------+ | | | :kconfig:option:`CONFIG_CHIP_OTA_IMAGE_BUILD` + | | -+-------------------------------------------------------------------------+---------------------------------------------------------------------------+ | -| :kconfig:option:`CONFIG_SUIT_MPI_APP_RECOVERY` + ``SB_CONFIG_SUIT_BUILD_RECOVERY`` | | -+-------------------------------------------------------------------------+ | | -| :kconfig:option:`CONFIG_SUIT_MPI_RAD_RECOVERY` + | | +-------------------------------------------------------------------------+---------------------------------------------------------------------------+-------------------------+ | :kconfig:option:`CONFIG_SINGLE_APPLICATION_SLOT` + ``SB_CONFIG_MCUBOOT_MODE_SINGLE_APP`` | MCUboot | +-------------------------------------------------------------------------+---------------------------------------------------------------------------+ | diff --git a/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_images.rst b/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_images.rst index 3b659e158337..4d2333a70724 100644 --- a/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_images.rst +++ b/doc/nrf/app_dev/config_and_build/sysbuild/sysbuild_images.rst @@ -3,6 +3,10 @@ Sysbuild images ############### +.. contents:: + :local: + :depth: 2 + :ref:`configuration_system_overview_sysbuild` allows you to add additional images to your builds. @@ -43,8 +47,6 @@ These options determine whether the secure boot image is included on the network +---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_802154_RPMSG`` | Zephyr 802.15.4 image :zephyr:code-sample:`nrf_ieee802154_rpmsg`. | +---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| ``SB_CONFIG_NETCORE_MULTIPROTOCOL_RPMSG`` | |NCS| multiprotocol_rpmsg Bluetooth and 802.15.4 image :ref:`multiprotocol-rpmsg-sample`. | -+---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_IPC_RADIO`` | |NCS| ipc_radio image :ref:`ipc_radio`. | +---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_NONE`` | No network core image. | @@ -190,8 +192,8 @@ sysbuild.cmake: .. _sysbuild_images_adding_via_a_zephyr_module: -Adding via a zephyr module --------------------------- +Adding through a Zephyr module +------------------------------ To add images in a Zephyr module, create a folder within the module to hold the `Kconfig.sysbuild` and (optionally, if needed) `CMakeLists.txt` files. Then, add this folder to the Zephyr module file: diff --git a/doc/nrf/app_dev/config_and_build/sysbuild/zephyr_samples_sysbuild.rst b/doc/nrf/app_dev/config_and_build/sysbuild/zephyr_samples_sysbuild.rst index dc3298fa1caa..137e15531fbb 100644 --- a/doc/nrf/app_dev/config_and_build/sysbuild/zephyr_samples_sysbuild.rst +++ b/doc/nrf/app_dev/config_and_build/sysbuild/zephyr_samples_sysbuild.rst @@ -20,8 +20,6 @@ For applications and samples in the |NCS| repository, this is handled automatica +---------------------------------------------------------+--------------------------------------------+-----------+----------+-----------------------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_802154_RPMSG`` | :zephyr:code-sample:`nrf_ieee802154_rpmsg` | ✕ | ✓ | | +---------------------------------------------------------+--------------------------------------------+-----------+----------+-----------------------------------------------------------------------------------------------------------------------+ -| ``SB_CONFIG_NETCORE_MULTIPROTOCOL_RPMSG`` | :ref:`multiprotocol-rpmsg-sample` | ✓ | ✓ | | -+---------------------------------------------------------+--------------------------------------------+-----------+----------+-----------------------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_IPC_RADIO`` | :ref:`ipc_radio` | ✓ | ✓ | Requires additional configuration. The following Kconfig options provide predefined configurations: | | | | | | ``SB_CONFIG_NETCORE_IPC_RADIO_BT_HCI_IPC`` enables HCI serialization | | | | | | for Bluetooth, ``SB_CONFIG_NETCORE_IPC_RADIO_BT_RPC`` enables nRF RPC serialization for Bluetooth, or | @@ -34,7 +32,7 @@ The default for Thingy:53 is the :ref:`nrf5340_empty_net_core` sample applicatio The default for other nRF53 devices is having no image added to the build. When configuring an application, such as :zephyr:code-sample:`ble_peripheral_hr`, you must configure it with a supported network core image to ensure proper functionality. -For basic Bluetooth samples, you can use :zephyr:code-sample:`bluetooth_hci_ipc`, :ref:`multiprotocol-rpmsg-sample`, or :ref:`ipc_radio` (one of the :ref:`companion components `). +For basic Bluetooth samples, you can use :zephyr:code-sample:`bluetooth_hci_ipc`, or :ref:`ipc_radio` (one of the :ref:`companion components `). Use one of the following command patterns to build a sample with the :zephyr:code-sample:`bluetooth_hci_ipc` network image selected (with the relevant *board_target*, path to your application *app_dir*, and path to Zephyr's shared sysbuild directory */share/sysbuild*): .. tabs:: diff --git a/doc/nrf/app_dev/create_application.rst b/doc/nrf/app_dev/create_application.rst index fcca7084246d..6c2de4e87a27 100644 --- a/doc/nrf/app_dev/create_application.rst +++ b/doc/nrf/app_dev/create_application.rst @@ -100,6 +100,7 @@ This application type is suitable for the following development cases: * You want to make changes to one or more of the repositories of the |NCS| when working on the application. * You want to develop a project that involves more than one board target, for example using a mesh networking protocol like :ref:`ug_matter` or :ref:`ug_bt_mesh`. * You want to run a big project that lets you develop most features without having to patch the |NCS| tree, for example with out-of-tree boards, drivers, SoCs, and so on. +* You want to use out-of-tree applications from the `nRF Connect SDK Add-ons`_ index. For more information about applications placed in workspace in the |NCS|, see the :ref:`workflow 4 on the development model page `. @@ -110,8 +111,7 @@ Freestanding application This kind of application is handled separately from the |NCS|. It is located out-of-tree, that is outside of a west workspace, and is not using the `west manifest file`_ to specify the SDK version. -Instead, the |NCS| version is taken from the :makevar:`ZEPHYR_BASE` environment variable. -This means that all freestanding applications will use the same |NCS| version and the same copy of the SDK. +The build system will find the location of the SDK through the :makevar:`ZEPHYR_BASE` environment variable, which is set either through a script or manually in an IDE. With this kind of application, the workspace has the following structure: @@ -171,17 +171,18 @@ Use the following steps depending on the application placement: The application creation process starts after you enter the name. When the application is created, a VS Code prompt appears asking you what to do with the application. #. Click :guilabel:`Open`. - This opens the new application and adds it to the :guilabel:`Applications View` in the extension. + This will open the new application and add it to the :guilabel:`Applications View` in the extension. At this point, you have created a freestanding application. #. Add the :file:`west.yml` to create a west workspace around the application: a. In the :guilabel:`Welcome View`, click the :guilabel:`Manage SDKs` action. A quick pick menu appears. - #. Click :guilabel:`Create west workspace`. + #. Click :guilabel:`Manage West Workspace...`. + #. In the :guilabel:`Manage West Workspace...` action menu, click :guilabel:`Create West Workspace`. #. Enter a location for the :file:`west.yml` file that matches the location provided in step 4. #. Select the SDK version for the west workspace. - The west workspace is initialized and the :guilabel:`Manage SDKs` action changes to :guilabel:`Manage west workspace`. - #. Click :guilabel:`Manage west workspace` and select :guilabel:`West Update` button to update the workspace modules. + The west workspace is initialized. + #. Click :guilabel:`Manage SDKs` > :guilabel:`Manage West Workspace` > :guilabel:`West Update` to update the workspace modules. You can now start :ref:`configuring and building ` the application. @@ -290,3 +291,34 @@ Use the following steps depending on the application type: This allows CMake to automatically load the boilerplate code required for building |NCS| applications. You can now start :ref:`configuring and building ` the application using the command line. + +.. _creating_add_on_index: + +Creating application from add-ons +================================= + +You can create a :ref:`workspace application ` also by browsing and copying reference applications from the `nRF Connect SDK Add-ons`_ index. +The index is a collection of publicly available |NCS| supplementary components that extend the SDK's functionality. +In addition to applications, it includes drivers, libraries, and protocol implementations. + +To create an application from the add-on index, complete the following steps: + +.. tabs:: + + .. tab:: nRF Connect for VS Code (recommended) + + Complete the following steps in the |nRFVSC|: + + 1. In the :guilabel:`Welcome View`, click :guilabel:`Create a new application`. + #. Select :guilabel:`Browse nRF Connect SDK Add-on Index`. + #. Browse through the available add-ons and select one that matches your needs. + #. Follow the creation wizard to set up your workspace application. + + .. tab:: Command line + + When creating add-on applications from the command line, follow the instructions provided in the `nRF Connect SDK Add-ons`_ repository. + These instructions guide you through the process of copying and configuring the add-on application in your workspace. + +The add-on is copied to your workspace and automatically configured with a west workspace, allowing you to start development right away. + +For more information, including how to contribute your own add-on to the index, read :file:`README.md` and :file:`CONTRIBUTING.md` in the `ncs-app-index repository `_. diff --git a/doc/nrf/app_dev/device_guides/custom/defining_custom_board.rst b/doc/nrf/app_dev/device_guides/custom/defining_custom_board.rst new file mode 100644 index 000000000000..92845b0c7297 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/custom/defining_custom_board.rst @@ -0,0 +1,39 @@ +.. _defining_custom_board: + +Defining custom board +##################### + +.. contents:: + :local: + :depth: 2 + +Defining your own board is a very common step in application development, because applications are typically designed to run on boards that are not directly supported by the |NCS| and these boards are often custom designs not available publicly. + +This page lists resources about defining custom board files in the |NCS|. +To read about how to program a custom board, see :ref:`programming_custom_board`. + +.. note:: + If you want to go through a dedicated training related to some of the topics covered here, enroll in the `nRF Connect SDK Intermediate course`_ in the `Nordic Developer Academy`_. The `Lesson 3 – Adding custom board support`_ shows how to add custom board support using the |nRFVSC|. + +Guidelines for custom boards +**************************** + +To define your own board, you can use the following Zephyr guides as reference, since boards are defined in the |NCS| just as they are in Zephyr: + +* :ref:`custom_board_definition` is a guide to adding your own custom board to the Zephyr build system. +* :ref:`board_porting_guide` is a complete guide to porting Zephyr to your own board. + +Adding a custom board in the |nRFVSC| +************************************* + +|nRFVSC| lets you add your own boards to your |NCS| project. +Read the `How to work with boards and devices`_ page in the extension documentation for detailed steps. + +Application porting guides +************************** + +Some :ref:`applications` in the |NCS| provide detailed guides for adapting the application to custom boards: + +* :ref:`nrf_desktop` - See :ref:`nrf_desktop_porting_guide` in the application documentation. +* :ref:`nrf53_audio_app` - See :ref:`nrf53_audio_app_adapting` in the application documentation. +* :ref:`nrf_machine_learning_app` - See :ref:`nrf_machine_learning_app_porting_guide` in the application documentation. diff --git a/doc/nrf/app_dev/device_guides/custom/index.rst b/doc/nrf/app_dev/device_guides/custom/index.rst new file mode 100644 index 000000000000..c0c28713fac8 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/custom/index.rst @@ -0,0 +1,20 @@ +.. _ug_custom_board: + +Developing with custom boards +############################# + +.. |nrf_series| replace:: custom boards + +.. include:: /includes/guides_complementary_to_app_dev.txt + +Custom boards are hardware designs that are not directly provided or supported by Nordic Semiconductor. +These are typically boards that use Nordic Semiconductor Systems on Chip (SoCs) for custom projects. + +The following sections provide information on how to work with custom boards in the |NCS|. + +.. toctree:: + :maxdepth: 2 + :caption: Subpages: + + defining_custom_board + programming_custom_board diff --git a/doc/nrf/app_dev/device_guides/custom/programming_custom_board.rst b/doc/nrf/app_dev/device_guides/custom/programming_custom_board.rst new file mode 100644 index 000000000000..96ffb2f368ab --- /dev/null +++ b/doc/nrf/app_dev/device_guides/custom/programming_custom_board.rst @@ -0,0 +1,79 @@ +.. _programming_custom_board: + +Connecting custom boards for programming +######################################## + +.. contents:: + :local: + :depth: 2 + +After you :ref:`created custom board files `, you need to connect your custom board to a debug probe for programming. + +Hardware requirements +********************* + +To connect a custom board for programming, you need the following hardware: + +* A debug probe supporting Serial Wire Debug (SWD), such as: + + * A Development Kit (DK) from Nordic Semiconductor (all include an onboard debug probe) + * Dedicated debug adapter (like SEGGER J-Link) + +* Connecting wires +* USB cable for the DK or the debug adapter + +Required connections +******************** + +You have to connect the following pins between your custom board and the debug probe: + +* Essential connections: + + * SWDCLK (Clock) + * SWDIO (Data) + * GND (Ground) + * VTref (Target Reference Voltage) + +* Optional connections: + + * VDD - For powering the board from debug probe. + If the custom board is not powered from VDD, it must be powered externally. + * RESET - For resetting the board. + If the custom board does not have a reset pin, you can use the reset pin on the debug probe. + +Connecting the debug probe +************************** + +The following steps describe how to connect your custom board to a debug probe. + +.. tabs:: + + .. group-tab:: Using a DK as debug probe + + Development Kits from Nordic Semiconductor include an onboard debug probe that supports the J-Link interface. + + To connect your custom board to this onboard debug probe, complete the following steps: + + 1. Locate the SWD debug output header pins on your DK. + Check the DK user guide on `Nordic Semiconductor TechDocs`_ for the exact location of these pins. + For example, for the nRF52840 DK, read the `Debug output `_ page. + #. Connect the required pins to your custom board. + #. Connect the DK to your PC using the USB cable. + #. Install required J-Link drivers if not already present. + + .. group-tab:: Using a dedicated debug adapter + + If you do not have a Development Kit, use a dedicated debug adapter: + + 1. Connect a compatible debug probe (like SEGGER J-Link) to your custom board. + See the debug probe documentation for the exact pinout. + #. Install the appropriate debug interface drivers. + #. Connect the debug probe to your PC using the USB cable. + +.. note:: + The |NCS| supports various debug interfaces like J-Link and CMSIS-DAP, provided you have the proper drivers installed. + +Programming custom boards +************************* + +After you connected the custom board, you can program your application to the board using either the :ref:`standard programming instructions ` or the `Programmer app`_ from `nRF Connect for Desktop`_. diff --git a/doc/nrf/app_dev/device_guides/fem/21540ek_dev_guide.rst b/doc/nrf/app_dev/device_guides/fem/21540ek_dev_guide.rst index 03a71a63a9a7..0f378962ad3b 100644 --- a/doc/nrf/app_dev/device_guides/fem/21540ek_dev_guide.rst +++ b/doc/nrf/app_dev/device_guides/fem/21540ek_dev_guide.rst @@ -7,7 +7,7 @@ Developing with the nRF21540 EK :local: :depth: 2 -The nRF21540 :term:`Evaluation Kit (EK)` is an RF :term:`Front-End Module (FEM)` for Bluetooth Low Energy, Bluetooth Mesh, 2.4 GHz proprietary, Thread, and Zigbee range extension. +The nRF21540 :term:`Evaluation Kit (EK)` is an RF :term:`Front-End Module (FEM)` for Bluetooth® Low Energy, Bluetooth Mesh, 2.4 GHz proprietary, Thread, and Zigbee range extension. When combined with an nRF52 or nRF53 Series SoC, the nRF21540 RF FEM's +21 dBm TX output power and 13 dB RX gain ensure a superior link budget for up to 16x range extension. .. figure:: images/nrf21540ek.png @@ -44,17 +44,29 @@ Alternatively, add the shield in the project's :file:`CMakeLists.txt` file: Building for a multicore board ============================== -When building for a board with an additional network core, like the nRF5340, add the ``-DSHIELD`` variable with the *childImageName_* parameter between ``-D`` and ``SHIELD`` to build for the network core. -In this case, the application core is only responsible for forwarding to the network core the pins needed to control the nRF21540 EK. -The application core can be set up to forward the needed pins using the ``-DSHIELD=nrf21540ek_fwd`` setting. -For example: +When building for a board with an additional network core, like the nRF5340, add the ``-DSHIELD`` parameter to the command line: -.. parsed-literal:: - :class: highlight +.. code-block:: console + + west build -b nrf5340dk/nrf5340/cpuapp -- -DSHIELD=nrf21540ek + +In this case, the sysbuild will pass the *SHIELD=nrf21540ek* variable to all images that are built by the command. +The build system will pick automatically appropriate overlay and configuration files for images for each core. +Please note that the files are different for each of the cores. +For the application core the overlay containing forwarding the FEM pins to the network core will be used. +For the network core the overlay enabling nRF21540 FEM on the network core will be used. +In case the application contains additional images for which the *SHIELD* variable should not be passed, you must pass manually the *SHIELD* variable to each relevant image build separately. + +.. code-block:: console + + west build -b nrf5340dk/nrf5340/cpuapp -- -D_SHIELD=nrf21540ek -Dipc_radio_SHIELD=nrf21540ek - west build -b nrf5340dk/nrf5340/cpuapp -- -DSHIELD=nrf21540ek_fwd -Dipc_radio_SHIELD=nrf21540ek +In this case the *SHIELD=nrf21540ek* will be passed to the build of the *app_image_name* image for the application core. +The build system will pick automatically an overlay file containing forwarding the FEM pins to the network core. +The *SHIELD=nrf21540ek* variable will be passed to the build of the ``ipc_radio`` image for the network core. +The build system will pick automatically an overlay file enabling nRF21540 FEM on the network core. -In this command, the *childImageName_* parameter has the ``ipc_radio_`` value as default and builds the application with support for the combination of 802.15.4 and Bluetooth. +In this command, the ``ipc_radio`` image us used as default and builds the network core image with support for the combination of 802.15.4 and Bluetooth. The ``ipc_radio`` has been used since the build system migration to sysbuild. See :ref:`Migrating to sysbuild ` page. Setting the correct sysbuild option enables support for 802.15.4 and Bluetooth :ref:`ipc_radio`. diff --git a/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio.rst b/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio.rst index d8b8ce7a392d..71f48b1ba557 100644 --- a/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio.rst +++ b/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio.rst @@ -35,6 +35,15 @@ To use nRF21540 in GPIO mode, complete the following steps: }; }; + When you add the above node to the devicetree and build the application, FEM-related Kconfig options are automatically enabled and FEM support is enabled. + Additionally, you can consider setting the following Kconfig options: + + * :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB` + * :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB_POUTA` + * :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB_POUTB` + * :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_RX_GAIN_DB` + * :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_RUNTIME_PA_GAIN_CONTROL` + #. Optionally replace the node name ``name_of_fem_node``. #. Replace the pin numbers provided for each of the required properties: @@ -51,18 +60,17 @@ To use nRF21540 in GPIO mode, complete the following steps: The state of the remaining control pins should be set in other ways and according to `nRF21540 Product Specification`_. -#. On nRF53 devices, you must also apply the same devicetree node mentioned in **Step 1** to the network core using sysbuild. - To apply the overlay to the correct network core child image, create an overlay file named :file:`sysbuild/*childImageName*/boards/nrf5340dk_nrf5340_cpunet.overlay` in your application directory, for example :file:`sysbuild/ipc_radio/boards/nrf5340dk_nrf5340_cpunet.overlay`. - For more information, see the :ref:`Migrating to sysbuild ` page. - - The *childImageName* default value is set to ``ipc_radio``: +#. On nRF53 devices, the devicetree nodes described above must be added to the network core. + For the application core, you must also add a GPIO forwarder node to its devicetree file: - ``ipc_radio`` represents all applications with support for the combination of both 802.15.4 and Bluetooth. - You can configure your application using the following sysbuild configurations: + .. code-block:: devicetree - * ``SB_CONFIG_NETCORE_IPC_RADIO=y`` for applications having support for 802.15.4, but not for Bluetooth. - * ``SB_CONFIG_NETCORE_IPC_RADIO_BT_HCI_IPC=y`` for application having support for Bluetooth, but not for 802.15.4. - * ``SB_CONFIG_NETCORE_IPC_RADIO=y`` and ``SB_CONFIG_NETCORE_IPC_RADIO_BT_HCI_IPC=y`` for multiprotocol applications having support for both 802.15.4 and Bluetooth.SB_CONFIG_NETCORE_IPC_RADIO=y`` and ``SB_CONFIG_NETCORE_IPC_RADIO_BT_HCI_IPC=y`` for multiprotocol applications having support for both 802.15.4 and Bluetooth. + &gpio_fwd { + nrf21540-gpio-if { + gpios = <&gpio0 13 0>, /* tx-en-gpios */ + <&gpio0 14 0>, /* rx-en-gpios */ + <&gpio0 15 0>; /* pdn-gpios */ + }; + }; - .. note:: - This step is not needed when testing with :ref:`direct_test_mode` and :ref:`radio_test` on the nRF53 Series devices. + The pins defined in the GPIO forwarder node in the application core's devicetree file must match the pins defined in the FEM nodes in the network core's devicetree file. diff --git a/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio_spi.rst b/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio_spi.rst index cb96d8ac3f38..330a19b5ce40 100644 --- a/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio_spi.rst +++ b/doc/nrf/app_dev/device_guides/fem/fem_nrf21540_gpio_spi.rst @@ -27,7 +27,8 @@ To use nRF21540 in GPIO+SPI mode, complete the following steps: tx-en-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>; rx-en-gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>; pdn-gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; - spi-if = <&nrf_radio_fem_spi> + spi-if = <&nrf_radio_fem_spi>; + supply-voltage-mv = <3000>; }; }; #. Optionally replace the device name ``name_of_fem_node``. @@ -52,17 +53,17 @@ To use nRF21540 in GPIO+SPI mode, complete the following steps: &pinctrl { spi3_default_alt: spi3_default_alt { group1 { - psels = , - , - ; + psels = , + , + ; }; }; spi3_sleep_alt: spi3_sleep_alt { group1 { - psels = , - , - ; + psels = , + , + ; low-power-enable; }; }; @@ -85,7 +86,7 @@ To use nRF21540 in GPIO+SPI mode, complete the following steps: In this example, the nRF21540 is controlled by the ``spi3`` bus. Replace the SPI bus according to your hardware design, and create alternative entries for SPI3 with different ``pinctrl-N`` and ``pinctrl-names`` properties. -#. On nRF53 devices, the devicetree nodes described above must be added to the network core. +#. On nRF53 devices, the devicetree nodes described above must be added to the network core and ``spi0`` instance of the network core must be used. For the application core, you must also add a GPIO forwarder node to its devicetree file: .. code-block:: devicetree @@ -121,3 +122,4 @@ To use nRF21540 in GPIO+SPI mode, complete the following steps: .. note:: The nRF21540 GPIO-only mode of operation is selected by default in Kconfig when an nRF21540 node is provided in devicetree, as mentioned in the :ref:`ug_radio_fem_sw_support` section. To enable the GPIO+SPI mode of operation, you must explicitly set the :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_GPIO_SPI` Kconfig option to ``y``. + On an nRF5340, the :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_GPIO_SPI` Kconfig option must be set to ``y`` for the network core image. diff --git a/doc/nrf/app_dev/device_guides/nrf52/features.rst b/doc/nrf/app_dev/device_guides/nrf52/features.rst index c57cd33a7ef4..20e6a564ca91 100644 --- a/doc/nrf/app_dev/device_guides/nrf52/features.rst +++ b/doc/nrf/app_dev/device_guides/nrf52/features.rst @@ -10,7 +10,7 @@ Features of nRF52 Series The nRF52 Series of System-on-Chip (SoC) devices embed an Arm Cortex-M4 processor with Nordic Semiconductor's 2.4 GHz RF transceivers. All of the nRF52 Series SoCs have support for Bluetooth® 5 features, in addition to multiprotocol capabilities. -To get started with the nRF52 Series, download and run the `Quick Start`_ application from `nRF Connect for Desktop`_. +To get started with the nRF52 Series, download and run the `Quick Start app`_ in `nRF Connect for Desktop`_. For additional information, see the following documentation: @@ -51,7 +51,7 @@ See :ref:`zephyr:bluetooth` for documentation on the Bluetooth Host and open sou For documentation about the SoftDevice Controller and information on which controller variants support which chips, see :ref:`nrfxlib:softdevice_controller`. The |NCS| contains a variety of :ref:`ble_samples` that target nRF52 Series devices. -In addition, you can run the :ref:`zephyr:bluetooth-samples` that are included from Zephyr. +In addition, you can run the :zephyr:code-sample-category:`bluetooth` samples that are included from Zephyr. For available libraries, see :ref:`lib_bluetooth_services` (|NCS|) and :ref:`zephyr:bluetooth_api` (Zephyr). @@ -64,7 +64,7 @@ It is optimized for creating large-scale device networks, and implemented accord Bluetooth Mesh networking allows one-to-one, one-to-many, and many-to-many communication, using the Bluetooth LE protocol to exchange messages between the mesh nodes in the network. The |NCS| contains a variety of :ref:`bt_mesh_samples` that target nRF52 Series devices. -In addition, you can run the :ref:`Bluetooth Mesh samples ` that are included from Zephyr. +In addition, you can run the :zephyr:code-sample-category:`bluetooth` samples that are included from Zephyr. For available libraries, see :ref:`bt_mesh` (|NCS|) and :ref:`zephyr:bluetooth_mesh` (Zephyr). See the :ref:`ug_bt_mesh` user guide for information about how to use the supplied libraries and work with Bluetooth Mesh. @@ -119,7 +119,7 @@ USB The |NCS| contains a USB device stack for the USB 2.0 Full Speed peripheral that is available on a number of the nRF52 devices. You can find the implementation in the Zephyr repository. -See :ref:`zephyr:usb_api` for documentation and :ref:`zephyr:usb-samples` for a list of available samples. +See :ref:`zephyr:usb_api` for documentation and :zephyr:code-sample-category:`usb` for a list of available samples. The USB stack requires the USBD driver for nRF52 devices, which is available as part of `nrfx`_. The nrfx repository is included in the |NCS| as a module of the Zephyr repository. diff --git a/doc/nrf/app_dev/device_guides/nrf53/building_nrf53.rst b/doc/nrf/app_dev/device_guides/nrf53/building_nrf53.rst index 988b31bbb141..c5ef47fd9119 100644 --- a/doc/nrf/app_dev/device_guides/nrf53/building_nrf53.rst +++ b/doc/nrf/app_dev/device_guides/nrf53/building_nrf53.rst @@ -40,7 +40,7 @@ You can build and program separate images or combined images using the |nRFVSC|. Program the sample or application --------------------------------- -Complete the following steps to program the sample or application onto Thingy:91: +Complete the following steps to program the sample or application onto nRF5340 DK: #. Connect the nRF5340 development kit to your PC using a USB cable. #. Make sure that the nRF5340 DK and the external debug probe are powered on. @@ -56,6 +56,8 @@ To program the nRF5340 DK from the command line, use either west (which uses nrf .. note:: Programming the nRF5340 DK from the command line with west requires the `nRF Command Line Tools`_ v10.12.0 or later. + |nrf_CLT_deprecation_note| + .. tabs:: .. group-tab:: Separate images @@ -96,7 +98,7 @@ To program the nRF5340 DK from the command line, use either west (which uses nrf * :file:`rpc_host` * :file:`hci_rpsmg` * :file:`802154_rpmsg` - * :file:`multiprotocol_rpmsg` + * :file:`ipc_radio` #. Navigate to the build folder of the application sample and run the following command to erase the flash memory of the application core and program the application sample: @@ -145,134 +147,3 @@ To program the nRF5340 DK from the command line, use either west (which uses nrf .. note:: The ``--verify`` command confirms that the writing operation has succeeded. - -.. _thingy53_building_pgming: - -Building and programming with Thingy:53 -*************************************** - -You can program the Nordic Thingy:53 by using the images obtained by building the code in the |NCS| environment. - -To set up your system to be able to build a firmware image, follow the :ref:`installation` guide for the |NCS|. - -.. _thingy53_build_pgm_targets: - -Board targets -============= - -The board targets of interest for Thingy:53 in the |NCS| are listed in the following table: - -+--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+ -|Component | Board target | -+================================+==================================================================================================================================+ -| nRF5340 SoC - Application core |``thingy53/nrf5340/cpuapp`` for :ref:`Cortex-M Security Extensions (CMSE) disabled ` | -| | | -| |``thingy53/nrf5340/cpuapp/ns`` for :ref:`CMSE enabled ` | -+--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+ -| nRF5340 SoC - Network core |``thingy53/nrf5340/cpunet`` | -+--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+ - -The |NCS| uses :ref:`ug_multi_image` for Thingy:53 by default. -When you choose ``thingy53/nrf5340/cpuapp`` or ``thingy53/nrf5340/cpuapp/ns`` as the board target when building a sample or application, you will generate firmware for both the application core and network core: - -* The application core firmware consists of MCUboot bootloader and an application image. -* The network core firmware consists of network core bootloader (B0n) and application firmware of the network core. - -The build process generates firmware in two formats: - -* Intel Hex file (:file:`merged.hex` and :file:`merged_CPUNET.hex`) - Used with an external debug probe. - These file contains bootloaders and applications for each core. -* Binary files (:file:`zephyr.signed.bin`), containing signed application firmwares for the application and network core, respectively. - For convenience, the binary files are bundled in :file:`dfu_application.zip`, together with a manifest that describes them. - You can use the binary files or the combined zip archive to update application firmware for both cores, with either MCUboot serial recovery or OTA DFU using Bluetooth LE. - -For more information about files generated as output of the build process, see :ref:`app_build_output_files`. - -See the following sections for details regarding building and programming the firmware for Thingy:53 in various environments. -See :ref:`thingy53_app_update` for more detailed information about updating firmware on Thingy:53. - -.. _thingy53_build_pgm_targets_wifi: - -Building Wi-Fi applications on Thingy:53 ----------------------------------------- - -.. building_wi_fi_applications_on_thingy_53_start - -You can use the Nordic Thingy:53 with the nRF7002 Expansion Board (EB) for Wi-Fi development. -Connect the nRF7002 EB to the **P9** connector on Thingy:53. - -To build for the nRF7002 EB with Thingy:53, use the ``thingy53/nrf5340/cpuapp`` board target with the CMake ``SHIELD`` variable set to ``nrf7002eb``. -For example, you can use the following command when building on the command line: - -.. code-block:: - - west build -b thingy53/nrf5340/cpuapp -- -DSHIELD=nrf7002eb - -.. building_wi_fi_applications_on_thingy_53_end - -For the compatible Wi-Fi samples in the |NCS|, see the :ref:`wifi_samples` section. - -.. _thingy53_build_pgm_vscode: - -Building and programming using |VSC| -==================================== - -Complete the following steps to build and program using the |nRFVSC|: - -.. |sample_path_vsc| replace:: :file:`nrf/samples/bluetooth/peripheral_lbs` - -.. |vsc_sample_board_target_line| replace:: select ``thingy53/nrf5340/cpuapp`` as the board target - -.. include:: /includes/vsc_build_and_run.txt - -3. Program the sample or application: - - a. Connect the Nordic Thingy:53 to the debug out port on a 10-pin external debug probe, for example nRF5340 DK, using a 10-pin JTAG cable. - #. Connect the external debug probe to the PC using a USB cable. - #. Make sure that the Thingy:53 and the external debug probe are powered on. - #. Click :guilabel:`Flash` in the :guilabel:`Actions View`. - -.. _thingy53_build_pgm_command_line: - -Building and programming on the command line -============================================ - -You must :ref:`build_environment_cli` before you start building an |NCS| project on the command line. - -To build and program the source code from the command line, complete the following steps: - -1. |open_terminal_window_with_environment| -#. Go to the specific directory for the sample or application. - - For example, the directory path is :file:`ncs/nrf/applications/machine_learning` when building the source code for the :ref:`nrf_machine_learning_app` application. - -#. Make sure that you have the required version of the |NCS| repository by pulling the ``sdk-nrf`` repository on GitHub as described in :ref:`dm-wf-get-ncs` and :ref:`dm-wf-update-ncs` sections. -#. Get the rest of the dependencies using west: - - .. code-block:: console - - west update - -#. Build the sample or application code as follows: - - .. parsed-literal:: - :class: highlight - - west build -b *board_target* -d *destination_directory_name* - - The board target should be ``thingy53/nrf5340/cpuapp`` or ``thingy53/nrf5340/cpuapp/ns`` when building samples for the application core. - The proper child image for ``thingy53/nrf5340/cpunet`` will be built automatically. - See :ref:`thingy53_build_pgm_targets` for details. - -#. Program the sample or application: - - a. Connect the Nordic Thingy:53 to the debug out port on a 10-pin external debug probe, for example nRF5340 DK, using a 10-pin JTAG cable. - #. Connect the external debug probe to the PC using a USB cable. - #. Make sure that the Nordic Thingy:53 and the external debug probe are powered on. - #. Use the following command to program the sample or application to the device: - - .. code-block:: console - - west flash - - The device resets and runs the programmed sample or application. diff --git a/doc/nrf/app_dev/device_guides/nrf53/features_nrf53.rst b/doc/nrf/app_dev/device_guides/nrf53/features_nrf53.rst index 0ffb66726d8b..2a866192a52c 100644 --- a/doc/nrf/app_dev/device_guides/nrf53/features_nrf53.rst +++ b/doc/nrf/app_dev/device_guides/nrf53/features_nrf53.rst @@ -10,13 +10,12 @@ Features of nRF53 Series The nRF53 Series System-on-Chips (SoC) integrate a high-performance Arm® Cortex®-M33 dual-core processor with a 2.4 GHz RF transceiver, in addition to advanced security features. All nRF53 Series SoC support Bluetooth® 5.1 and Bluetooth Mesh, in addition to multiprotocol capabilities. -To get started with the nRF5340 DK, download and run the `Quick Start`_ application from `nRF Connect for Desktop`_. +To get started with the nRF5340 DK, download and run the `Quick Start app`_ in `nRF Connect for Desktop`_. For additional information, refer to the following resources: * `nRF53 Series`_ for the technical documentation on the nRF53 Series chips and associated kits. * :ref:`installation` and :ref:`configuration_and_build` documentation to install the |NCS| and learn more about its development environment. -* :ref:`ug_thingy53_gs` for getting started with the Thingy:53. Dual-core architecture ********************** @@ -34,7 +33,6 @@ The separation of application and network functionalities simplifies firmware up This architecture is ideal for devices requiring significant data processing alongside continuous wireless connectivity. - .. _ug_nrf5340_intro_net_core: Network core @@ -130,7 +128,7 @@ Bluetooth Low Energy - Application core * - :zephyr:code-sample:`bluetooth_hci_ipc` - | :ref:`Bluetooth Low Energy samples ` - | :ref:`Bluetooth samples in Zephyr ` + | :zephyr:code-sample-category:`bluetooth` * - :ref:`ble_rpc_host` (supported for development) - Some Bluetooth Low Energy samples, for example, :ref:`peripheral_hids_mouse`, :ref:`peripheral_uart` or :ref:`central_uart` @@ -151,7 +149,7 @@ The sample implements the RPMsg transport using the `OpenAMP`_ library to commun You can use either the SoftDevice Controller or the Zephyr Bluetooth LE Controller for this sample. See :ref:`ug_ble_controller` for more information. -For the application core, the |NCS| provides a series of :ref:`Bluetooth Low Energy samples `, in addition to the :ref:`Bluetooth samples in Zephyr `. +For the application core, the |NCS| provides a series of :ref:`Bluetooth Low Energy samples `, in addition to the :zephyr:code-sample-category:`bluetooth` samples. |multi_image| .. note:: @@ -173,7 +171,7 @@ Bluetooth Mesh Bluetooth Mesh operates on Bluetooth Low Energy (LE), and is implemented according to Bluetooth Mesh Profile Specification v1.0.1 and Bluetooth Mesh Model Specification v1.0.1. For the application core, the |NCS| provides several :ref:`bt_mesh_samples`. -In addition, you can find Bluetooth Mesh samples with :ref:`Bluetooth samples in Zephyr `. +In addition, you can find Bluetooth Mesh samples with :zephyr:code-sample-category:`bluetooth` samples. IEEE 802.15.4 (Thread and Zigbee) --------------------------------- @@ -217,7 +215,7 @@ Multiprotocol support for the nRF5340 DK * - Network core - Application core - * - :ref:`multiprotocol-rpmsg-sample` + * - :ref:`ipc_radio` - | :ref:`Thread samples ` | :ref:`Zigbee samples ` @@ -229,10 +227,8 @@ When using Thread or Zigbee in parallel with Bluetooth LE, run the low-level rad Bluetooth LE and IEEE 802.15.4 multiprotocol architecture in multicore SoC -For the network core, the |NCS| provides the :ref:`multiprotocol-rpmsg-sample` sample. -It is a combination of the :zephyr:code-sample:`bluetooth_hci_ipc` sample (for Bluetooth LE) and the :zephyr:code-sample:`nrf_ieee802154_rpmsg` sample (for IEEE 802.15.4). -This means that it enables both the Bluetooth LE Controller and the nRF IEEE 802.15.4 radio driver and simultaneously exposes the functionality of both stacks to the application core using the `RPMsg Messaging Protocol`_. -Separate RPMsg endpoints are used to obtain independent inter-core connections for each stack. +For the network core, the |NCS| provides the :ref:`ipc_radio`. +The :ref:`ipc_radio` enables both the Bluetooth LE Controller and the nRF IEEE 802.15.4 radio driver and simultaneously exposes the functionality of both stacks to the application. For the application core, the |NCS| provides a series of samples for the :ref:`Thread ` and :ref:`Zigbee ` protocols. |multi_image| diff --git a/doc/nrf/app_dev/device_guides/nrf53/index.rst b/doc/nrf/app_dev/device_guides/nrf53/index.rst index ce0c00c9c3c9..a4d32e31a2ba 100644 --- a/doc/nrf/app_dev/device_guides/nrf53/index.rst +++ b/doc/nrf/app_dev/device_guides/nrf53/index.rst @@ -1,7 +1,6 @@ .. _ug_nrf53: .. _nrf53_working: .. _ug_nrf5340: -.. _ug_thingy53: Developing with nRF53 Series ############################ @@ -29,10 +28,6 @@ Zephyr and the |NCS| provide support and contain board definitions for developin - ``nrf5340_audio_dk/nrf5340/cpuapp``, ``nrf5340_audio_dk/nrf5340/cpuapp/ns``, ``nrf5340_audio_dk/nrf5340/cpunet`` - | `Hardware Specification `_ | :ref:`nrf53_audio_app` - * - :ref:`zephyr:thingy53_nrf5340` - - PCA20053 - - ``thingy53/nrf5340/cpuapp``, ``thingy53/nrf5340/cpuapp/ns``, ``thingy53/nrf5340/cpunet`` - - `Hardware Specification `_ .. note:: The nRF5340 PDK has been deprecated with the introduction of the production-level nRF5340 DK. @@ -46,10 +41,6 @@ It is meant for use with for :ref:`nrf53_audio_app`, which integrate the LE Audi Given their complexity, the applications use custom building and programming procedures. Refer to their documentation for more information. -The Nordic Thingy:53 is a battery-operated prototyping platform for IoT Systems. -The Nordic Thingy:53 integrates the nRF5340 SoC that supports Bluetooth® Low Energy, IEEE 802.15.4 based protocols and Near Field Communication (NFC). -The nRF5340 is augmented with the nRF21540 RF FEM (Front-end Module) Range extender that has an integrated power amplifier (PA)/low-noise amplifier (LNA) and nPM1100 Power Management IC (PMIC) that has an integrated dual-mode buck regulator and battery charger. - .. toctree:: :maxdepth: 2 :caption: Subpages: @@ -61,5 +52,4 @@ The nRF5340 is augmented with the nRF21540 RF FEM (Front-end Module) Range exten simultaneous_multi_image_dfu_nrf5340 serial_recovery logging_nrf5340 - thingy53_application_guide qspi_xip_guide_nrf5340 diff --git a/doc/nrf/app_dev/device_guides/nrf53/multi_image_nrf5340.rst b/doc/nrf/app_dev/device_guides/nrf53/multi_image_nrf5340.rst index f1e54f7e5bc1..7c82b3bfba87 100644 --- a/doc/nrf/app_dev/device_guides/nrf53/multi_image_nrf5340.rst +++ b/doc/nrf/app_dev/device_guides/nrf53/multi_image_nrf5340.rst @@ -47,9 +47,6 @@ The combination of these options determines which (if any) sample is included in * - :kconfig:option:`CONFIG_NRF_802154_SER_HOST` - :zephyr:code-sample:`nrf_ieee802154_rpmsg` - --- - * - :kconfig:option:`CONFIG_BT_HCI_IPC` and :kconfig:option:`CONFIG_NRF_802154_SER_HOST` - - :ref:`multiprotocol-rpmsg-sample` - - --- * - :kconfig:option:`CONFIG_NCS_SAMPLE_EMPTY_APP_CORE_CHILD_IMAGE` - --- - :ref:`nrf5340_empty_app_core` diff --git a/doc/nrf/app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340.rst b/doc/nrf/app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340.rst index 621b2f053ef2..f389d9f96127 100644 --- a/doc/nrf/app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340.rst +++ b/doc/nrf/app_dev/device_guides/nrf53/qspi_xip_guide_nrf5340.rst @@ -92,7 +92,7 @@ See the following snippet for an example of the Nordic Thingy:53 configuration t }; .. note:: - Due to QSPI peripheral product anomaly, the QSPI peripheral must be ran with the ``HFCLK192MCTRL=0`` setting. + Due to QSPI peripheral product anomaly, the QSPI peripheral must be run with the ``HFCLK192MCTRL=0`` setting. Any other value may cause undefined operation of the device. Add the following to the DTS overlay for your board: @@ -205,6 +205,9 @@ Programming the project For the nRF5340 DK and other boards equipped with flash working in the QSPI mode, use the :ref:`standard programming command ` (``west flash``). For other cases, set up a configuration file for nrfjprog, as described in the following section. +.. note:: + |nrfjprog_deprecation_note| + Programming to external flash in SPI/DSPI mode ============================================== diff --git a/doc/nrf/app_dev/device_guides/nrf53/thingy53_application_guide.rst b/doc/nrf/app_dev/device_guides/nrf53/thingy53_application_guide.rst deleted file mode 100644 index a25b7ebfa9c1..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf53/thingy53_application_guide.rst +++ /dev/null @@ -1,193 +0,0 @@ -.. _thingy53_app_guide: - -Application guide for Thingy:53 -############################### - -.. contents:: - :local: - :depth: 2 - -The Nordic Thingy:53 does not have a built-in J-Link debug IC. -Because of that, the Thingy:53 board enables MCUboot bootloader with serial recovery support and predefined static Partition Manager memory map by default. -You can also enable FOTA updates manually. -See the following sections for details of what is configured by default and what you can configure by yourself. - -.. _thingy53_serialports: - -Connecting to Thingy:53 -*********************** - -Applications and samples for the Nordic Thingy:53 use a serial terminal to provide logs. -By default, the serial terminal is accessible through the USB CDC ACM class handled by application firmware. -The serial port is visible right after the Thingy:53 is connected to the host using a USB cable. -The CDC ACM baudrate is ignored, and transfer goes with USB speed. - -.. _thingy53_app_update: - -Updating firmware image for Thingy:53 -************************************* - -You can program the firmware on the Nordic Thingy:53 using an external debug probe and 10-pin JTAG cable, as described in :ref:`thingy53_building_pgming`, using either :ref:`Visual Studio Code ` or :ref:`command line `. -You can also update applications running on both the network and application core using the built-in MCUboot bootloader and `nRF Connect Programmer`_ or the `nRF Programmer`_ app for Android and iOS. -You can also update the prebuilt application images that way. - -See :ref:`thingy53_gs_updating_firmware` for details about updating firmware image. - -.. _thingy53_app_update_debug: - -Firmware update using external debug probe -========================================== - -If you are using an external debug probe, such as the nRF5340 DK, or any J-Link device supporting ARM Cortex-M33, you can program the Thingy:53 the same way as nRF5340 DK. -See :ref:`ug_nrf5340` for details. - -.. _thingy53_app_update_mcuboot: - -Firmware update using MCUboot bootloader -======================================== - -Samples and applications built for Thingy:53 include the MCUboot bootloader that you can use to update the firmware out of the box. -This method uses signed binary files :file:`app_update.bin` and :file:`net_core_app_update.bin` (or :file:`dfu_application.zip`). -You can program the precompiled firmware image using one of the following ways: - -* Use the :doc:`MCUboot` feature and the built-in serial recovery mode of Thingy:53. - In this scenario, the Thingy is connected directly to your PC through USB. - For details, refer to the :ref:`thingy53_app_mcuboot_bootloader` section. - - See the :ref:`thingy53_gs_updating_usb` section in the :ref:`ug_thingy53_gs` guide for the detailed procedures on how to program the Thingy:53 using `nRF Connect Programmer`_. -* Update the firmware over-the-air (OTA) using Bluetooth LE and the nRF Programmer mobile application for Android or iOS. - To use this method, the application that is currently programmed on Thingy:53 must support it. - For details, refer to :ref:`thingy53_app_fota_smp` section. - All precompiled images support OTA using Bluetooth. - - See the :ref:`thingy53_gs_updating_ble` section in the :ref:`ug_thingy53_gs` guide for the detailed procedures on how to program a Thingy:53 using `nRF Programmer`_ for Android or iOS. - -.. _thingy53_app_partition_manager_config: - -Partition manager configuration -******************************* - -The samples and applications for Nordic Thingy:53 use the :ref:`partition_manager` by default to define memory partitions. -The memory layout must stay consistent, so that MCUboot can perform proper image updates and clean up the settings storage partition. -To ensure that the partition layout does not change between builds, the sample must use a static partition layout that is consistent between all samples in the |NCS|. -The memory partitions are defined in the :file:`pm_static_thingy53_nrf5340_cpuapp.yml` and :file:`pm_static_thingy53_nrf5340_cpuapp_ns.yml` files in the :file:`zephyr/boards/arm/thingy53_nrf5340` directory. - -The PCD SRAM partition is locked by the MCUboot bootloader to prevent the application from modifying the network core firmware. -Trying to access data on this partition results in an ARM fault. - -The MCUboot bootloader needs a flash controller overlay for the network core image update. -The overlay is applied automatically. - -.. _thingy53_app_mcuboot_bootloader: - -MCUboot bootloader -****************** - -MCUboot bootloader is enabled by default for Thingy:53 in the :file:`Kconfig.defconfig` file of the board. -This ensures that the sample includes the MCUboot bootloader and that an MCUboot-compatible image is generated when the sample is built. -When using the |NCS| to build the MCUboot bootloader for the Thingy:53, the configuration is applied automatically from the MCUboot repository. - -The MCUboot bootloader supports serial recovery and a custom command to erase the settings storage partition. -Erasing the settings partition is needed to ensure that an application is not booted with incompatible content loaded from the settings partition. - -In addition, you can set an image version, such as ``"2.3.0+0"``, using the :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` Kconfig option. - -.. _thingy53_app_usb: - -USB -*** - -The logs on the Thingy:53 board are provided by default using USB CDC ACM to allow access to them without additional hardware. - -Most of the applications and samples for Thingy:53 use only a single instance of USB CDC ACM that works as the logger's backend. -No other USB classes are used. -These samples can share a common USB product name, vendor ID, and product ID. - -If a sample supports additional USB classes or more than one instance of USB CDC ACM, it must use a dedicated product name, vendor ID, and product ID. -This sample must also enable USB composite device configuration (:kconfig:option:`CONFIG_USB_COMPOSITE_DEVICE`). - -The :kconfig:option:`CONFIG_BOARD_SERIAL_BACKEND_CDC_ACM` Kconfig option (defined in the :file:`zephyr/boards/arm/thingy53_nrf5340/Kconfig.defconfig` file) automatically sets the default values of USB product name, vendor ID and product ID of Thingy:53. -It also enables the USB device stack and initializes the USB device at boot. -The remote wakeup feature of a USB device is disabled by default as it requires extra action from the application side. -A single USB CDC ACM instance is automatically included in the default board's DTS configuration file (:file:`zephyr/boards/arm/thingy53_nrf5340/thingy53_nrf5340_common.dts`). -The USB CDC instance is used to forward application logs. - -If you do not want to use the USB CDC ACM as a backend for logging out of the box, you can disable it as follows: - -* Disable the :kconfig:option:`CONFIG_BOARD_SERIAL_BACKEND_CDC_ACM` Kconfig option. -* If USB CDC ACM is not used for anything else, you can disable it in the application's DTS overlay file: - - .. code-block:: none - - &cdc_acm_uart { - status = "disabled"; - }; - -.. _thingy53_app_antenna: - -Antenna selection -***************** - -The Nordic Thingy:53 has an RF front-end with two 2.4 GHz antennas: - -* **ANT1** is connected to the nRF5340 through the nRF21540 RF FEM and supports TX gain of up to +20 dBm. -* **ANT2** is connected to the nRF5340 through the RF switch and supports TX output power of up to +3 dBm. - -.. figure:: images/thingy53_antenna_connections.svg - :alt: Nordic Thingy:53 - Antenna connections - - Nordic Thingy:53 - Antenna connections - -The samples in the |NCS| use **ANT1** by default, with the nRF21540 gain set to +10 dBm. -You can configure the TX gain with the :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB` Kconfig option to select between +10 dBm or +20 dBm gain. -To use the **ANT2** antenna, disable the :kconfig:option:`CONFIG_MPSL_FEM` Kconfig option in the network core's child image configuration. - -.. note:: - Transmitting with TX output power above +10 dBM is not permitted in some regions. - See the `Nordic Thingy:53 Regulatory notices`_ in the `Nordic Thingy:53 Hardware`_ documentation for the applicable regulations in your region before changing the configuration. - -.. _thingy53_app_fota_smp: - -FOTA over Bluetooth Low Energy -****************************** - -.. include:: /app_dev/device_guides/nrf52/fota_update.rst - :start-after: fota_upgrades_over_ble_intro_start - :end-before: fota_upgrades_over_ble_intro_end - -Bluetooth buffers configuration introduced by the :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP` Kconfig option is also automatically applied to the network core child image by the dedicated overlay file. -Thingy:53 supports network core upgrade out of the box. - -.. include:: /app_dev/device_guides/nrf52/fota_update.rst - :start-after: fota_upgrades_over_ble_additional_information_start - :end-before: fota_upgrades_over_ble_additional_information_end - - -.. _thingy53_app_external_flash: - -External flash -************** - -During a FOTA update, there might not be enough space available in internal flash storage to store the existing application and network core images as well as the incoming images, so the incoming images must be stored in external flash storage. -The Thingy:53 board automatically configures external flash storage and QSPI driver when FOTA updates are implied with the :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU` Kconfig option. - -.. _thingy53_compatible_applications: - -Samples and applications for Thingy:53 with FOTA out of the box -*************************************************************** - -The following samples and applications in the |NCS| enable FOTA for Thingy:53 by default: - -* Applications: - - * :ref:`matter_weather_station_app` - * :ref:`nrf_machine_learning_app` - -* Samples: - - * :ref:`peripheral_lbs` - * :ref:`peripheral_uart` - * :ref:`bluetooth_mesh_light` - * :ref:`bluetooth_mesh_light_lc` - * :ref:`bluetooth_mesh_light_switch` - * :ref:`bluetooth_mesh_sensor_server` diff --git a/doc/nrf/app_dev/device_guides/nrf54h.rst b/doc/nrf/app_dev/device_guides/nrf54h.rst deleted file mode 100644 index 7149929c7d1b..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf54h.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. _ug_nrf54h: - -Working with nRF54H Series -########################## - -.. note:: - - All software for the nRF54H20 SoC is experimental, and hardware availability is restricted to the participants in the customer sampling program. - -.. |nrf_series| replace:: devices of the nRF54H Series - -.. include:: /includes/guides_complementary_to_app_dev.txt - -Zephyr and the |NCS| provide support and contain board definitions for developing on the following nRF54H Series device: - -.. list-table:: - :header-rows: 1 - - * - DK - - PCA number - - Build target - * - :ref:`zephyr:nrf54h20dk_nrf54h20` - - PCA10175 - - | ``nrf54h20dk_nrf54h20_cpuapp`` - | ``nrf54h20dk_nrf54h20_cpurad`` - | ``nrf54h20dk_nrf54h20_cpuppr`` - -.. note:: - For details on the compatibility between nRF54H20 SoC binaries and |NCS| versions, see :ref:`abi_compatibility`. - -.. toctree:: - :maxdepth: 2 - :caption: Subpages: - - working_with_nrf/nrf54h/ug_nrf54h20_gs - working_with_nrf/nrf54h/ug_nrf54h20_architecture - working_with_nrf/nrf54h/ug_nrf54h20_configuration - working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu - working_with_nrf/nrf54h/ug_nrf54h20_logging - working_with_nrf/nrf54h/ug_nrf54h20_debugging - working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/cpuapp_include_tree.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/cpuapp_include_tree.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/cpuapp_include_tree.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/cpuapp_include_tree.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/jlink788j_install.png b/doc/nrf/app_dev/device_guides/nrf54h/images/jlink788j_install.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/jlink788j_install.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/jlink788j_install.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/jlink794e_install.png b/doc/nrf/app_dev/device_guides/nrf54h/images/jlink794e_install.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/jlink794e_install.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/jlink794e_install.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_Domains.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_Domains.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_Domains.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_Domains.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_appcore.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_appcore.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_appcore.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_appcore.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_bootsequence.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_bootsequence.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_bootsequence.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_bootsequence.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_globaldomain.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_globaldomain.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_globaldomain.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_globaldomain.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_lifecycle_states.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_lifecycle_states.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_lifecycle_states.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_lifecycle_states.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_memorymap.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_memorymap.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_memorymap.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_memorymap.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_radiocore.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_radiocore.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF54H20_radiocore.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF54H20_radiocore.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF7002ek.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nRF7002ek.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nRF7002ek.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nRF7002ek.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_IPC_layers.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_IPC_layers.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_IPC_layers.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_IPC_layers.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_arm_to_vpr.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_arm_to_vpr.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_arm_to_vpr.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_arm_to_vpr.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_cpu_to_cpu.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_cpu_to_cpu.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_cpu_to_cpu.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_cpu_to_cpu.svg diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_invocation_topology.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_invocation_topology.svg new file mode 100644 index 000000000000..6dd5a4a68eae --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_invocation_topology.svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + Page-1 + + Sheet.1000 + + Nordic Blueslate.1001 + Secure Domain and SysCtl + + Secure Domain and SysCtl + + Sheet.7 + OEM-controlled SUIT manifest Dependency between manifests Nor... + + OEM-controlled SUIT manifest Dependency between manifests Nordic-controlled SUIT manifest + + Nordic Light Grey.19 + + + + Dynamic connector.25 + + + + Nordic Light Grey.1016 + + + + Nordic Light Grey.1014 + System controller + + System controller + + Nordic Light Grey.1015 + SDFW, SDFW_RECOVERY + + SDFW, SDFW_RECOVERY + + Dynamic connector.1017 + + + + Dynamic connector.33 + + + + Nordic Dark Grey + Empty invocation sequence. Manifest does not boot anything. + + Empty invocation sequence. Manifest does not boot anything. + + Dynamic connector.35 + + + + Nordic Light Grey.1010 + Nordic Top + + Nordic Top + + Nordic Sky + SecDom FW + + SecDom FW + + Dynamic connector.1000 + + + + Dynamic connector.1001 + + + + Nordic Blueslate + Radio domain + + Radio domain + + Nordic Middle Grey + Application domain + + Application domain + + Nordic Light Grey.1002 + Application Local A + + Application Local A + + Nordic Light Grey.1003 + Application Spare + + Application Spare + + Nordic Light Grey.1004 + Application Local B + + Application Local B + + Dynamic connector.1005 + + + + Dynamic connector.1006 + + + + Dynamic connector.1007 + + + + Nordic Light Grey.1008 + Radio Local B + + Radio Local B + + Dynamic connector.1009 + + + + Nordic Light Grey.36 + Radio Local A + + Radio Local A + + Dynamic connector.37 + + + + Nordic Light Grey + Root + + Root + + + diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_app.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_app.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_app.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_app.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_app.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_app.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_app.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_app.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_bbproc.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_bbproc.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_bbproc.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_bbproc.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram10.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram10.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram10.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram10.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram10.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram10.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram10.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram10.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram11.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram11.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram11.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram11.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram11.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram11.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_mram11.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_mram11.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_radio.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_radio.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_radio.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_radio.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_radio.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_radio.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_radio.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_radio.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram0x.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram0x.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram0x.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram0x.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram0x.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram0x.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram0x.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram0x.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram20.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram20.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram20.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram20.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram20.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram20.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram20.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram20.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram21.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram21.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram21.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram21.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram21.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram21.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram21.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram21.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram3x.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram3x.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram3x.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram3x.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram3x.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram3x.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_ram3x.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_ram3x.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_secure.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_secure.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_secure.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_secure.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_secure.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_secure.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memory_map_secure.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memory_map_secure.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memorymap.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memorymap.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_memorymap.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_memorymap.png diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_recovery_invocation_topology.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_recovery_invocation_topology.svg new file mode 100644 index 000000000000..d174e221e253 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_recovery_invocation_topology.svg @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + Page-1 + + Nordic Blueslate.1001 + Secure Domain and SysCtl + + Secure Domain and SysCtl + + Sheet.1013 + OEM-controlled SUIT manifest Dependency between manifests Nor... + + OEM-controlled SUIT manifest Dependency between manifests Nordic-controlled SUIT manifest + + Nordic Light Grey.19 + + + + Dynamic connector.25 + + + + Nordic Light Grey.1016 + + + + Nordic Light Grey.1014 + System controller + + System controller + + Nordic Light Grey.1015 + SDFW, SDFW_RECOVERY + + SDFW, SDFW_RECOVERY + + Dynamic connector.1017 + + + + Dynamic connector.33 + + + + Nordic Dark Grey + Empty invocation sequence. Manifest does not boot anything. + + Empty invocation sequence. Manifest does not boot anything. + + Dynamic connector.35 + + + + Nordic Light Grey.1010 + Nordic Top + + Nordic Top + + Nordic Sky + SecDom FW + + SecDom FW + + Dynamic connector.1000 + + + + Dynamic connector.1001 + + + + Nordic Blueslate + Radio domain + + Radio domain + + Nordic Middle Grey + Application domain + + Application domain + + Nordic Light Grey.9 + Radio recovery + + Radio recovery + + Nordic Light Grey.1002 + Application Local A + + Application Local A + + Nordic Light Grey.1003 + Application Spare + + Application Spare + + Nordic Light Grey.1004 + Application Local B + + Application Local B + + Dynamic connector.9 + + + + Dynamic connector.1005 + + + + Dynamic connector.1006 + + + + Dynamic connector.1007 + + + + Nordic Light Grey.1008 + Radio Local B + + Radio Local B + + Dynamic connector.1009 + + + + Nordic Light Grey.36 + Radio Local A + + Radio Local A + + Dynamic connector.37 + + + + Nordic Light Grey + Application recovery + + Application recovery + + diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_default_manifest_topology.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_default_manifest_topology.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_default_manifest_topology.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_default_manifest_topology.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_dfu_overview.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_dfu_overview.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_dfu_overview.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_dfu_overview.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_envelope_structure.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_envelope_structure.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_envelope_structure.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_envelope_structure.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_example_update_package.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_example_update_package.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_example_update_package.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_example_update_package.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_example_update_process.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_example_update_process.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_example_update_process.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_example_update_process.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_example_update_workflow.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_example_update_workflow.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_example_update_workflow.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_example_update_workflow.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_generator_workflow.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_generator_workflow.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_generator_workflow.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_generator_workflow.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_invocation_workflow.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_invocation_workflow.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_invocation_workflow.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_invocation_workflow.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_manifest_topology.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifest_topology.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_manifest_topology.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifest_topology.png diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifests.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifests.svg new file mode 100644 index 000000000000..e3c923dbf9e0 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifests.svg @@ -0,0 +1,116 @@ + + + + + + + + Page-1 + + Sheet.1005 + + Nordic Blueslate + Application domain + + Application domain + + Nordic Blue + Root + + Root + + Nordic Blue.6 + Application recovery + + Application recovery + + Nordic Blue.7 + Application Local A + + Application Local A + + Nordic Blue.8 + Application Local B + + Application Local B + + Nordic Blue.9 + Application Spare + + Application Spare + + Nordic Blueslate.12 + Radio domain + + Radio domain + + Nordic Blue.13 + Radio recovery + + Radio recovery + + Nordic Blue.14 + Radio Local A + + Radio Local A + + Nordic Blue.15 + Radio Local B + + Radio Local B + + Nordic Blueslate.17 + Secure domain and SysCtl + + Secure domain and SysCtl + + Nordic Blue.18 + Nordic Top + + Nordic Top + + Nordic Blue.19 + System Controller + + System Controller + + Nordic Blue.20 + SDFW, SDFW_RECOVERY + + SDFW, SDFW_RECOVERY + + Sheet.1004 + + Nordic Blue.1001 + OEM - controlled SUIT manifest Nordic-controlled SUIT manifest + + OEM - controlled SUIT manifest Nordic-controlled SUIT manifest + + Nordic Sky.1001 + + + + Nordic Sky.1002 + + + + + + diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifests_minimal.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifests_minimal.svg new file mode 100644 index 000000000000..0eef41b75f7c --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_manifests_minimal.svg @@ -0,0 +1,85 @@ + + + + + + + + Page-1 + + Nordic Blueslate + Application domain + + Application domain + + Nordic Blueslate.12 + Radio domain + + Radio domain + + Nordic Blueslate.17 + Secure domain and SysCtl + + Secure domain and SysCtl + + Nordic Sky + Root + + Root + + Nordic Sky.9 + Application Local A + + Application Local A + + Nordic Sky.10 + Radio Local A + + Radio Local A + + Nordic Lake + Nordic top + + Nordic top + + Nordic Lake.13 + System controller + + System controller + + Nordic Lake.14 + SDFW, SDFW_RECOVERY + + SDFW, SDFW_RECOVERY + + Nordic Blue.10 + OEM - controlled SUIT manifest Nordic-controlled SUIT manifest + + OEM - controlled SUIT manifest Nordic-controlled SUIT manifest + + Nordic Sky.1001 + + + + Nordic Sky.1002 + + + + diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_recovery_boot_path.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_recovery_boot_path.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_recovery_boot_path.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_recovery_boot_path.png diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_recovery_manifest_topology.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_recovery_manifest_topology.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_recovery_manifest_topology.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_recovery_manifest_topology.png diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_sdfw_sdrfw_update_flow.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_sdfw_sdrfw_update_flow.svg new file mode 100644 index 000000000000..9518a5fb7d1b --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_sdfw_sdrfw_update_flow.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + Page-1 + + Sheet.1018 + + Ellipse.1007 + Update Secure Domain Recovery Firmware (SDRFW) slot + + Update Secure Domain Recovery Firmware (SDRFW) slot + + Ellipse.1006 + Update successful? + + Update successful? + + Ellipse.1003 + Install new manifest + + Install new manifest + + Ellipse.1008 + Return failure + + Return failure + + Ellipse.1002 + Return success + + Return success + + Dynamic connector.15 + + + + Dynamic connector.16 + yes + + + yes + + Ellipse.1004 + Update successful? + + Update successful? + + Dynamic connector.22 + + + + Dynamic connector.23 + yes + + + yes + + Dynamic connector.24 + no + + + no + + Dynamic connector.26 + + + + Dynamic connector.1001 + no + + + no + + Sheet.1009 + + + + Dynamic connector.1010 + + + + Dynamic connector.1011 + + + + Sheet.1012 + End + + End + + Sheet.1015 + Start + + Start + + Ellipse.1005 + Update Secure Domain Firmware (SDFW) slot + + Update Secure Domain Firmware (SDFW) slot + + Sheet.1016 + + + + Dynamic connector.1017 + + + + + diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_update_workflow.png b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_update_workflow.png similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/nrf54h20_suit_update_workflow.png rename to doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_suit_update_workflow.png diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_update_topology_for_non_recovery_elements.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_update_topology_for_non_recovery_elements.svg new file mode 100644 index 000000000000..9709da657b9e --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_update_topology_for_non_recovery_elements.svg @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + Page-1 + + Sheet.1019 + + Nordic Blueslate + Radio domain + + Radio domain + + Nordic Middle Grey + Application domain + + Application domain + + Nordic Light Grey.9 + Radio Local A + + Radio Local A + + Dynamic connector + + + + Nordic Blueslate.1001 + Secure Domain and SysCtl + + Secure Domain and SysCtl + + Nordic Light Grey.1002 + Application Local A + + Application Local A + + Nordic Light Grey.1003 + Application Spare + + Application Spare + + Nordic Light Grey.1004 + Application Local B + + Application Local B + + Dynamic connector.9 + + + + Dynamic connector.1005 + + + + Dynamic connector.1006 + + + + Dynamic connector.1007 + + + + Nordic Light Grey.1008 + Radio Local B + + Radio Local B + + Dynamic connector.1009 + + + + Sheet.12 + OEM-controlled SUIT manifest Dependency between manifests Nor... + + OEM-controlled SUIT manifest Dependency between manifests Nordic-controlled SUIT manifest + + Nordic Light Grey.19 + + + + Dynamic connector.25 + + + + Nordic Light Grey.1011 + + + + Nordic Light Grey.1014 + System controller + + System controller + + Nordic Light Grey.1015 + SDFW, SDFW_RECOVERY + + SDFW, SDFW_RECOVERY + + Dynamic connector.1016 + + + + Dynamic connector.1017 + + + + Dynamic connector.1018 + + + + Nordic Light Grey.1010 + Nordic Top + + Nordic Top + + Nordic Light Grey + Root + + Root + + Nordic Lake + Application, SecDOM FW + + Application, SecDOM FW + + + diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_update_topology_for_recovery_elements.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_update_topology_for_recovery_elements.svg new file mode 100644 index 000000000000..69ed60430ad5 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/nrf54h20_update_topology_for_recovery_elements.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + Page-1 + + Sheet.1001 + + Nordic Blueslate + Radio domain + + Radio domain + + Nordic Middle Grey + Application domain + + Application domain + + Nordic Lake + Application, SecDOM FW + + Application, SecDOM FW + + Nordic Light Grey.9 + Radio recovery + + Radio recovery + + Dynamic connector.14 + + + + Nordic Light Grey + Application recovery + + Application recovery + + Dynamic connector + + + + Sheet.18 + OEM-controlled SUIT manifest Dependency between manifests + + OEM-controlled SUIT manifest Dependency between manifests + + Nordic Light Grey.19 + + + + Dynamic connector.25 + + + + + diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/suit_acme_manifests.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/suit_acme_manifests.svg new file mode 100644 index 000000000000..6ef2f86c20ed --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/suit_acme_manifests.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + Page-1 + + Nordic Lake + Light Bulb root + + Light Bulb root + + Nordic Lake.6 + Roller Shutter root + + Roller Shutter root + + Nordic Lake.7 + Light Bulb application (local) Class ID: uuid5(adme_vid, `nRF... + + Light Bulb application (local) Class ID: uuid5(adme_vid, `nRF54H20_light_bulb_app`) + + Nordic Lake.8 + Roller Shutter application (local) Class ID: uuid5(acme_vid, ... + + Roller Shutter application (local) Class ID: uuid5(acme_vid, `nRF54H20_roller_shutter_app`) + + Nordic Sky + Radio application (local) Class ID: uuid5(acme_vid, `nRF54H20... + + Radio application (local) Class ID: uuid5(acme_vid, `nRF54H20_radio`) + + Sheet.1000 + Shared + + Shared + + Dynamic connector.1002 + + + + Dynamic connector.1003 + + + + Dynamic connector.1004 + + + + Dynamic connector.1005 + + + + Dynamic connector.1006 + + + + diff --git a/doc/nrf/app_dev/device_guides/nrf54h/images/suit_manifest_properties.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/suit_manifest_properties.svg new file mode 100644 index 000000000000..e4a24517d84e --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/images/suit_manifest_properties.svg @@ -0,0 +1,85 @@ + + + + + + + + Page-1 + + Nordic Blue + Vendor ID: uuid5(uuid.NAMESPACE_DNS, `examplecorp.com`) 2bd8b... + + Vendor ID: uuid5(uuid.NAMESPACE_DNS, `examplecorp.com`) 2bd8bef4-43e6-5235-a2ec-918b7d4dd2d2 + + Nordic Blue.6 + Class ID: uuid5(Vendor_ID, `nrf54H20_light_bulb_app_A`) 4f488... + + Class ID: uuid5(Vendor_ID, `nrf54H20_light_bulb_app_A`) 4f488e49-91d4-5762-b6e9-9a15128c8e20 + + Nordic Blue.7 + Downgrade prevention policy downgrade_prevention_enabled + + Downgrade prevention policy downgrade_prevention_enabled + + Nordic Blue.8 + Independent updateability policy independent_update_denied + + Independent updateability policy independent_update_denied + + Nordic Blue.9 + Signature verification policy signature_check_enabled_on_upda... + + Signature verification policy signature_check_enabled_on_update_and_boot + + Nordic Blue.10 + Ability to operate on device resources Booting the App Core M... + + Ability to operate on device resources Booting the App Core Memory access based on App Domain UICR + + Nordic Blue.11 + Key ID range for signature verification MANIFEST_PUBKEY_APPLI... + + Key ID range for signature verification MANIFEST_PUBKEY_APPLICATION_GEN0-2 0x40022100 0x40022102 + + Nordic Light Grey.1001 + Values provisioned by the OEM in device manufacturing process... + + Values provisioned by the OEM in device manufacturing process Values which cannot be customized by the OEM + + Nordic Blueslate.1002 + + + + Nordic Blueslate.1003 + + + + diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/thread_platform_design_nRF54h20.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/thread_platform_design_nRF54h20.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/thread_platform_design_nRF54h20.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/thread_platform_design_nRF54h20.svg diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/thread_platform_design_nRF54h20_multi.svg b/doc/nrf/app_dev/device_guides/nrf54h/images/thread_platform_design_nRF54h20_multi.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/images/thread_platform_design_nRF54h20_multi.svg rename to doc/nrf/app_dev/device_guides/nrf54h/images/thread_platform_design_nRF54h20_multi.svg diff --git a/doc/nrf/app_dev/device_guides/nrf54h/index.rst b/doc/nrf/app_dev/device_guides/nrf54h/index.rst new file mode 100644 index 000000000000..81ad0771cf25 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/index.rst @@ -0,0 +1,42 @@ +.. _ug_nrf54h: + +Developing with nRF54H Series +############################# + +.. note:: + + All software for the nRF54H20 SoC is experimental, and hardware availability is restricted to the participants in the customer sampling program. + +.. |nrf_series| replace:: devices of the nRF54H Series + +.. include:: /includes/guides_complementary_to_app_dev.txt + +Zephyr and the |NCS| provide support and contain board definitions for developing on the following nRF54H Series device: + +.. list-table:: + :header-rows: 1 + + * - DK + - PCA number + - Build target + * - :ref:`zephyr:nrf54h20dk_nrf54h20` + - PCA10175 + - | ``nrf54h20dk_nrf54h20_cpuapp`` + | ``nrf54h20dk_nrf54h20_cpurad`` + | ``nrf54h20dk_nrf54h20_cpuppr`` + +.. note:: + For details on the compatibility between nRF54H20 SoC binaries and |NCS| versions, see :ref:`abi_compatibility`. + +.. toctree:: + :maxdepth: 2 + :caption: Subpages: + + ug_nrf54h20_gs + ug_nrf54h20_architecture + ug_nrf54h20_configuration + ug_nrf54h20_suit_dfu + ug_nrf54h20_logging + ug_nrf54h20_debugging + ug_nrf54h20_custom_pcb + ug_nrf54h20_flpr diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_app_samples.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_app_samples.rst similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_app_samples.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_app_samples.rst diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture.rst similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture.rst diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_boot.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_boot.rst similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_boot.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_boot.rst diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_clockman.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_clockman.rst new file mode 100644 index 000000000000..fcaeb308226b --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_clockman.rst @@ -0,0 +1,149 @@ +.. _ug_nrf54h20_architecture_clockman: + +nRF54H20 clock management +######################### + +.. contents:: + :local: + :depth: 2 + +The nRF54H20 SoC consists of multiple asynchronous clock domains and requires clock sources for correct operation. +Each of the clock sources needs proper management for the following reasons: + +* To start and stop the clock at the appropriate time. +* To select the proper clock source. +* To calibrate or synchronize the clock to a more accurate source. + +Some clock management operations are performed solely by hardware circuits, while others require software intervention. +Most clocks can be locked to more accurate ones to improve their accuracy. + + +Clock domains +************* + +The nRF54H20 SoC consists of the following clock domains: + +* Low frequency clock (LFCLK) +* High-frequency oscillator (HFXO) +* FLL16M +* Application Core HSFLL +* Radio Core HSFLL +* Secure Domain HSFLL +* Global HSFLL + +Each clock domain is enabled independently of others, and it is automatically enabled when at least one sink is active. +The firmware can choose to keep each clock domains enabled even when all its sinks are inactive. + +Clock domain sources are selected by ``clock_control`` drivers based on the clock parameter requirements reported by the software modules using the ``clock_control`` functions. +These requirements can include clock frequency, accuracy, or precision. +Some clock domains are configured by ``clock_control`` drivers using ``LRCCONF`` peripherals, while others are configured with the assistance of the System Controller Firmware. + +The application-facing APIs expose only the domain that directly clocks the component used by the application. +The management of the clocks on which this domain depends is handled internally by the associated clock driver. + +For example, a firmware module might request better timing accuracy for a fast UART instance. +In this case, the firmware module requests the accuracy from the global HSFLL device driver, which directly clocks the UART. +The dependencies, such as FLL16M and LFXO, are managed internally by the global HSFLL driver, not directly by the firmware module. + +LFCLK +===== + +The Low-Frequency Clock domain is responsible for generating a 32768 Hz clock signal for ultra-low-power peripherals like ``GRTC`` or ``RTC``. + +HFXO +==== + +The high-frequency crystal oscillator domain is responsible for clocking peripherals requiring high accuracy and MHz range frequency. +The drawback of this clock source is relatively high power consumption so it is enabled only when needed. + +Hardware capabilities +--------------------- + +The HFXO, like any other clock domain, can be connected in hardware to one of the available sources. +Additionally, it provides the clock signal to all of its sinks. + +FLL16M +====== + +The FLL16M clock domain clocks most of the peripherals in the system (*slow*, 16 MHz). +Its accuracy results in the timing accuracy of slow ``UART``, ``SPI``, ``TWI``, ``PWM``, ``SAADC``, among others. + +Local HSFLLs +============ + +Local HSFLLs are clocking CPUs in local domains, fast peripherals around them, and local RAM. + +Global HSFLL +============ + +Global HSFLL clocks *fast* peripherals, FLPR, RAM, and MRAM blocks. + +Zephyr clock control API +************************ + +Zephyr RTOS contains a ``clock_control`` device driver class for managing clocks. +The ``clock_control`` API is designed to support multiple requestors. +Moreover, the ``clock_control`` API supports blocking or asynchronous operations based on notifications when the requested clock settings are applied. + +The ``clock_control`` subsystem exposes portable parameters in its functions, which include: + +* Accuracy requests in ppm values for all the clock domains. +* Precision requests in enumerated high- and low-precision modes. +* Frequency requests (clock rate) for the Application core HSFLL (all the other clock domains have fixed frequencies). + +When multiple modules request conflicting parameters from the same clock, the system prioritizes selecting the mode with minimal power consumption that satisfies all requests. +For example, if a UART driver requests 100 ppm accuracy and a SPI driver requests 200 ppm accuracy, the system will choose a mode with 100 ppm accuracy or better, as it meets both requirements (100 ppm accuracy is better than 200 ppm) while optimizing power usage. +This policy applies to all clock parameters, including frequency and precision, following these criteria: + +* The applied precision is at least as good as requested. +* The applied frequency is at least as fast as requested. +* All parameters are optimized for power consumption. + +For more details, see the following links: + +* :ref:`zephyr:clock_control_api`. +* The following calls in the `Zephyr's nRF clock control API extensions`_ (:file:`include/zephyr/drivers/clock_control/nrf_clock_control.h`): + + * ``nrf_clock_control_request()``: Requests a reservation to use a given clock with specified attributes. + * ``nrf_clock_control_release()``: Releases a reserved use of a clock. + * ``nrf_clock_control_cancel_or_release()``: Safely cancels a reservation request. + +* The following calls in the `clocks devicetree macro API`_ (:file:`include/zephyr/devicetree/clocks.h`): + + * ``DT_CLOCKS_CTLR_BY_IDX()``: Gets the node identifier for the controller phandle from a *clocks* phandle-array property at an index. + * ``DT_CLOCKS_CTLR()``: It is equivalent to ``DT_CLOCKS_CTLR_BY_IDX()`` with index (idx) set to 0. + +Global Domain Frequency Scaling (GDFS) +====================================== + +Global Domain Frequency Scaling (GDFS) is a backend service that allows one processing core to request configuration changes to the global HSFLL clock domain via the system controller firmware. + +To use this feature, you can use the existing Zephyr clock control API without needing detailed knowledge of GDFS. +Through the clock control API, when an application invokes standard clock control functions (such as ``clock_control_request()``), the system controller firmware automatically configures the global HSFLL clock as requested, with GDFS handling the communication and adjustments internally. + +Direct interaction with GDFS +---------------------------- + +You can also use GDFS in specialized scenarios, like implementing proprietary radio protocols or optimizing low-level performance, where you might want to use GDFS directly. +For specialized applications, you have the option to work directly with the GDFS service by initializing IPC, setting up handlers, and issuing frequency requests as needed. +In such cases, developers must: + +1. Initialize the IPC backend. + + GDFS relies on Interprocessor Communication (IPC) to exchange configuration requests and responses between the application core and the System Controller firmware (SCFW). + Before invoking GDFS functions, the application must properly initialize the underlying IPC backend. + +#. Initialize GDFS and configure handlers. + + After the IPC setup, you can initialize GDFS by calling its initialization routine and providing a callback handler. + This callback receives status responses whenever the application submits a request. + If it is needed to modify the callback handler, you can uninitialize and reinitialize GDFS. + +#. Request specific frequencies. + + GDFS provides functions to request one of several supported HSFLL frequencies on the nRF54H20 SoC (specifically, 320 MHz, 256 MHz, 128 MHz, 64 MHz). + When issuing such a request, you must include a context pointer passed directly to the callback handler. + The handler then receives success or failure notifications. + +You can find the header files in the :file:`modules/hal/nordic/nrfs` directory. +Within this directory, :file:`nrf_gdfs.h` and related source files define the GDFS interface. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_cpu.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_cpu.rst similarity index 99% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_cpu.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_cpu.rst index 1c82309fa242..7b8b7de81587 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_cpu.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_cpu.rst @@ -128,6 +128,8 @@ This CPU is intended to implement software-defined peripherals. .. note:: FLPR firmware support is not available during the customer sampling. +.. _ug_nrf54h20_secure_domain: + Secure Domain ************* @@ -140,6 +142,8 @@ Since the nRF54H platform supports global resource sharing, where memory partiti The Secure Domain Firmware (SDFW) exposes security-related services to the Cores in the system located in local domains (like Application and Radio). +.. _ug_nrf54h20_sys_ctrl: + System Controller ***************** diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_ipc.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_ipc.rst similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_ipc.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_ipc.rst diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_lifecycle.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_lifecycle.rst similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_lifecycle.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_lifecycle.rst diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_memory.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_memory.rst similarity index 91% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_memory.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_memory.rst index c2e3d43ae787..15d8017dbd02 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_memory.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_memory.rst @@ -42,18 +42,22 @@ Local RAM is present in each of local domains Application core RAM -------------------- -.. image:: images/nrf54h20_memory_map_app.svg - :width: 300 px - The application core contains 32 KB of local RAM. Accessing this memory from the application core CPU has minimal latency, but accessing it from any other core adds significant latency. Because of this property, the local RAM in the application domain should be used mainly to store data frequently accessed by the application core, or to store timing-critical parts of the code executed by the application core. -Address range - 0x22000000 - 0x22008000 +.. table:: Application core RAM layout in the nRF54H20 -Size - 32 KB + +-------------+-----------+---------+----------+-----------------------------+ + |Start Address|End Address|Size (KB)|Total (KB)|Content | + +=============+===========+=========+==========+=============================+ + |config |0x22008000 |config |32 |Application's Non-Secure data| + +-------------+-----------+---------+ +-----------------------------+ + |0x22000000 |config |config | |Application's Secure data | + +-------------+-----------+---------+----------+-----------------------------+ + +.. note:: + *Config* means that you can configure the address to meet the specific needs of the application. Access control Application domain local RAM is accessible by the application core. @@ -70,16 +74,22 @@ Access control Radio core RAM -------------- -The radio core contains 96 KB of local RAM. Any access to this memory has minimal latency if originated either from radio core CPU or from peripherals with EasyDMA located in the radio core. Any access from any other core has a significant latency. Because of this property, local RAM in the radio core should be used mainly to store data frequently accessed by the radio core CPU or the radio protocol frames to be accessed by CCM or RADIO peripherals, or to store timing critical parts of the code executed by the radio core CPU. -Address range - 0x23000000 - 0x23030000 +.. table:: Radio core RAM layout in the nRF54H20 -Size - 192 KB + +-------------+-----------+---------+----------+-----------------------------+ + |Start Address|End Address|Size (KB)|Total (KB)|Content | + +=============+===========+=========+==========+=============================+ + |config |0x23030000 |config |192 |Radio's Non-Secure data | + +-------------+-----------+---------+ +-----------------------------+ + |0x23000000 |config |config | |Radio's Secure data | + +-------------+-----------+---------+----------+-----------------------------+ + +.. note:: + *Config* means that you can configure the address to meet the specific needs of the application. Access control The radio core local RAM is accessible by the radio core. @@ -291,8 +301,6 @@ Each of the cores has full control on the data layout and management in the assi There is also a Device Firmware Upgrade partition used to store firmware images used during the upgrade procedure. If code and data for the application core do not fit in MRAM_10, it can be partially or fully placed in MRAM_11. -.. to review - Address range 0x0E100000 - 0x0E200000 diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_pm.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_pm.rst similarity index 96% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_pm.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_pm.rst index 89d1f93aa9a9..211a32ee86e0 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_pm.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_pm.rst @@ -10,6 +10,11 @@ nRF54H20 Power Management The nRF54H20 SoC is a distributed system where each domain tries to achieve minimal power consumption for itself. When all CPUs are ready to fully minimize power consumption by entering the System Off hardware state, the System Controller prepares the system and triggers the entrance in this state. +To achieve optimal low power consumption, ensure that both the radio and application domains are programmed with firmware, as each domain independently sends its power and clock requirements to the System Controller. + +For reference implementations, see the :ref:`multicore_idle_test` samples. +These samples demonstrate configurations where the radio core remains idle while the application core remains active. + Power states ************ diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_reset.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_reset.rst new file mode 100644 index 000000000000..b1d24f745c6b --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_architecture_reset.rst @@ -0,0 +1,82 @@ +.. _ug_nrf54h20_architecture_reset: + +nRF54H20 reset behavior +####################### + +.. contents:: + :local: + :depth: 2 + + +All local domain resets trigger a reset of the entire SoC. + +nRF Util allows for different types of reset behavior on the various cores of the nRF54H20 SoC, based on the current lifecycle state of the device. + +Reset types in LCS EMPTY +------------------------ + +The following is the reset behavior when the LCS of the nRF54H20 SoC is in the ``EMPTY`` state: + +.. list-table:: Reset behavior based on LCS ``EMPTY`` + :header-rows: 1 + + * - Reset kind in LCS ``EMPTY`` + - Reset behavior + * - ``RESET_SYSTEM`` + - Mapped to the ``SYS_RESET_REQUEST`` bit as described in the ARM specification for the *Application Interrupt and Register Controller*. + This reset triggers a reset of the Secure Domain, which subsequently resets the entire system. + It is available only to the Secure Domain. + * - ``RESET_HARD`` + - Initiates a reset using the CTRL-AP through the On-Board Debugger (OBD). + The register used is ``RESET`` (address offset: ``0x00``). + * - ``RESET_PIN`` + - J-Link toggles the **RESET** pin using OBD. + * - ``RESET_VIA_SECDOM`` + - Not supported. + * - ``RESET_DEFAULT`` + - Selects ``RESET_HARD``. + +Reset types in LCS ROT or DEPLOYED +----------------------------------- + +The following is the reset behavior when the LCS of the nRF54H20 SoC is either in the ``ROT`` or ``DEPLOYED`` state: + +.. list-table:: Reset behavior based on LCS ``ROT`` or ``DEPLOYED`` + :header-rows: 1 + + * - Reset kind in LCS ``ROT`` or ``DEPLOYED`` + - Reset behavior + * - ``RESET_SYSTEM`` + - Not supported. + * - ``RESET_HARD`` + - Initiates a reset using the CTRL-AP through the On-Board Debugger (OBD). + The register used is **RESET** (address offset: ``0x00``). + * - ``RESET_PIN`` + - J-Link toggles the **RESET** pin using OBD. + * - ``RESET_VIA_SECDOM`` + - Uses the CTRL-AP mailbox to send a local domain reset request to the Secure Domain Firmware (SDFW). + + This command resets the entire system while keeping both the application core and the radio core in a halted state. + + You can start each core individually using the following commands: + + * To start the Application core: ``nrfutil device go --core Application`` + * To start the Network core: ``nrfutil device go --core Network`` + + This approach is particularly useful for debugging individual domains, starting from their reset handlers. + + * - ``RESET_DEFAULT`` + - Selects ``RESET_HARD``. + +Reset your device using nRF Util +================================ + +To trigger a specific reset type on your nRF54H20 SoC-based device, use the ``nrfutil device reset`` command:: + + nrfutil device reset --serial-number --reset-kind + +For a detailed list of commands for each reset type, run the following:: + + nrfutil device reset --help + +For more information on ``nrfutil device reset``, see `nRF Util documentation pages `_. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_configuration.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_configuration.rst similarity index 77% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_configuration.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_configuration.rst index f546291a7ae6..0fbfaea6750a 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_configuration.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_configuration.rst @@ -12,30 +12,28 @@ The nRF54H20 DK uses both devicetree and Kconfig for its hardware and software c You can find the basics of both devicetree and Kconfig in Zephyr in the :ref:`zephyr:application` section of the Zephyr documentation. You can also read the :ref:`app_build_system` section describing the |NCS| additions to the Zephyr configuration system. -However, the multicore nature of the nRF54H20 DK required some changes to the way devicetree files are organized. +However, the multicore nature of the nRF54H20 DK required some changes to how devicetree files are organized. DTS file scheme *************** -.. to review - .. note:: This file scheme is valid only for the nRF54H20 initial limited sampling version of |NCS|. It is subject to changes or improvements in future releases. The following is the DTS file structure implemented for all the SoCs of the 54H family: -* Arch-specific DTS files, located in the :file:`../dts/arm/nordic_nrf_next/` and :file:`dts/riscv/nordic_nrf_next folder​` directories: +* Arch-specific DTS files, located in the :file:`../dts/arm/nordic_nrf_next/` and :file:`dts/riscv/nordic_nrf_next folder` directories: - * Project-wide files (:file:`haltium_cpu.dtsi` and :file:`haltium_global_*.dtsi`)​ - * Core-specific files per product (:file:`nrf54h20_cpu*.dtsi`)​ + * Project-wide files (:file:`haltium_cpu.dtsi` and :file:`haltium_global_*.dtsi`) + * Core-specific files per product (:file:`nrf54h20_cpu*.dtsi`) -* Common directory, located in the :file:`../common/nordic_nrf_next` folder​: +* Common directory, located in the :file:`../common/nordic_nrf_next` folder: - * Arch-independent configurations​ + * Arch-independent configurations * Common platform overlays - * Common memory and peripherals overlay applicable across products​ - * Product-specific overlays applicable to all cores​ + * Common memory and peripherals overlay applicable across products + * Product-specific overlays applicable to all cores * Project-wide overlays The following is the include tree for the application core of the nRF54H20 (cpuapp): @@ -48,9 +46,7 @@ The files shown in the figure are currently hosted in the ``ic-next`` repository Customizing the DTS configuration ********************************* -.. to review - -The output files created in your application build directory are documented in :ref:`zephyr:devicetree-in-out-files`. +You can find documentation for the output files created in your application build directory in :ref:`zephyr:devicetree-in-out-files`. You can use overlay files to customize this configuration. To see and test how to use overlays for changing nodes, see the *Lesson 3* of the `nRF Connect SDK Fundamentals course`_ on the Nordic Developer Academy website. @@ -58,16 +54,14 @@ To see and test how to use overlays for changing nodes, see the *Lesson 3* of th Generated HEX files ******************* -.. to review - When building an application for the nRF54H20 DK, you are building all domain images at once. -During this process, the following :file:`zephyr.hex` images are built: +This process generates the following :file:`zephyr.hex` images: * Application core application * PPR core application * Radio core firmware -Additionally, the following user information configuration registers (UICR) contents (:file:`uicr.hex`) are generated for setup access for domains: +Additionally, the build process generates the following user information configuration registers (UICR) contents (:file:`uicr.hex`) to set up access for domains: * System Controller UICR * Application UICR @@ -77,6 +71,6 @@ Additionally, the following user information configuration registers (UICR) cont ``west flash`` uses :file:`uicr_merged.hex` files that are pre-merged HEX files combining the relevant :file:`zephyr.hex` + :file:`uicr.hex` for a domain that has UICRs. Flashing both :file:`zephyr.hex` + :file:`uicr.hex` will result in the same configuration. -All of the HEX files need to be flashed into the device. +You must flash all the HEX files into the device. For more information on building images for the nRF54H20 DK, see :ref:`ug_nrf54h20_gs`. For additional information on multi-image builds see :ref:`ug_multi_image`. diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_custom_pcb.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_custom_pcb.rst new file mode 100644 index 000000000000..625039648fab --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_custom_pcb.rst @@ -0,0 +1,200 @@ +.. _ug_nrf54h20_custom_pcb: + +Configuring your application for a custom PCB +############################################# + +.. contents:: + :local: + :depth: 2 + +This guide demonstrates how to create your custom board files for your PCB for the nRF54H20 SoC. + +Prepare your PCB +**************** + +First, you need to create your PCB for the nRF54H20 SoC. + +We highly recommend using the PCB layouts and component values provided by Nordic Semiconductor, especially for clock and power sources, considering the following limitations: + +* The DC/DC inductor must be present on the PCB, and the ``inductor-present;`` node must be configured either in the :file:`zephyr/boards/your_board/nrf54h20dk_bicr.dtsi` file or in the section where ``bicr: bicr@fff87b0`` is present in the devicetree. +* For the lowest sleep power consumption, use a 32 KHz crystal. +* The **P9** port cannot be used with internal or external pull-down resistors. +* For optimal performance, the output impedance of the **P6** and **P7** ports should match the PCB and external device pin impedance. +* Use one of the following power supply options: + + * VDDH higher than 2.05V. + * VDDH shorted to VDD at 1.8V + +Prepare the configuration files for your custom board in the |NCS| +****************************************************************** + +The nRF54H20 DK uses multiple board files for its configuration. +You can use these files as a starting point for configuring your own custom board. +When creating a :ref:`Zephyr repository application `, copy the files from :file:`sdk-zephyr/boards/nordic/nrf54h20dk` to the :file:`sdk-zephyr/boards//` file. + +You must edit the :file:`.dts` and :file:`.overlay` files for your project to match your board configuration, similarly to any new board added to the |NCS| or Zephyr. + +See the following documentation pages for more information: + +* The :ref:`zephyr:devicetree` documentation to familiarize yourself with the devicetree language and syntax. +* The :ref:`ug_nrf54h20_configuration` page for more information on how to configure your DTS files for the nRF54H20 SoC. +* The :ref:`zephyr:zephyr-repo-app` page for more information on Zephyr application types. +* The :ref:`dm_adding_code` documentation for details on the best user workflows to add your own code to the |NCS|. + +.. note:: + The configuration of board files is based on the nRF54H20 common SoC files located in :file:`sdk-zephyr/dts/common/nordic/`. + Each new |NCS| revision might change these files, breaking the compatibility with your custom board files created for previous revisions. + Ensure the compatibility of your custom board files when migrating to a new |NCS| release. + + See :ref:`zephyr:board_porting_guide` for more information. + +Configure, generate, and program BICR +************************************* + +The Board Information Configuration Registers (BICR) are non-volatile memory (NVM) registers that contain information on how the nRF54H20 SoC must interact with other board elements, including the information about the power and clock delivery to the SoC. +The power and clock control firmware uses this information to apply the proper regulator and oscillator configurations. + +.. caution:: + You must ensure that the configuration is correct. + An incorrect configuration can damage your device. + +BICR allows for the configuration of various components on your custom board, like the following: + +* Power rails +* Low-frequency oscillator +* High-frequency oscillator (HFXO) +* GPIO ports power and drive control +* Tamper switches +* Active shield channels + +You can find the details in the DTS specification for the BICR in :file:`sdk-zephyr/dts/bindings/misc/nordic,nrf-bicr.yaml` + +When not set, the registers' default value is ``0xFFFFFFFF``. + +The ``LFOSC.LFXOCAL`` register is used by the device to store the calibration of the LFXO. + +When ``LFOSC.LFXOCAL`` is ``0xFFFFFFFF`` at device boot, the firmware recalibrates the LFXO oscillator and writes the calibration data to the ``LFOSC.LFXOCAL`` register. +This is useful when making a change on the PCB (for example, when changing the crystal). +This initial calibration is only performed once. +Each subsequent start will use this initial calibration as the starting point. + +BICR configuration +================== + +The nRF54H20 DK BICR configuration can be found in the board configuration directory as :file:`sdk-zephyr/boards/nordic/nrf54h20dk/nrf54h20dk_bicr.dtsi`. +This file is used by the |NCS| build system to generate a corresponding HEX file. +You can start from this file when editing the values of the devicetree properties inside your custom board folder (:file:`boards/nordic/your_custom_board`), according to your board configuration. + +.. caution:: + A mismatch between the board and the configuration values in BICR can damage the device or set it in an unrecoverable state. + +Generate the BICR binary +======================== + +To generate the BICR binary, you must first set the Kconfig option :kconfig:option:`CONFIG_NRF_REGTOOL_GENERATE_BICR` to ``y``. +When running ``west build``, the build system then creates the relevant HEX file (:file:`bicr.hex`) at build time. +Based on the peripheral definition extracted from the nRF54H20 SVD file, the modified registers from the configuration are mapped into their relevant position in memory. + +.. note:: + If the build system cannot locate the ``bicr`` node inside your custom board's devicetree, or if you did not create a custom :file:`.dtsi` file for it, the BICR generation cannot progress, and the build system will skip it. + +You can find the generated :file:`bicr.hex` file in the :file:`build_dir/zephyr/`. +The presence of a ``bicr`` node in the application devicetree will automatically trigger a build of the BICR binary, and will place this file alongside the other binary outputs such as ``zephyr.hex`` and ``uicr.hex``. + +Program the BICR binary +======================= + +After the |NCS| build system generates the BICR binary, you must flash this binary manually. +The content of BICR should be loaded to the SoC only once and should not be erased nor modified unless the PCB layout changes. +To manually program the generated :file:`bicr.hex` file to the SoC, use nRF Util as follows:: + + nrfutil device program --options chip_erase_mode=ERASE_NONE --firmware bicr.hex --core Application --serial-number + +You only need to follow this programming process once, assuming the PCB configuration applied through the BICR is correct the first time. +However, it is also possible to reprogram the BICR while in the LCS ``RoT``. +This can be useful, for example, when adjusting the configuration as the PCB design gets refined or modified, requiring the process to be repeated. + +Validate the BICR binary +------------------------ + +After programming the BICR binary onto the device, validate whether the BICR works with your device as follows: + +1. Reset the device:: + + nrfutil device reset --reset-kind RESET_PIN --serial-number + +2. When in LCS ``EMPTY``, use ``nrfutil`` to validate the BICR status by reading the memory:: + + nrfutil device x-read --address 0x2F88FF1C --serial-number 1051164514 --core Secure + + nrfutil returns the BICR loading status using one of the following values: + + * ``0x289CFB73``: BICR applied without error. + This indicates that the power configuration of the BICR is valid and you can proceed to the next step. + * ``0xD78213DF``: BICR application was skipped. + This indicates that no BICR was programmed to the device. + Revisit the previous step to ensure the programming command was executed, and that the BICR was correctly generated. + * ``0xCE68C97C``: BICR application failed. + This indicates that there is an issue with the BICR, but in most cases this can be recovered by programming the correct BICR for your board. + * ``Error``: This indicates that the device is likely suffering from severe power issues after applying the BICR. + This state is likely unrecoverable. + +Program the nRF54H20 SoC binaries +********************************* + +After programming the BICR, the nRF54H20 SoC requires the provisioning of the nRF54H20 SoC binaries, a bundle containing the precompiled firmware for the Secure Domain and System Controller. +To program the nRF54H20 SoC binaries to the nRF54H20 DK, do the following: + +1. Download the right nRF54H20 SoC binaries version for your development kit and |NCS| version. + You can find the SoC binaries versions listed in the :ref:`abi_compatibility` page. +#. Move the :file:`ZIP` bundle to a folder of your choice. +#. |open_terminal_window_with_environment| +#. Run nRF Util to program the binaries using the following command:: + + nrfutil device x-provision-nrf54h --firmware --serial-number + +You can run the following command to confirm that the Secure Domain Firmware has loaded correctly: + + nrfutil device x-adac-lcs-change + +If issues occur during bundle programming, the system will return an ``ADAC_FAILURE`` error. + +Create or modify your application for your custom board +******************************************************* + +You can now create or modify your application for your custom board. +When doing so, consider the following: + +* When reusing the |NCS| applications and samples, you must provide board-specific overlay files when such files are needed. + For general information on configuration overlays, see :ref:`configure_application`. + + However, you must consider the following nRF54H20-specific difference: + + * The application might require board overlays for multiple cores. + In this case, ensure that these overlays are consistent with each other. + +* When creating a new application specific to your new board, DTS board files can contain all necessary configurations, and no overlay file is needed. + However, the same limitations regarding the consistency and UICR configuration apply, but should be kept on the board files level. + +* You must manually program the BICR if it has been modified. + +Update the nRF54H20 SoC binaries +******************************** + +When a new version of the nRF54H20 SoC binaries compatible with your development kit is released, you can update it as follows: + +1. Download the new version of the nRF54H20 SoC binaries for your development kit from the :ref:`abi_compatibility` page. +#. Move the :file:`ZIP` bundle to a folder of your choice and unzip it. +#. |open_terminal_window_with_environment| +#. Verify the current version of the nRF54H20 SoC binaries by running the following command:: + + nrfutil device x-sdfw-version-get --firmware-slot uslot --serial-number + + If the nRF54H20 SoC binaries version is 0.5.0 or higher, continue to the next step. +#. Run nRF Util to update the binaries using the following SUIT command:: + + nrfutil device x-suit-dfu --serial-number --firmware nordic_top.suit + +#. Run again the following command to verify the new SDFW version:: + + nrfutil device x-sdfw-version-get --firmware-slot uslot --serial-number diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_debugging.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_debugging.rst new file mode 100644 index 000000000000..d121649d9493 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_debugging.rst @@ -0,0 +1,228 @@ +.. _ug_nrf54h20_debugging: + +nRF54H20 debugging +################## + +.. contents:: + :local: + :depth: 2 + +The main recommended tool for debugging in the |NCS| for the limited sampling of the nRF54H20 DK is the `GNU Project Debugger`_ (GDB tool). + +When working from the command line, you can use west with the GDB tool. +For details, read the :ref:`Debugging with west debug ` section on the :ref:`zephyr:west-build-flash-debug` page in the Zephyr documentation. + +A useful tool for debugging the communication over Bluetooth® is the `nRF Sniffer for Bluetooth LE`_. +The nRF Sniffer allows you to look into data exchanged over-the-air between devices. + +Debug configuration +******************* + +Set the following Kconfig options to ``y`` for the images running on the cores you want to debug: + +* :kconfig:option:`CONFIG_DEBUG_OPTIMIZATIONS` - This option limits the optimizations made by the compiler to only those that do not impact debugging. +* :kconfig:option:`CONFIG_DEBUG_THREAD_INFO` - This option adds additional information to the thread object so that the debugger can discover the threads. + This will work for any debugger. + +Debug configurations +******************** + +Some applications and samples provide a specific configuration that enables additional debug functionalities. +You can select custom configurations when you are :ref:`configuring the build settings `. + +Debugging single-core applications +********************************** + +To debug single-core applications, you can use the ``west debug`` command to start a single debug session with GDB. +You can also attach the debug session to a running core using the ``west attach`` command. + +Debugging multi-core applications +********************************* + +To debug the firmware running also on cores other than the application core, you need to set up a separate debug session for each one of the cores you want to debug. +When debugging another core, the application core debug session runs in the background and you can debug both cores if needed. + +Debugging early-boot and reset issues +************************************* + +A local domain reset triggers a global reset, which resets the debugging state. +As a result, a new debugging connection is required. +To debug early boot issues, you can trigger a reset while keeping the cores in a halted state. +This approach allows time to attach the debugger. +The cores can then be started individually. + +The following example demonstrates how to debug the early boot phase on the application core: + +.. code-block:: shell + + nrfutil device reset --reset-kind RESET_VIA_SECDOM + nrfutil device go --core Network + west attach + +Using GDB as an external debugger +********************************* + +An external debugger can access the device using the Debug Access Port (DAP). +The DAP is a standard Arm® CoreSight™ serial wire debug port (SWJ-DP) that implements the serial wire debug (SWD) protocol with a two-pin serial interface. + +There are several access ports that connect to different parts of the system: + + * AHB-AP 0: application core access port ID + * AHB-AP 1: radio core access port ID + * AHB-AP 2: Secure Domain access port ID + * AHB-AP 3: Auxiliary access port ID + * CTRL-AP 4: Device level control access port ID + * APB-AP 5: CoreSight™ subsystem access port ID + +The following sections describe how to debug the nRF54H20 using GDB as the external debugger with J-link. + +Selecting the core +================== + +To debug a specific core using ``JLinkExe`` do the following: + +1. Run J-Link on the application core:: + + JLinkExe -USB -if SWD -Device Cortex-M33 + + You can use this command to run J-Link also on other Arm cores. + You can find the ``SEGGER-ID`` as follows: + + * Check the ``SEGGER ID`` printed on the label on the bottom side of the DK. + * Run the ``nrfjprog --ids`` command. + + .. note:: + |nrfjprog_deprecation_note| + + If you connect just one DK to the machine, defining ``SEGGER-ID`` is not necessary. + + If you connect multiple DKs to the machine and have not defined ``SEGGER-ID``, a pop-up window appears where you can manually select the ID of the DK to run J-Link on. + + .. note:: + PPR core debugging is not functional in the initial limited sampling. + +#. Connect to the application core:: + + exec CORESIGHT_SetIndexAHBAPToUse = + connect + + ```` is the ID of the access port. + +J-Link script files +=================== + +You can also create J-Link script files in your local directory and add them to a GDB server call for a remote debugging session. + +1. Create a script file with the following content:: + + void ConfigTargetSettings(void) { + J-Link_CORESIGHT_AddAP(, CORESIGHT_AHB_AP); + CORESIGHT_IndexAHBAPToUse = ; + } + +2. Add the script file to the GDB server call:: + + -scriptfile [*full_path/to/script_file_name*] + +Debug logging +************* + +You can use the logging system to get more information about the state of your application. +Various modules and subsystems in the |NCS| and Zephyr integrate logs. +These logs are visible once you configure the logger for your application. + +You can also configure log level per logger module to, for example, get more information about a given subsystem. +See :ref:`ug_nrf54h20_logging` for details on how to enable and configure logs on the nRF54H20 DK. + +Debugging stack overflows +************************* + +One of the potential root causes of fatal errors in an application are stack overflows. +Read the Stack Overflows section on the :ref:`zephyr:fatal` page in the Zephyr documentation to learn about stack overflows and how to debug them. + +You can also use a separate module, such as Zephyr's :ref:`zephyr:thread_analyzer`, to make sure that the stack sizes used by your application are big enough to avoid stack overflows. + +Debugging errors reported by SDFW +********************************* + +The Secure Domain Firmware (SDFW) report errors through the ``CTRL-AP.BOOTSTATUS`` register. +You can read this value using the ``nrfutil device x-boot-status-get`` command: + +.. parsed-literal:: + :class: highlight + + nrfutil device x-boot-status-get --help + +SDFW errors +=========== + +A value of ``0`` indicates *no error*, while any other value signifies that an error has occurred. + +.. note:: + ``0`` is the reset value of this register. + Therefore, a device experiencing erratic behavior might still report ``0`` incorrectly. + For example, this may occur if the device is in a boot loop. + +Several components report errors through this register. +The first 4 bits of the first byte must be 0. +These bits are reserved for future use. +The second 4 bits of the ``BOOTSTATUS`` indicate which component reports an error: + + * System Controller ROM -> ``0x01`` + * Secure Domain ROM -> ``0x02`` + * System Controller Firmware -> ``0x0A`` + * Secure Domain Firmware -> ``0x0B`` + +.. note:: + Each one of these values has a different handling of the remaining bits. + This chapter only describes the semantics for Secure Domain Firmware errors (``0x0B******``). + +The second byte describes the boot step within the SDFW booting process that reported the failure. +For more information, see `SDFW Boot Steps`_ +The last two bytes contain the lower 16 bits of the error code. + +For example, ``0x0BA1FF62`` indicates that the SDFW reported an error in the BICR validate step (``0xA1``) with error message ``0xFF62``, or ``-158``. + +SDFW boot steps +--------------- + +The following are the boot steps definitions: + +.. parsed-literal:: + :class: highlight + + #define BOOTSTATUS_STEP_START_GRTC 0x06 + #define BOOTSTATUS_STEP_SDFW_UPDATE 0x30 + #define BOOTSTATUS_STEP_BELLBOARD_CONFIG 0x4F + #define BOOTSTATUS_STEP_SUIT_INIT 0x6F + #define BOOTSTATUS_STEP_DOMAIN_ALLOCATE 0x8F + #define BOOTSTATUS_STEP_MEMORY_FINALIZE 0x91 + #define BOOTSTATUS_STEP_TRACEHOST_INIT 0x93 + #define BOOTSTATUS_STEP_CURRENT_LIMITED 0xA0 + #define BOOTSTATUS_STEP_BICR_VALIDATE 0xA1 + #define BOOTSTATUS_STEP_DOMAIN_BOOT 0xAF + #define BOOTSTATUS_STEP_ADAC 0xC0 + #define BOOTSTATUS_STEP_SERVICES 0xCF + +Errors do not accumulate. +When multiple boot steps fail, the system reports only one error. +The SDFW chooses which error to report if multiple errors occur. +The types of errors that can overwrite other errors are the following: + + * An update of SDFW has failed. + * The SDFW is unable to initialize the ADAC over CTRL-AP communication. + +The following is a short description of the failures related to the boot steps: + + * ``BOOTSTATUS_STEP_START_GRTC`` - SDFW was unable to initialize the driver used for the GRTC. + * ``BOOTSTATUS_STEP_SDFW_UPDATE`` - Before the last reset, the SDROM received instructions to install an update and indicates that an error occurred during the process. + * ``BOOTSTATUS_STEP_BELLBOARD_CONFIG`` - SDFW was unable to apply the static bellboard configuration. + * ``BOOTSTATUS_STEP_SUIT_INIT`` - A SUIT related error occurred. + * ``BOOTSTATUS_STEP_DOMAIN_ALLOCATE`` - An error occurred while allocating global resources. + * ``BOOTSTATUS_STEP_MEMORY_FINALIZE`` - SDFW was unable to apply the required memory protection configuration. + * ``BOOTSTATUS_STEP_TRACEHOST_INIT`` - An error occurred when initializing the trace host. + * ``BOOTSTATUS_STEP_CURRENT_LIMITED`` - System Controller ROM booted the system in current limited mode due to an issue in the BICR. + * ``BOOTSTATUS_STEP_BICR_VALIDATE`` - SDFW discovered an invalid BICR. Note that not seeing this issue does not imply that there are no issues in the BICR. + * ``BOOTSTATUS_STEP_DOMAIN_BOOT`` - An error occurred while booting the local domains. + * ``BOOTSTATUS_STEP_ADAC`` - An error occurred while initializing the ADAC transport. + * ``BOOTSTATUS_STEP_SERVICES`` - An error occurred while initializing the SSF server. diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_flpr.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_flpr.rst new file mode 100644 index 000000000000..a0e198cd8d4b --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_flpr.rst @@ -0,0 +1,190 @@ +.. _ug_nrf54h20_flpr: + +Working with the FLPR core +########################## + +.. contents:: + :local: + :depth: 2 + +.. note:: + The FLPR core support in the |NCS| is currently :ref:`experimental`. + +The nRF54H20 SoC includes a dedicated VPR CPU, based on RISC-V architecture, known as the *fast lightweight peripheral processor* (FLPR). +The FLPR core can be used to manage specific peripherals through the appropriate Zephyr Device Driver API. +These peripherals have IRQs routed to FLPR: + +* USBHS +* EXMIF +* I3C120 +* CAN120 +* I3C121 +* TIMER120 +* TIMER121 +* PWM120 +* SPIS120 +* SPIM120/UARTE120 +* SPIM121 + +All other peripherals available to the application core can also be used with FLPR. +However, they require the use of *polling mode*. + +.. _vpr_flpr_nrf54h20_initiating: + +Using Zephyr multithreaded mode on FLPR +*************************************** + +The FLPR core can operate as a general-purpose core, running under the full Zephyr kernel. +Building the FLPR target is similar to building the application core, but the application core build must include an overlay that enables the FLPR core. + +Bootstrapping the FLPR core +=========================== + +The |NCS| provides a FLPR snippet that adds the overlay needed for bootstrapping the FLPR core. +The primary purpose of this snippet is to enable the transfer of the FLPR code to the designated memory region (if required) and initiate the FLPR core. + +When building for the ``nrf54h20dk/nrf54h20/cpuflpr`` target, a minimal sample is automatically loaded onto the application core. +For more details, see :ref:`building_nrf54h_app_flpr_core`. + +Memory allocation +***************** + +Running the FLPR CPU can lead to increased latency when accessing ``RAM_21``. +To mitigate this, you should use ``RAM_21`` exclusively for FLPR code, FLPR data, and non-time-sensitive information from the application CPU. +For data that requires strict access times, such as CPU data used in low-latency ISRs, you should use local RAM or, when greater latency is acceptable, ``RAM_0x``. +The DMA buffers should be placed in memory designed to a given peripheral. + +.. _building_nrf54h: + +Building and programming with the nRF54H20 DK +********************************************* + +.. note:: + The FLPR core support in the |NCS| is currently :ref:`experimental`. + +Depending on the sample, you may need to program only the application core or both the FLPR and application cores. +Additionally, the process will vary depending on whether you are working with a single-image or multi-image build. + +.. note:: + The following instructions do not cover the scenario of multi-image single-core builds. + +Building for the application core only +====================================== + +Building for the application core follows the default building process for the |NCS|. +For detailed instructions, refer to the :ref:`building` page. + +.. _building_nrf54h_app_flpr_core: + +Building for both the application and FLPR core +=============================================== + +Building for both the application core and the FLPR core differs from the default |NCS| procedure. +Additional configuration is required to enable the FLPR core. + +This section explains how to build and program both cores, covering separate builds and sysbuild configurations. +The FLPR core supports two variants: + +* ``nrf54h20dk/nrf54h20/cpuflpr``: FLPR runs from RAM_21 (recommended method). + The application core image must include the ``nordic-flpr`` :ref:`snippet `. + +* ``nrf54h20dk/nrf54h20/cpuflpr/xip``: FLPR runs from MRAM. + The application core image must include the ``nordic-flpr-xip`` snippet. + +Standard build +-------------- + +This subsection explains how to build an application using :ref:`sysbuild `. + +.. note:: + Currently, the documentation does not provide specific instructions for building an application image using sysbuild to incorporate the FLPR core as a sub-image. + The only documented scenario involves building the FLPR as the main image and the application as a sub-image. + +Follow these steps to complete the build: + +.. tabs:: + + .. group-tab:: Using minimal sample for VPR bootstrapping + + This option automatically programs the FLPR core with :ref:`dedicated bootstrapping firmware `. + + To build and flash both images, run the following command to perform a :ref:`pristine build `: + + .. code-block:: console + + west build -p -b nrf54h20dk/nrf54h20/cpuflpr + west flash + + .. group-tab:: Using an application that supports multi-image builds + + If your application involves creating custom images for both the application core and the FLPR core, disable the VPR bootstrapping sample by setting the ``SB_CONFIG_VPR_LAUNCHER`` option to ``n`` when building for the FLPR target. + For more details, see :ref:`how to configure Kconfig `. + + To build and flash both images, run the following command to perform a :ref:`pristine build `: + + .. code-block:: console + + west build -p -b nrf54h20dk/nrf54h20/cpuflpr -- -DSB_CONFIG_VPR_LAUNCHER=n + west flash + +Separate images +--------------- + +You can build and program the application sample and the FLPR sample as separate images using either the |nRFVSC| or the command line. +To use nRF Util, see `nRF Util`_. +Depending on the method you select, complete the following steps: + +.. tabs:: + + .. group-tab:: nRF Connect for VS Code + + .. note:: + + The |nRFVSC| currently offers experimental support for the nrf54h20's FLPR core. + Certain features, particularly debugging, may not function as expected. + + .. include:: /includes/vsc_build_and_run.txt + + 3. Build the application image by configuring the following options: + + * Set the Board target to ``nrf54h20dk/nrf54h20/cpuapp``. + * Select either the ``nordic-flpr`` or ``nordic-flpr-xip`` snippet, depending on the FLPR image target. + * Set System build to :guilabel:`No sysbuild`. + + For more information, see :ref:`cmake_options`. + + #. Build the FLPR image by configuring the following options: + + * Set the Board target to ``nrf54h20dk/nrf54h20/cpuflpr`` (recommended) or ``nrf54h20dk/nrf54h20/cpuflpr/xip``. + * Set System build to :guilabel:`No sysbuild`. + + For more information, see :ref:`cmake_options`. + + .. group-tab:: Command Line + + 1. |open_terminal_window_with_environment| + #. Build the application core image, and based on your build target, include the appropriate snippet: + + .. code-block:: console + + west build -p -b nrf54h20dk/nrf54h20/cpuapp -S nordic-flpr --no-sysbuild + + #. Program the application core image by running the `west flash` command :ref:`without --erase `. + + .. code-block:: console + + west flash + + #. Build the FLPR core image: + + .. code-block:: console + + west build -p -b nrf54h20dk/nrf54h20/cpuflpr --no-sysbuild + + You can customize the command for additional options by adding :ref:`build parameters `. + + #. Once the FLPR core image is successfully built, program it by running the `west flash` command :ref:`without --erase `. + + .. code-block:: console + + west flash diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_gs.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_gs.rst new file mode 100644 index 000000000000..995c98603ece --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_gs.rst @@ -0,0 +1,307 @@ +.. _ug_nrf54h20_gs: + +Getting started with the nRF54H20 DK +#################################### + +.. contents:: + :local: + :depth: 2 + +This document gets you started with your nRF54H20 Development Kit (DK) using the |NCS|. +It tells you how to install the :zephyr:code-sample:`sysbuild_hello_world` sample and perform a quick test of your DK. + +.. _ug_nrf54h20_gs_requirements: + +Minimum requirements +******************** + +Make sure you have all the required hardware and that your computer has one of the supported operating systems. + +Hardware +======== + +* nRF54H20 DK version PCA10175 Engineering C - v0.9.0 and later revisions + + Check the version number on your DK's sticker to verify its compatibility with the |NCS|. + +.. note:: + |54H_engb_2_8| + +* USB-C cable. + +Software +======== + +On your computer, one of the following operating systems: + +.. include:: ../../../../nrf/installation/recommended_versions.rst + :start-after: os_table_start + :end-before: os_table_end + +See :ref:`supported_OS` for more information. + +|supported OS| + +You also need the following: + +* `Git`_ or `Git for Windows`_ (on Linux and Mac, or Windows, respectively) +* `curl`_ +* SEGGER J-Link |jlink_ver| and, on Windows, also the SEGGER USB Driver for J-Link from `SEGGER J-Link`_ |jlink_ver|. + For information on how to install the USB Driver, see the `nRF Util prerequisites`_ documentation. +* The latest version of |VSC| for your operating system from the `Visual Studio Code download page`_ +* In |VSC|, the latest version of the `nRF Connect for VS Code Extension Pack`_ +* On Linux, the `nrf-udev`_ module with udev rules required to access USB ports on Nordic Semiconductor devices and program the firmware + +.. _ug_nrf54h20_gs_installing_software: + +Installing the required software +******************************** + +To work with the nRF54H20 DK, follow the instructions in the next sections to install the required tools. + +.. _ug_nrf54h20_install_toolchain: + +Installing the |NCS| and its toolchain +====================================== + +You can install the |NCS| and its toolchain by using Toolchain Manager. + +Toolchain Manager is a tool available from `nRF Connect for Desktop`_, a cross-platform tool that provides different applications that simplify installing the |NCS|. +Both the tool and the application are available for Windows, Linux, and MacOS. + +To install the toolchain and the SDK using the Toolchain Manager app, complete the following steps: + +1. Install Toolchain Manager: + + a. `Download nRF Connect for Desktop`_ for your operating system. + #. Install and run the tool on your machine. + #. In the :guilabel:`Apps` section, click :guilabel:`Install` next to Toolchain Manager. + + The app installs on your machine, and the :guilabel:`Install` button changes to :guilabel:`Open`. + +#. Install the |NCS| source code: + + a. Open Toolchain Manager in nRF Connect for Desktop. + + .. figure:: ../../../../nrf/installation/images/gs-assistant_tm.png + :alt: The Toolchain Manager window + + The Toolchain Manager window + + #. Click :guilabel:`SETTINGS` in the navigation bar to specify where you want to install the |NCS|. + #. In :guilabel:`SDK ENVIRONMENTS`, click the :guilabel:`Install` button next to the |NCS| version |release|. + + The |NCS| version |release| installs on your machine. + The :guilabel:`Install` button changes to :guilabel:`Open VS Code`. + +#. Set up the preferred building method: + + .. tabs:: + + .. tab:: nRF Connect for Visual Studio Code + + To build on the |nRFVSC|, complete the following steps: + + a. In Toolchain Manager, click the :guilabel:`Open VS Code` button. + + A notification appears with a list of missing extensions that you need to install, including those from the `nRF Connect for Visual Studio Code`_ extension pack. + #. Click **Install missing extensions**, then close VS Code. + #. Once the extensions are installed, click **Open VS Code** button again. + + You can then follow the instructions in :ref:`creating_vsc`. + + .. tab:: Command line + + To build on the command line, complete the following steps: + + 1. Restart the Toolchain Manager application. + #. Click the dropdown menu for the installed nRF Connect SDK version. + + .. figure:: ../../../../nrf/installation/images/gs-assistant_tm_dropdown.png + :alt: The Toolchain Manager dropdown menu for the installed nRF Connect SDK version, cropped + + The Toolchain Manager dropdown menu options + + #. Select :guilabel:`Open command prompt`. + + You can then follow the instructions in :ref:`creating_cmd`. + +Installing a terminal application +================================= + +Install a terminal emulator, such as the `Serial Terminal app`_ (from the nRF Connect for Desktop application) or the nRF Terminal (part of the `nRF Connect for Visual Studio Code`_ extension). +Both of these terminal emulators start the required :ref:`toolchain environment `. + +Installing nRF Util and its commands +==================================== + +Using the nRF54H20 DK with the |NCS| version |release| requires the following: + +* nRF Util v7.13.0 or higher +* nRF Util ``device`` command v2.7.10 +* nRF Util ``trace`` command v3.1.0 +* nRF Util ``suit`` command v0.9.0 + +If you have not already installed nRF Util as part of :ref:`nRF Connect SDK prerequisites `, complete the following steps to install it: + +1. Complete the steps listed on the `Installing nRF Util`_ page to install nRF Util. + Follow the default installation procedure from the web repository. +#. Verify the version of the nRF Util installation on your machine: + + a. Run the following command: + + .. code-block:: + + nrfutil --version + + b. If your version is below v7.13.0, run the following command to update the core module: + + .. code-block:: + + nrfutil self-upgrade + + For more information, consult the `Upgrading nRF Util core module`_ documentation. + +#. Install the required versions of nRF Util commands, as listed above, using the command from `Installing specific versions of nRF Util commands`_. + For example, the following command installs the nRF Util ``device`` command version 2.7.10: + + .. code-block:: + + nrfutil install device=2.7.10 --force + +.. _ug_nrf54h20_gs_bringup: + +nRF54H20 DK bring-up +******************** + +The following sections describe the steps required for the nRF54H20 bring-up. + +.. rst-class:: numbered-step + +Programming the BICR +==================== + +The Board Information Configuration Registers (BICR) are non-volatile memory (NVM) registers that contain information on how the nRF54H20 SoC must interact with other board elements, including information about power and clock delivery to the SoC. +To prepare the nRF54H20 DK for first use, you must manually program the values of the BICR using a precompiled BICR binary file (:file:`bicr.hex`). + +1. Download the `BICR new binary file`_. +#. Connect the nRF54H20 DK to your computer using the **DEBUGGER** port on the DK. + + .. note:: + On MacOS, when connecting the DK, you might see a popup with the message ``Disk Not Ejected Properly`` appearing multiple times. + +#. List all the connected development kits to see their serial number (matching the one on the DK's sticker):: + + nrfutil device list + +#. Move the BICR HEX file to a folder of your choice, then program the BICR by running nRF Util from that folder using the following command:: + + nrfutil device program --options chip_erase_mode=ERASE_NONE --firmware bicr.hex --core Application --serial-number + +.. rst-class:: numbered-step + +.. _ug_nrf54h20_SoC_binaries: + +Programming the nRF54H20 SoC binaries +===================================== + +After programming the BICR, program the nRF54H20 SoC with the :ref:`nRF54H20 SoC binaries `. +This bundle contains the precompiled firmware for the :ref:`Secure Domain ` and :ref:`System Controller `. +To program the nRF54H20 SoC binaries to the nRF54H20 DK, do the following: + +1. Download the `nRF54H20 SoC Binaries v0.8.0`_, compatible with the nRF54H20 DK v0.9.0 and later revisions. + + .. note:: + On MacOS, ensure that the ZIP file is not unpacked automatically upon download. + +#. Move the :file:`.zip` bundle to a folder of your choice, then run nRF Util to program the binaries using the following command:: + + nrfutil device x-provision-nrf54h --firmware --serial-number + +.. rst-class:: numbered-step + +Transitioning the nRF54H20 SoC to RoT +===================================== + +The current nRF54H20 DK comes with its lifecycle state (LCS) set to ``EMPTY``. +To operate correctly, you must transition its lifecycle state to Root of Trust (``RoT``). + +.. note:: + The forward transition to LCS ``RoT`` is permanent. + After the transition, it is impossible to transition backward to LCS ``EMPTY``. + +To transition the LCS to ``RoT``, do the following: + +1. Set the LCS of the nRF54H20 SoC to Root of Trust using the following command:: + + nrfutil device x-adac-lcs-change --life-cycle rot --serial-number + +#. After the LCS transition, reset the device:: + + nrfutil device reset --reset-kind RESET_PIN --serial-number + +.. _ug_nrf54h20_gs_sample: + +Building and programming the sample +*********************************** + +The :zephyr:code-sample:`sysbuild_hello_world` sample is a multicore sample running on both the application core (``cpuapp``) and the Peripheral Processor (PPR, ``cpuppr``). +It uses the ``nrf54h20dk/nrf54h20/cpuapp`` board target. + +To build and program the sample to the nRF54H20 DK, complete the following steps: + +1. Connect the nRF54H20 DK to your computer using the **DEBUGGER** port on the DK. +#. Open nRF Connect for Desktop, navigate to the Toolchain Manager, select the version |release| toolchain, and click the :guilabel:`Open terminal` button. +#. In the terminal window, navigate to the :file:`zephyr/samples/sysbuild/hello_world` folder containing the sample. +#. Run the following command to build the sample for application and radio cores:: + + west build -p -b nrf54h20dk/nrf54h20/cpuapp -T sample.sysbuild.hello_world.nrf54h20dk_cpuapp_cpurad . + +You can now program the sample. +If you have multiple Nordic Semiconductor devices, ensure that only the nRF54H20 DK you want to program remains connected. + +.. code-block:: console + + west flash + +This command builds and programs the sample automatically on both the application core and the Peripheral Processor (PPR) of the nRF54H20 SoC. + +.. include:: /includes/nRF54H20_erase_UICR.txt + +.. _ug_nrf54h20_sample_reading_logs: + +Reading the logs +**************** + +With the :zephyr:code-sample:`sysbuild_hello_world` sample programmed, the nRF54H20 DK outputs logs for the application core and the configured remote processor. +The logs are output over UART. + +To read the logs from the :zephyr:code-sample:`sysbuild_hello_world` sample programmed to the nRF54H20 DK, complete the following steps: + +1. Connect to the DK with a terminal emulator (for example, the `Serial Terminal app`_) using the :ref:`default serial port connection settings `. +#. Press the **Reset** button on the PCB to reset the DK. +#. Observe the console output for the application core: + + .. code-block:: console + + *** Booting nRF Connect SDK zephyr-v3.5.0-3517-g9458a1aaf744 *** + Hello world from nrf54h20dk/nrf54h20/cpuapp + +.. note:: + If no output appears when using nRF Serial Terminal, select a different serial port in the terminal application. + +For more information on how logging works in the |NCS|, consult the :ref:`ug_logging` and :ref:`zephyr:logging_api` documentation pages. + +Next steps +********** + +You are now all set to use the nRF54H20 DK. +See the following links for where to go next: + +* :ref:`ug_nrf54h20_architecture` for information about the multicore System on Chip. + This includes descriptions of core responsibilities, their interprocessor interactions, memory mapping, and the boot sequence. +* The :ref:`introductory documentation ` for more information on the |NCS| and the development environment. +* :ref:`configuration_and_build` documentation to learn more about the |NCS| development environment. +* :ref:`ug_nrf54h` documentation for more advanced topics related to the nRF54H20. + +If you want to go through an online training course to familiarize yourself with Bluetooth® Low Energy and the development of Bluetooth LE applications, enroll in the `Bluetooth LE Fundamentals course`_ in the `Nordic Developer Academy`_. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_logging.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_logging.rst similarity index 81% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_logging.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_logging.rst index 396ef08ce982..8ade9ba1afef 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_logging.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_logging.rst @@ -17,6 +17,8 @@ To read logs on the nRF54H20 DK, you can use the following methods: For general information on how logging works in the |NCS|, consult the :ref:`ug_logging` and :ref:`zephyr:logging_api` documentation pages. + + nRF54H20 logging using a direct UART connection *********************************************** @@ -25,28 +27,32 @@ Similarly to other SoCs from Nordic Semiconductor, to use a UART connection for nRF54H20 logging using System Trace Macrocell (STM) *************************************************** -nRF54H20 domains contain ARM Coresight System Trace Macrocell (STM) hardware devices for collecting trace data from multiple domains, using either standalone logging or assisted multicore logging. -The STM uses memory-mapped registers to write trace data generated by the domains in the system. -It multiplexes the data as trace protocol data, formatted according to the MIPI System Trace Protocol (STP) v2, and synchronizes the data on a single output, such as a single UART. +nRF54H20 domains include ARM Coresight System Trace Macrocell (STM) hardware, which collects trace data from multiple domains using standalone or assisted multicore logging. +The STM writes trace data generated by the domains using memory-mapped registers. +The STM multiplexes trace protocol data, formatted according to the MIPI System Trace Protocol (STP) v2, and sends it to a single output, like a UART. This approach has a minimal cost on performance and code size, allowing for a non-intrusive collection of system debug-and-trace information. The STM implements a frontend of the Zephyr logging subsystem, allowing you to use the standard Zephyr logging API. For more information on STM, see :ref:`zephyr:logging_cs_stm`. +.. note:: + The STM logging feature for the nRF54H20 SoC underwent testing with the J-Trace PRO V2 Cortex-M, using firmware compiled on ``Mar 28 2024 15:14:04``. + Using this feature also requires ``nrfutil-trace`` version 2.10.0 or later. + Embedded Trace Router (ETR) =========================== The Embedded Trace Router (ETR) is a hardware feature that provides a circular buffer in RAM for trace data. For more information on ETR, see :ref:`zephyr:logging_cs_stm`. -When using ETR on the nRF54H20 SoC, one of the cores is designated as a *proxy* to manage the trace data. +When using ETR on the nRF54H20 SoC, one of the cores acts as a *proxy* to manage the trace data. .. note:: - Currently, the Application core is the only core that can be designated as proxy. + Currently, only the Application core can act as a proxy. The proxy core is responsible for handling the data from the ETR and outputting it through the desired transport mechanism (like UART or USB). The proxy core approach allows for on-chip data processing, offering more flexibility than the Trace Port Interface Unit (TPIU). -However, due to the limited size of the ETR buffer, there is a risk of data loss if not handled promptly. +However, the limited size of the ETR buffer poses a risk of data loss if not handled appropriately. Standalone logging ================== @@ -82,7 +88,7 @@ To read the STM log output on the UART, consult the following documentation page * If you want to use PuTTY, see :ref:`putty`. .. note:: - To use UART in your application, the UART's node must be described in devicetree. + To use UART in your application, define the UART node in the devicetree. For more details, see :ref:`zephyr:devicetree-intro`. The following is an example log output:: @@ -119,7 +125,8 @@ The following are the prefixes used to indicate the cores: Assisted multicore logging ========================== -Assisted multicore logging uses dictionary-based logging to send messages without redundant strings to STM, and is based on the :ref:`zephyr:logging_guide_dictionary` feature of the logging API provided by Zephyr. +Assisted multicore logging uses dictionary-based logging to send messages without redundant strings to STM. +It is based on the :ref:`zephyr:logging_guide_dictionary` feature of the Zephyr logging API. For more information on assisted multicore logging, see :ref:`zephyr:logging_cs_stm`. Configuring logging @@ -133,8 +140,8 @@ For example, the following command uses the snippet when building for the applic All cores must use the same logging configuration. -After building your application, a dictionary database file named :file:`log_database.json` will be generated in the build directories for each one of the cores the snippet was used on (:file:`build//zephyr/`, where ```` is the name of the application built for each specific core). -This file is crucial for decoding the logs and is updated with every build. +After building your application, the build directories for each core (:file:`build//zephyr/`, where ```` is the application name for each core) will contain a dictionary database file named :file:`log_database.json`. +This file is crucial for decoding the logs and updates with every build. Reading the logs ---------------- @@ -143,7 +150,7 @@ To read the dictionary-based STM log output, do the following: 1. Set up the log capture. - Use the ``nrfutil trace stm`` command to start capturing logs from the device, specifying the database configuration for each domain ID, as well as the serial port, the baud rate, and the output type:: + Use the ``nrfutil trace stm`` command to start capturing logs from the device, specifying the database configuration for each domain ID, along with the serial port, baud rate, and output type:: nrfutil trace stm --database-config :build//zephyr/log_dictionary.json --input-serialport --baudrate 115200 --stdout ascii @@ -154,13 +161,13 @@ To read the dictionary-based STM log output, do the following: When using several domains, use a comma (`,`) to separate each domain in the list. * ```` is the application name. * ```` is the serial port used for output. - Use ``nrfutil device list`` to list which serial ports are exposed by the development kit. + Use ``nrfutil device list`` to identify the serial ports exposed by the development kit. * The output can be either the console (``--stdout ascii``) or a file (the :file:`out.txt` file if ``--output-ascii out.txt``). #. Capture and decode the logs. nrfutil will capture the log data from the specified UART port and use the provided dictionary databases to decode the logs into a human-readable format. - The decoded logs are sent to the previously-defined output (either the console or the :file:`out.txt` file in the previous example). + The tool sends the decoded logs to the specified output (either the console or the :file:`out.txt` file in the example). #. Read the terminal or open the output file to review the decoded log messages. @@ -193,5 +200,5 @@ When using assisted multicore logging, consider the following: * Use optimized log macros (having up to 2 word size numeric arguments, like ``LOG_INF("%d %c", (int)x, (char)y)``) to improve the size and speed of logging. * For memory constrained applications (for example, when running on the PPR or FLPR cores), disable the ``printk()`` function by setting both the :kconfig:option:`CONFIG_PRINTK` and :kconfig:option:`CONFIG_BOOT_BANNER` Kconfig options to ``n`` in your project configuration. -* When working with multiple domains, such as the Secure Domain and Application core, ensure that each database is prefixed with the correct domain ID. -* Some log messages might be dropped due to the limited size of the RAM buffer that stores STM logs. +* When working with multiple domains, such as the Secure Domain and Application core, ensure that each database has the correct domain ID prefix. +* The limited size of the RAM buffer storing STM logs may cause some log messages to drop. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_nrf7002ek.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_nrf7002ek.rst similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_nrf7002ek.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_nrf7002ek.rst diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_components.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_components.rst similarity index 99% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_components.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_components.rst index 720250b07c0a..d9f5eebac1d6 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_components.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_components.rst @@ -12,6 +12,8 @@ Using and modifying the component types allows for operational, fine-tuned custo See the :ref:`component_ID` section for more information. +.. _suit_component_types: + Component types *************** diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_dfu.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_dfu.rst similarity index 88% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_dfu.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_dfu.rst index 6dad99270453..d50a6a920da9 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_dfu.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_dfu.rst @@ -7,7 +7,7 @@ How to customize the SUIT DFU process :local: :depth: 2 -Nordic Semiconductor provides a Software Update Internet of Things (SUIT) sample (:ref:`ug_nrf54h20_suit_intro`) which uses predefined configurations in the build system. +Nordic Semiconductor provides a :ref:`Software Update for Internet of Things (SUIT) sample ` which uses predefined configurations in the build system. The specified Kconfig options in the sample can be used to customize the DFU process and integrate the DFU solution with external build systems. This guide provides a comprehensive set of instructions for modifying values in the :ref:`SUIT manifest `. @@ -61,7 +61,7 @@ Build system configuration ************************** By default the build system generates SUIT envelopes using predefined manifest templates provided by Nordic Semiconductor. -These templates can be found in :file:`modules/lib/suit-generator/ncs`, and are suitable for standard development needs. +These templates can be found in :file:`nrf/config/suit/templates` and are suitable for typical development needs. Three manifests are used in the most common case: @@ -96,9 +96,9 @@ Using Nordic Semiconductor templates directly in a product is strongly discourag The build system searches for the manifest templates in the following order: -#. It checks if :kconfig:option:`SB_CONFIG_SUIT_ENVELOPE_ROOT_TEMPLATE_FILENAME` or :kconfig:option:`CONFIG_SUIT_ENVELOPE_TEMPLATE_FILENAME` exists in the :file:`/suit/${SB_CONFIG_SOC}/` file. +#. It checks if the file provided in :kconfig:option:`SB_CONFIG_SUIT_ENVELOPE_ROOT_TEMPLATE_FILENAME` or :kconfig:option:`CONFIG_SUIT_ENVELOPE_TEMPLATE_FILENAME` exists in the :file:`/suit/${SB_CONFIG_SOC}/` directory. -#. It checks if :kconfig:option:`SB_CONFIG_SUIT_ENVELOPE_ROOT_TEMPLATE_FILENAME` or :kconfig:option:`CONFIG_SUIT_ENVELOPE_TEMPLATE_FILENAME` exists in the :file:`/config/suit/templates/${SB_CONFIG_SOC}/${SB_CONFIG_SUIT_BASE_MANIFEST_VARIANT}/` file. +#. It checks if the file provided in :kconfig:option:`SB_CONFIG_SUIT_ENVELOPE_ROOT_TEMPLATE_FILENAME` or :kconfig:option:`CONFIG_SUIT_ENVELOPE_TEMPLATE_FILENAME` exists in the :file:`/nrf/config/suit/templates/${SB_CONFIG_SOC}/${SB_CONFIG_SUIT_BASE_MANIFEST_VARIANT}/` directory. The build system selects the set of files from the first successful step. @@ -166,7 +166,7 @@ Metadata file The :file:`metadata.yaml` file contains information about the Nordic Semiconductor manifest templates from which the custom manifest templates were derived. The file should be added into the version control system alongside the custom manifest templates. -The ``west suit-manifest review`` command uses the metadata to display the changes between the lastly linked Nordic Semiconductor manitest templates and the manifest templates that are present in the |NCS| release that is currently being used. +The ``west suit-manifest review`` command uses the metadata to display the changes between the lastly linked Nordic Semiconductor manifest templates and the manifest templates that are present in the |NCS| release that is currently being used. The ``west suit-manifest review --accept`` command updates the metadata to link with the Nordic Semiconductor manifest templates that are present in the |NCS| release that is currently being used. @@ -184,25 +184,25 @@ Customize Vendor and Class UUIDs -------------------------------- Customizing UUIDs used for class and vendor IDs enhances security and is recommended for specific use cases. -Values for ``class-identifier`` and ``vendor-identifier`` in the manifest are created based on the ``CONFIG_SUIT_MPI__VENDOR_NAME`` and ``CONFIG_SUIT_MPI__CLASS_NAME`` Kconfig options. +Values for ``class-identifier`` and ``vendor-identifier`` in the manifest are created based on the ``SB_CONFIG_SUIT_MPI__VENDOR_NAME`` and ``SB_CONFIG_SUIT_MPI__CLASS_NAME`` sysbuild Kconfig options. Specifically, in the basic case: -* :kconfig:option:`CONFIG_SUIT_MPI_ROOT_VENDOR_NAME` -* :kconfig:option:`CONFIG_SUIT_MPI_ROOT_CLASS_NAME` -* :kconfig:option:`CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME` -* :kconfig:option:`CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME` -* :kconfig:option:`CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME` -* :kconfig:option:`CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME` +* :kconfig:option:`SB_CONFIG_SUIT_MPI_ROOT_VENDOR_NAME` +* :kconfig:option:`SB_CONFIG_SUIT_MPI_ROOT_CLASS_NAME` +* :kconfig:option:`SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME` +* :kconfig:option:`SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME` +* :kconfig:option:`SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_VENDOR_NAME` +* :kconfig:option:`SB_CONFIG_SUIT_MPI_RAD_LOCAL_1_CLASS_NAME` -These Kconfigs are used during Manifest Provisioning Information (MPI) generation. -After the MPI has been flashed, it is read by the Secure Domain Firmware, which can then use it to verify if the UUIDs in a manifest are correct, +These Kconfig options are used during Manifest Provisioning Information (MPI) generation. +Once the MPI has been flashed, it is read by the SDFW, which uses it to verify the correctness of the UUIDs in the manifest. -As as an example, after adding the following lines to the :file:`prj.conf` file: +As an example, after adding the following lines to the :file:`sysbuild.conf` file: .. code-block:: - CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME="ACME Corp" - CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME="Light bulb" + SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME="ACME Corp" + SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME="Light bulb" You will find the following lines in the generated manifest .yaml file :file:`build/DFU/application.yaml` @@ -230,16 +230,17 @@ The manifest templates have access to the following: Some of these values are stored in the Python dictionaries that are named after the target name. (Therefore, Python is used within the ``.jinja2`` files to fill in the necessary values in the manifest(s).) -For example, for the :ref:`nrf54h_suit_sample` there will be two variables available: ``application`` and ``radio``. +For example, for the ``sample.suit.smp_transfer.bt`` configuration (simple bluetooth configuration) in :ref:`nrf54h_suit_sample` there will be two variables available: ``application`` and ``radio``. The target names (the names of these variables) can be changed using the :kconfig:option:`CONFIG_SUIT_ENVELOPE_TARGET` Kconfig option for a given image. Each variable is a Python dictionary type (``dict``) containing the following keys: * ``name`` - Name of the target * ``dt`` - Devicetree representation (`edtlib`_ object) +* ``config`` - Kconfig options * ``binary`` - Path to the binary, which holds the firmware for the target Additionally, the Python dictionary holds all the variables defined inside the :file:`VERSION` file, used for :ref:`zephyr:app-version-details` in Zephyr and the |NCS|. -The default templates searches for the following options inside the :file:`VERSION` file: +The default templates search for the following options inside the :file:`VERSION` file: * ``APP_ROOT_SEQ_NUM`` - Sets the application root manifest sequence number. * ``APP_ROOT_VERSION`` - Sets the application root manifest current (semantic) version. @@ -264,6 +265,7 @@ With the Python dictionary you are able to, for example: * Obtain the size of partition with ``application['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size`` * Get the pair of URI name and the binary path by using ``'#{{ application['name'] }}': {{ application['binary'] }}`` * Get the root manifest sequence number with ``suit-manifest-sequence-number: {{ APP_ROOT_SEQ_NUM }}`` +* Get the vendor name by using ``sysbuild['config']['SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME']`` Additionally, the **get_absolute_address** method is available to recalculate the absolute address of the partition. With these variables and methods, you can define templates which will next be filled out by the build system and use them to prepare the output binary SUIT envelope. @@ -274,7 +276,7 @@ The examples below demonstrate the use of these variables and methods. Set component definition and memory ranges ------------------------------------------ -In :file:`modules/lib/suit-generator/ncs/app_envelope.yaml.jinja2` +In :file:`nrf/config/suit/templates/nrf54h20/default/v1/app_envelope.yaml.jinja2` , the component definition and memory ranges are filled out by using the ``edtlib`` (devicetree values) object like so: .. code-block:: @@ -286,12 +288,12 @@ In :file:`modules/lib/suit-generator/ncs/app_envelope.yaml.jinja2` - ``{{ application['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }}`` .. note:: - See the :ref:`ug_suit_dfu_component_def` page for a full list and table of the available customizable components. + See the :ref:`ug_nrf54h20_suit_components` page for a full list and table of the available customizable components. Set integrated payload ---------------------- -In :file:`modules/lib/suit-generator/ncs/app_envelope.yaml.jinja2` +In :file:`nrf/config/suit/templates/nrf54h20/default/v1/app_envelope.yaml.jinja2` , the integrated payload definition is done using the target name and binary location: .. code-block:: @@ -304,7 +306,7 @@ In :file:`modules/lib/suit-generator/ncs/app_envelope.yaml.jinja2` Root manifest template ---------------------- -The file :file:`modules/lib/suit-generator/ncs/root_with_binary_nordic_top.yaml.jinja2` contains content that is dynamically created, depending on how many targets are built. +The file :file:`nrf/config/suit/templates/nrf54h20/default/v1/root_with_binary_nordic_top.yaml.jinja2` contains content that is dynamically created, depending on how many targets are built. The following example only shows a selected portion of the root manifest file. For more information, see the file available in the sample and `Jinja documentation`_: @@ -330,7 +332,7 @@ For more information, see the file available in the sample and `Jinja documentat suit-components: - - CAND_MFST - 0 - {%- if radio is defined %} # Add section below only, in case the radio core has been already been built. + {%- if radio is defined %} # Add section below only, in case the radio core has already been built. {%- set component_index = component_index + 1 %} # Increment `component_index`. {%- set radio_component_index = component_index %} # Store the current component index for further use. {{- component_list.append( radio_component_index ) or ""}} # Append the current component index to the common list. @@ -354,7 +356,7 @@ For more information, see the file available in the sample and `Jinja documentat Reference for editing manifest values ------------------------------------- -Some entries in the YAML file will filled in automatically, (upon first build of the sample) by the build system in the final binary DFU envelope. +Some entries in the YAML file will be filled in automatically, (upon first build of the sample) by the build system in the final binary DFU envelope. +---------------------------------------------------------+------------------------------+--------------------------------------------------------+ | Operation | YAML entry | Value in the output binary envelope | diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_qsg.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_qsg.rst similarity index 84% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_qsg.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_qsg.rst index c2ca81df40e6..f36baea88961 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_customize_qsg.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_customize_qsg.rst @@ -19,7 +19,6 @@ The following are basic SUIT concepts you need to understand to be able to custo * SUIT envelopes are generated from manifest templates. * The SUIT manifest is like a blueprint that tells the system how to create a SUIT envelope, and contains instructions and metadata for the DFU procedure. * Default SUIT manifest templates are provided, but customization, especially for UUIDs, is recommended. -* The manifest templates are automatically created and copied to the sample directory on the first build of SUIT samples. .. figure:: images/nrf54h20_suit_dfu_overview.png :alt: Overview of the SUIT DFU procedure @@ -32,8 +31,10 @@ SUIT DFU process ================ The SUIT DFU process involves creating a SUIT envelope, which includes a manifest outlining the steps for the update. -When you first build the SUIT sample in the |NCS|, you receive default manifest templates which you can customize according to your project's requirements. -This guide will walk you through how to customize the SUIT manifest to target your specific device. +By default, manifests templates provided in :file:`nrf/config/suit/templates` are used to create the envelopes. +These templates can be copied and customized according to your project's requirements. + +This guide will walk you through how to customize the SUIT DFU process to target your specific device. For a complete guide on all customizable aspects of the SUIT DFU procedure, see the :ref:`ug_nrf54h20_suit_customize_dfu` user guide. @@ -85,16 +86,16 @@ Modifying class and vendor identifiers Replacing and using the correct class and vendor UUIDs prevents conflicts in the DFU process. The UUIDs allow to ensure that the firmware is compatible with a given device. -This can be done by changing the class and vendor names using Kconfig options (for example in the :file:`prj.conf` file): +This can be done by changing the class and vendor names using sysbuild Kconfig options (for example in the :file:`sysbuild.conf` file): .. code-block:: - CONFIG_SUIT_MPI_ROOT_VENDOR_NAME="ACME Corp" - CONFIG_SUIT_MPI_ROOT_CLASS_NAME="Light bulb root" - CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME="ACME Corp" - CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME="Light bulb" + SB_CONFIG_SUIT_MPI_ROOT_VENDOR_NAME="ACME Corp" + SB_CONFIG_SUIT_MPI_ROOT_CLASS_NAME="Light bulb root" + SB_CONFIG_SUIT_MPI_APP_LOCAL_1_VENDOR_NAME="ACME Corp" + SB_CONFIG_SUIT_MPI_APP_LOCAL_1_CLASS_NAME="Light bulb" -After rebuiling you will be able to find the following part in the :file:`./build/DFU/application.yaml` file. +After rebuilding you can find the following part in the :file:`./build/DFU/application.yaml` file. .. code-block:: @@ -115,7 +116,6 @@ The SUIT DFU procedure can further be customized by: * Creating and modifying your own manifests * Generating raw UUID values -* Changing the default location of the manifests Instructions for these actions and further customization are described in the :ref:`ug_nrf54h20_suit_customize_dfu` page. Additionally, you can modify SUIT components within the manifest (see the :ref:`ug_nrf54h20_suit_components` page for more information). diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_device_config.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_device_config.rst new file mode 100644 index 000000000000..55e3817a7105 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_device_config.rst @@ -0,0 +1,474 @@ +.. _ug_nrf54h20_suit_device_config: + +nRF54H20 SUIT device configuration +################################## + +.. contents:: + :local: + :depth: 2 + + +The SUIT manifest defines both the installation and invocation logic using SUIT commands, classed either as conditions or directives. +This allows you to shape the logic to meet the end product's requirements, even when using a generic Secure Domain Firmware (SDFW). + +In addition to the logic, certain properties of the SUIT subsystem must be exposed as configurable parameters: + +* The number of SUIT manifests supported by the end product. +* Update and boot policies for the manifests. +* Attributes of the manifests. + +The following sections define these properties for products based on the nRF54H20 SoC, and describe the default configuration. + +SUIT manifests supported by the nRF54H20 SoC +******************************************** + +In the most complex predicted case, there can be 11 manifests in total, assigned across the 3 domains. + +Application domain +================== + +In the application domain, the following five SUIT manifests are supported: + +* The root manifest +* Three local app manifests +* A recovery manifest + +Local manifests are manifests that operate on the same set of local resources. +In most cases, using a single manifest is expected to be sufficient. +However, this document describes what is supported for the most complex scenarios, such as an A/B approach where two executable images are managed alongside a separate manifest for non-executable resources (for example, images or other media). + +Radio domain +============ + +In the radio domain, the following three SUIT manifests are supported: + +* Two local radio manifests +* A recovery manifest + +Secure Domain and System Controller +=================================== + +The Secure Domain and the System Controller support the following manifests: + +* The Nordic top manifest +* A System Controller manifest +* A Secure Domain manifest + +The Secure Domain Manifest is responsible solely for the delivery and initiation of the update process for the Secure Domain Firmware and Secure Domain Recovery Firmware images. +In the following diagrams, the Secure Domain Manifest is labeled as ``SDFW`` or ``SDFW_RECOVERY``. + +.. figure:: images/nrf54h20_suit_manifests.svg + + SUIT manifests supported by the nRF54H20 SoC in the most complex predicted case + +This diagram illustrates the most complex predicted configuration. +You can choose a subset of the manifests supported by the nRF54H20. + +.. figure:: images/nrf54h20_suit_manifests_minimal.svg + + SUIT manifests enabled in nRF54H20, Application and Radio images, without recovery support + +This diagram illustrates the minimal predicted configuration that supports the application and radio domains. + +Properties associated to SUIT manifest +************************************** + +.. figure:: images/suit_manifest_properties.svg + + An example of property values of the SUIT Application Local Manifest + +This diagram presents a set of properties associated with the SUIT manifest type, along with *example* values. +These properties are not part of the manifest itself but are configuration parameters stored on the device, defining the boundaries for allowable manifest behavior. +The properties covered in this document include: + +* The property that enables the manifest +* The vendor ID (VID) +* The manifest class ID +* The downgrade prevention policy +* The independent updateability policy +* The key ID ranges for SUIT manifest verification and signature verification policy +* The property granting the ability to operate on device resources + +The properties of Nordic-controlled manifests are hard-coded into the SDFW and cannot be modified. +However, some properties of user-customizable manifests are configurable using the manifest provisioning information data structure. + +Vendor ID and manifest class ID +=============================== + +Vendor ID and manifest class ID allow users to specify the vendor (for example, ``Nordic``, or ``ACME Corp``) and the manifest class. +In other words, they define the intended usage of the manifest, such as the manifest controlling firmware images associated with the application domain. + +Since it is impractical to store and process long, variable-length strings, RFC4122 UUID version 5 (uuid5) is used instead. + +There is no strict requirement on how to generate these ID values, as long as they remain unique. +However, the recommended method for creating a VID is ``Vendor ID = UUID5(DNS_PREFIX, vendor domain name)``. +The following example shows how to generate a VID for ``nordicsemi.com`` using Python:: + + uuid5(uuid.NAMESPACE_DNS, 'nordicsemi.com') + +This generates ``7617daa5-71fd-5a85-8f94-e28d735ce9f4``. + +The recommended method for creating a manifest class ID is ``Manifest Class ID = UUID5(Vendor ID, Class-Specific-Information)``. +The following example shows how to generate a manifest class ID using Python:: + + uuid5(nordic_vid, 'nRF54H20_sample_app') + +Assuming ``nordic_vid`` is equal to ``7617daa5-71fd-5a85-8f94-e28d735ce9f4``, it generates ``08c1b599-55e8-5fbc-9e76-7bc29ce1b04d``. + +How manifest class ID-based filtering works +------------------------------------------- + +The SDFW has access to a list of manifest class IDs supported by the device. +During the update candidate evaluation process, the SDFW compares the manifest class ID of each candidate manifest against this list. +If the manifest class ID of a candidate manifest is not recognized by the device, the update candidate is rejected. + +Expressing Class-specific information +------------------------------------- + +The following example illustrates this. +ACME Corp has two product types in its portfolio: roller shutter motors and light bulbs. +Both product types are powered by the nRF54H20 SoC and share the hardware design of the radio-related part, to the extent that they can share the same set of executable binary images for the radio domain. +At the same time, hardware differences between motors and light bulbs are significant and it makes sense to have a separated set of executable binary images for the application domain. + +This means that it is worth considering to assign the same manifest class ID for Radio Local Manifest for both products, for example:: + + uuid5(acme_vid, 'nRF54H20_radio') + +And two distinct manifest class ID values for Application Local Manifest, for example:: + + uuid5(acme_vid, 'nRF54H20_light_bulb_app') + + uuid5(acme_vid, 'nRF54H20_roller_shutter_app') + +.. figure:: images/suit_acme_manifests.svg + + Manifest hierarchies for ACME Corp devices. + +This approach allows ACME Corp to share the same radio domain update package (executable binaries and SUIT manifest) across both products. +Additionally, if an application domain update package intended for the light bulb is accidentally delivered to the roller shutter motor, the motor will reject it due to the unrecognized (unsupported) manifest class ID. + +Downgrade prevention policy +=========================== + +Product requirements can impose different downgrade prevention policies for different manifests. +The following values are supported: + +* ``downgrade_prevention_disabled`` +* ``downgrade_prevention_enabled`` + +How downgrade prevention works +------------------------------ + +The ``suit-manifest-sequence-number`` (an element of the SUIT manifest) is a monotonically increasing anti-rollback counter. +As part of the update candidate evaluation process, the ``suit-manifest-sequence-number`` of the candidate manifest is compared with the installed counterpart. +The result of this comparison, along with the associated downgrade prevention policy, determines whether a candidate is accepted or rejected. + +Assuming ``downgrade_prevention_enabled`` is enabled, a candidate manifest will be accepted only if its ``suit-manifest-sequence-number`` is equal or bigger than the ``suit-manifest-sequence-number`` of the installed manifest. + +Independent updateability policy +================================ + +This policy allows the expression of whether a candidate manifest of a specific manifest class ID can be updated independently of its parent. +In some cases, this can be the intended behavior, while in others, the opposite can be desired. + +The following policy values are supported: + +* ``independent_update_allowed`` +* ``independent_update_denied`` + +How independent updateability policy works +------------------------------------------ + +The system is designed to allow the expression of an update package as a candidate manifest along with its dependencies (candidate, child manifests). +In the simplest case, an update package composed of just one manifest (for example, a Local App Manifest), the policy ``independent_update_denied`` associated with the Local App Manifest would block the update. + +This be considered intended behavior because images for the Application Core (controlled by the Local App Manifest) can rely on functionality provided by images controlled by other manifests, such as the radio manifest. +In such a case, updating the app images individually could cause interoperability issues. +Blocking the independent update of the manifest implies that the update must go through the parent manifest. +If two manifests share the same parent, the installation sequence of the parent manifest can manage compatibility between the two manifests. + +Key ID ranges for SUIT manifest verification and signature verification policy +================================================================================== + +Signature verification helps ensure the following: + +* The signed material has not been altered. +* The material is signed by the proper signing authority. + +This is essential for detecting situations where a valid signing key, intended for one type of material (for example, Local App Manifest), is maliciously used to sign another type of material (for example, Local Radio Manifest). + +Nordic-related SUIT manifests are authenticated using the Edwards-curve Digital Signature Algorithm, specifically Ed25519. +Algorithms for verifying user-specific SUIT manifests are beyond the scope of this document. + +Signing Authorities +------------------- + +Each manifest type in SoC is associated with a range of Key IDs that are allowed to be used for signing and verifying the signature of a specific manifest. +The user does not have the ability to override these settings. +The range of Key IDs associated with distinct manifests is hard-coded in the SDFW. + +Provisioning of key material +---------------------------- + +The respective Nordic-related public keys for SUIT manifest verification are embedded in the SDFW. +You can provision these public keys as part of the device provisioning process. + +The key provisioning process for user-specific keys is beyond the scope of this document. + +Signature verification policy +----------------------------- + +The policy allows you to verify if a manifest must be verified before processing. +The following signature verification policy values are supported: + +* ``signature_check_disabled`` +* ``signature_check_enabled_on_update`` +* ``signature_check_enabled_on_update_and_boot`` + +.. note:: + + For SUIT manifests related to the application and radio domains, signature verification must be skipped, regardless of the configured signature verification policy, if the respective domain is in one of the following lifecycle states (LCS): + + * ``LCS_EMPTY`` + * ``LCS_ROT`` + * ``LCS_ROT_DEBUG`` + +Ability to operate on device resources +========================================== + +As the manifest operates on device resources, such as accessing memory (whether NVM, RAM, or both) and starting the processor, access rights are associated with the manifest class ID. +This ensures that if a manifest belonging to one local domain (for example, the application domain) attempts to declare components that span into areas belonging to another local domain (for example, the radio domain or, more critically, the Secure Domain), the system can detect and block this behavior. + +SUIT topologies +***************** + +The supported SUIT topologies are the following. + +Invocation path (normal booting) +================================ + +.. figure:: images/nrf54h20_invocation_topology.svg + + SUIT topology for nRF54H20 invocation path in the most complex predicted case + +In the event of a device cold boot, following the standard invocation procedure, the SDFW will first execute the validation, loading, and invocation sequences defined in the top manifest from Nordic Semiconductor. +Next, it will execute these sequences as specified in the root manifest. + +The invocation of Nordic-related SUIT elements is fully controlled by SUIT manifests signed by Nordic Semiconductor. +This approach ensures that entities other than Nordic cannot manipulate the order of execution of Nordic-controlled elements. + +Both the Nordic top and root manifests control the boot process of their respective dependency manifests. + +Update path +=========== + +Updating regular resources (such as SUIT manifests and images) alongside those responsible for device recovery in a single update increases the risk of placing the device in an unrecoverable state. +To minimize this risk, recovery-dedicated SUIT manifests cannot be updated together with other manifests. + +Update path for elements not dedicated to SUIT recovery: + +.. figure:: images/nrf54h20_update_topology_for_non_recovery_elements.svg + + SUIT topology for the nRF54H20 SoC update path in the most complex predicted case for elements not dedicated to SUIT recovery. + +Update path for elements dedicated to SUIT recovery: + +.. figure:: images/nrf54h20_update_topology_for_recovery_elements.svg + + SUIT topology for the nRF54H20 SoC update path for elements dedicated to SUIT recovery. + +Recovery path +============= + +Verification failures (for the SUIT manifest signature, SUIT manifest digest, and images) in the invocation path force the device to reboot into the recovery path. +The recovery path is essentially an invocation path with a specific purpose: to download missing elements (such as images and manifests) and provide them to the SDFW as update candidates. + +.. note:: + If the device is in a state requiring recovery and the application recovery manifest is not activated the SDFW will boot from the root manifest. + If the application recovery manifest is activated, but the application recovery manifest is damaged, the SDFW will NOT boot any local images. + +In the event of a device cold boot in the recovery path, the SDFW will first execute the respective validation, load, and invocation sequences from the nordic top manifest, followed by the sequences from the application recovery manifest. +Any potential failure of the nordic top manifest or its dependencies will NOT interrupt the boot process. + +The application recovery manifest has the ability to directly control local application images and manage the boot process using the respective dependency manifests (such as the application and radio local manifests, and the radio recovery manifest). +This gives the user flexibility in defining the device's behavior in recovery scenarios. +One possible scenario is reusing the regular radio image to download a damaged application image. + +.. figure:: images/nrf54h20_recovery_invocation_topology.svg + + SUIT topology for the nRF54H20 SoC recovery path in the most complex predicted case. + +Properties of user-controlled SUIT manifests configurable by the users +********************************************************************** + +A user-controlled SUIT manifest must be explicitly enabled or configured to be functional. + +The following tables contain *proposed* configuration parameter values selected to render R&D activities more convenient. + +Root manifest +============= + ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Property | Default value | Note | ++==================================+======================================+===========================================================+ +| Vendor ID | 7617daa5-71fd-5a85-8f94-e28d735ce9f4 | RFC4122 uuid5(uuid.NAMESPACE_DNS, 'nordicsemi.com') | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Class ID | 3f6a3a4d-cdfa-58c5-acce-f9f584c41124 | RFC4122 uuid5(nordic_vid, 'nRF54H20_sample_root') | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Downgrade prevention policy | downgrade_prevention_disabled | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Independent updateability policy | independent_update_allowed | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Signature verification policy | signature_check_disabled | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ + +Application local manifest 1 +============================ + ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Property | Default value | Note | ++==================================+======================================+===========================================================+ +| Vendor ID | 7617daa5-71fd-5a85-8f94-e28d735ce9f4 | RFC4122 uuid5(uuid.NAMESPACE_DNS, 'nordicsemi.com') | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Class ID | 08c1b599-55e8-5fbc-9e76-7bc29ce1b04d | RFC4122 uuid5(nordic_vid, 'nRF54H20_sample_app') | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Downgrade prevention policy | downgrade_prevention_disabled | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Independent updateability policy | independent_update_denied | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Signature verification policy | signature_check_disabled | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ + +Radio local manifest 1 +====================== + ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Property | Default value | Note | ++==================================+======================================+===========================================================+ +| Vendor ID | 7617daa5-71fd-5a85-8f94-e28d735ce9f4 | RFC4122 uuid5(uuid.NAMESPACE_DNS, 'nordicsemi.com') | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Class ID | 816aa0a0-af11-5ef2-858a-feb668b2e9c9 | RFC4122 uuid5(nordic_vid, 'nRF54H20_sample_rad') | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Downgrade prevention policy | downgrade_prevention_disabled | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Independent updateability policy | independent_update_denied | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Signature verification policy | signature_check_disabled | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ + +Properties of user-controlled SUIT manifests fixed in the SDFW implementation +***************************************************************************** + +Root manifest +============= + ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Property | Proposed value | Note | ++==================================+======================================+===========================================================+ +| Independent updateability policy | independent_update_allowed | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Signing Key ID Range | MANIFEST_PUBKEY_OEM_ROOT_GEN0-2 | 0x4000AA00 - 0x4000AA02 | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Resource Access Rights | | Does not operate on local resources | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ + +Application recovery manifest +============================= + ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Property | Proposed value | Note | ++==================================+======================================+===========================================================+ +| Independent updateability policy | independent_update_allowed | | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Signing Key ID Range | MANIFEST_PUBKEY_APPLICATION_GEN0-2 | 0x40022100 - 0x40022102 | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Resource Access Rights | | Ability to boot the App Core, | +| | | Memory access based on App Domain UICR | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ + +Application local manifest 1, 2, 3 +================================== + ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Property | Proposed value | Note | ++==================================+======================================+===========================================================+ +| Signing Key ID Range | MANIFEST_PUBKEY_APPLICATION_GEN0-2 | 0x40022100 - 0x40022102 | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Resource Access Rights | | Ability to boot the App Core, | +| | | Memory access based on App Domain UICR | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ + +Radio Recovery Manifest, Radio Local manifest 1, 2 +================================================== + ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Property | Proposed value | Note | ++==================================+======================================+===========================================================+ +| Signing Key ID Range | MANIFEST_PUBKEY_RADIO_GEN0-2 | 0x40032100 - 0x40032102 | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ +| Resource Access Rights | | Ability to boot the Radio Core, | +| | | Memory access based on radio domain UICR | ++----------------------------------+--------------------------------------+-----------------------------------------------------------+ + +Properties of Nordic-controlled SUIT manifests +********************************************** + +All values given in this section are hard-coded in the SDFW and cannot be altered by the user. +Support for all the manifests described in the following tables are enabled by default. + +Nordic top manifest +=================== + ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Property | Default value | Note | ++==================================+============================================+===========================================================+ +| Vendor ID | 7617daa5-71fd-5a85-8f94-e28d735ce9f4 | RFC4122 uuid5(uuid.NAMESPACE_DNS, 'nordicsemi.com') | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Class ID | f03d385e-a731-5605-b15d-037f6da6097f | RFC4122 uuid5(nordic_vid, 'nRF54H20_nordic_top') | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Downgrade prevention policy | downgrade_prevention_enabled | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Independent updateability policy | independent_update_allowed | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Signature verification policy | signature_check_enabled_on_update_and_boot | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Resource Access Rights | | Does not operate on local resources | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ + +System Controller manifest +========================== + ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Property | Default value | Note | ++==================================+============================================+===========================================================+ +| Vendor ID | 7617daa5-71fd-5a85-8f94-e28d735ce9f4 | RFC4122 uuid5(uuid.NAMESPACE_DNS, 'nordicsemi.com') | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Class ID | c08a25d7-35e6-592c-b7ad-43acc8d1d1c8 | RFC4122 uuid5(nordic_vid, 'nRF54H20_sys') | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Downgrade prevention policy | downgrade_prevention_enabled | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Independent updateability policy | independent_update_denied | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Signature verification policy | signature_check_enabled_on_update_and_boot | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Resource Access Rights | | Ability to boot the System Controller, | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ + +Secure Domain manifest +====================== + ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Property | Proposed value | Note | ++==================================+============================================+===========================================================+ +| Vendor ID | 7617daa5-71fd-5a85-8f94-e28d735ce9f4 | RFC4122 uuid5(uuid.NAMESPACE_DNS, 'nordicsemi.com') | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Class ID | d96b40b7-092b-5cd1-a59f-9af80c337eba | RFC4122 uuid5(nordic_vid, 'nRF54H20_sec') | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Downgrade prevention policy | downgrade_prevention_enabled | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Independent updateability policy | independent_update_denied | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Signature verification policy | signature_check_enabled_on_update_and_boot | | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ +| Resource Access Rights | | Ability to trigger installation of SDFW, SDFW_UPDATE | ++----------------------------------+--------------------------------------------+-----------------------------------------------------------+ diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_dfu.rst similarity index 82% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_dfu.rst index 1279eeec1f28..6554fc9307be 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_dfu.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_dfu.rst @@ -22,14 +22,17 @@ For a list of available SUIT samples, see the :ref:`suit_samples` page. :maxdepth: 2 :caption: Subpages: - ug_nrf54h20_suit_intro.rst - ug_nrf54h20_suit_manifest_overview.rst - ug_nrf54h20_suit_customize_qsg.rst - ug_nrf54h20_suit_customize_dfu.rst + ug_nrf54h20_suit_intro + ug_nrf54h20_suit_manifest_overview + ug_nrf54h20_suit_device_config + ug_nrf54h20_suit_customize_qsg + ug_nrf54h20_suit_customize_dfu + ug_nrf54h20_suit_smp ug_nrf54h20_suit_fetch ug_nrf54h20_suit_push ug_nrf54h20_suit_external_memory ug_nrf54h20_suit_components ug_nrf54h20_suit_hierarchical_manifests ug_nrf54h20_suit_soc_binaries - ug_nrf54h20_suit_recovery.rst + ug_nrf54h20_suit_recovery + ug_nrf54h20_suit_sdfw_sdrfw_update diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_external_memory.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_external_memory.rst new file mode 100644 index 000000000000..a9a9c5934424 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_external_memory.rst @@ -0,0 +1,371 @@ +.. _ug_nrf54h20_suit_external_memory: + +Firmware upgrade with external memory +##################################### + +.. contents:: + :local: + :depth: 2 + +The Secure Domain firmware is unable to access the external memory by itself. +However, the application domain can implement an IPC service, which allows the Secure Domain firmware to access the external memory through application domain serving as a proxy. +This guide explains how to prepare the application domain firmware and the SUIT envelope to perform SUIT firmware upgrade using external memory. + +.. note:: + To use external memory with SUIT, you can either use the push model-based or the fetch model-based firmware upgrade. + See :ref:`ug_nrf54h20_suit_push` for details about the push model and :ref:`ug_nrf54h20_suit_fetch` for details on how to migrate from the push to fetch model. + +The following terms are used in this guide: + +* External memory (extmem) service - IPC service allowing the Secure Domain to use the application domain as a proxy when accessing external memory. + +* Companion image - Application domain firmware implementing the extmem service and external memory driver. + The IPC service allows the Secure Domain to access the external memory. + +Overview of external memory in SUIT firmware updates +**************************************************** + +The SUIT envelope must always be stored in the non-volatile memory in the MCU. +The SUIT manifests stored in the envelope contain instructions that the device must perform to fetch other required payloads. +To store payloads in the external memory, a Device Firmware Update (DFU) cache partition must be defined in the external memory's devicetree node. +The push model-based update and the fetch model-based update differ in the way the cache partition is filled with the images. + +When the Secure Domain processes the ``suit-install`` sequence, issuing ``suit-directive-fetch`` on any non-integrated payload will instruct the Secure Domain firmware to search for a given URI in all cache partitions in the system. +However, when such a cache partition is located in the external memory, the Secure Domain is unable to access the data directly. +Before any ``suit-directive-fetch`` directive is issued that accesses a payload stored on the external memory, a companion image that implements an external memory device driver must be booted. + +The companion image consists of two main parts: + +* Device driver adequate for the external memory device + +* IPC service exposed towards the Secure Domain + +When the companion image is booted and a directive that accesses the data on the external memory is issued, such as the ``suit-directive-fetch`` or ``suit-directive-copy`` directives, the Secure Domain firmware uses the IPC service provided by the companion image to access the contents of the external memory. +Apart from booting the companion image, the update process does not differ from regular push model-based or fetch model-based updates. + +Difference between push and fetch models +======================================== + +Push model +---------- + +In the push model, the cache partition contents are created on the building machine and pushed to the device without modifications. +The images are extracted to the cache partition files using the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE` Kconfig option. + +No additional sequences are required in the SUIT manifest. + +For more details, see :ref:`ug_nrf54h20_suit_push`. + +Fetch model +----------- + +In the fetch model, the SUIT processor runs on the application core. + +In the SUIT manifest, you can define a component that represents the cache partition in the external memory. +Within the ``suit-payload-fetch`` sequence, you can then store fetched payloads into a ``CACHE_POOL`` component. +The device then pulls the images from external sources and manages their storage in the cache partitions. + +For more details, see :ref:`ug_nrf54h20_suit_fetch`. + +Enabling external flash support in SUIT DFU +******************************************* + +The :ref:`nrf54h_suit_sample` sample contains several example configurations that enable the external memory for SUIT DFU. + +The configurations using the push model are the following: + +* ``sample.suit.smp_transfer.cache_push.extflash`` +* ``sample.suit.smp_transfer.cache_push.extflash.bt`` + +The configurations using the fetch model are following: + +* ``sample.suit.smp_transfer.full_processing.extflash`` +* ``sample.suit.smp_transfer.full_processing.extflash.bt`` + +You can find these configurations defined in the :file:`samples/suit/smp_transfer/sample.yaml` file. +This file specifies which options need to be enabled. + +Alternatively, you can follow the following steps to manually enable external memory in SUIT DFU. + +Common steps for both push and fetch models +=========================================== + +1. Turn on the external flash chip on the nRF54H20 DK using the `Board Configurator app`_ in `nRF Connect for Desktop`_ . + + .. note:: + This step is needed only on nRF54H20 DK. Skip this step if you are using different hardware. + +#. Enable the ``SB_CONFIG_SUIT_BUILD_FLASH_COMPANION`` sysbuild Kconfig option, which enables the build of the reference companion image. + See the :ref:`suit_flash_companion` user guide for instructions on how to configure the companion image using sysbuild. + +#. Define a new DFU cache partition in the external memory in the DTS file: + + .. code-block:: devicetree + + &mx25uw63 { + ... + status = "okay"; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + dfu_cache_partition_1: partition@0 { + reg = <0x0 DT_SIZE_K(1024)>; + }; + }; + }; + + Note that the name of the partition must follow the following format: ``dfu_cache_partition_``. + The number at the end determines the ``CACHE_POOL`` ID, which will be used later in the SUIT manifest. + This number must be greater than 0 and less than the value of :kconfig:option:`CONFIG_SUIT_CACHE_MAX_CACHES`. + The Secure Domain firmware supports up to eight DFU cache partitions. + +#. Modify the application manifest file :file:`app_envelope.yaml.jinja2` by completing the following steps: + + a. Append the ``MEM`` type component that represents the companion image in the same SUIT manifest file: + + .. code-block:: yaml + + suit-components: + ... + - - MEM + - {{ flash_companion['dt'].label2node['cpu'].unit_addr }} + - {{ get_absolute_address(flash_companion['dt'].chosen_nodes['zephyr,code-partition']) }} + - {{ flash_companion['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }} + + In this example, the component index is ``3``. + In the following steps, the companion image component is selected with ``suit-directive-set-component-index: 3``. + + #. Append directives to the ``suit-shared-sequence`` sequence in the application manifest file (:file:`app_envelope.yaml.jinja2`) to set the expected digest of the companion application: + + .. code-block:: yaml + + suit-shared-sequence: + - suit-directive-set-component-index: 3 + - suit-directive-override-parameters: + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ flash_companion['binary'] }} + + #. Modify the ``suit-install`` sequence in the application manifest file (:file:`app_envelope.yaml.jinja2`) to load into RAM and boot the companion image before accessing the candidate images stored in the external memory: + + .. code-block:: yaml + + suit-install: + # Use CAND_IMG component to access flash companion binary, stored as one of the integrated payloads. + - suit-directive-set-component-index: 1 + - suit-directive-override-parameters: + suit-parameter-uri: "#{{ flash_companion['name'] }}" + suit-parameter-image-digest: + suit-digest-algorithm-id: cose-alg-sha-256 + suit-digest-bytes: + file: {{ flash_companion['binary'] }} + - suit-directive-fetch: + - suit-send-record-failure + # Verify integrity of the companion binary in the envelope. + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + # Copy companion into local RAM. + - suit-directive-set-component-index: 3 + - suit-directive-override-parameters: + suit-parameter-source-component: 1 + - suit-directive-copy: + - suit-send-record-failure + # Verify integrity of the companion binary in the local RAM. + - suit-condition-image-match: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + # Boot the companion application. + - suit-directive-invoke: + - suit-send-record-failure + + To further improve the update procedure robustness, you can copy all integrity checks from the ``suit-install`` to the ``suit-candidate-verification`` sequence. + + #. Append the flash companion binary as integrated payload inside SUIT envelope: + + .. code-block:: yaml + + SUIT_Envelope_Tagged: + suit-authentication-wrapper: { ... } + suit-manifest: { .. } + + suit-integrated-payloads: + "#{{ flash_companion['name'] }}": {{ flash_companion['binary'] }} + + The flash companion binary must be available before the driver of the external memory is booted, so it must be transferred as part of the update candidate envelope and fit within the DFU partition inside the internal MRAM memory. + +Steps specific for the push model +================================= + +1. Enable the :kconfig:option:`CONFIG_SUIT_DFU_CANDIDATE_PROCESSING_PUSH_TO_CACHE` option to allow the application core to modify cache partitions. + +#. Enable the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE` Kconfig option for every image that needs to be updated from external memory. + +#. Modify the manifest files for all domains by completing the following steps: + + a. Ensure that the URI used by the ``suit-directive-fetch`` command to fetch a given image matches the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI` Kconfig option. + + #. Ensure that the envelope integrates the specified image within the envelope integrated payloads section. + This is ensured by default if you use the provided SUIT envelope templates. + +Steps specific for the fetch model +================================== + +1. Enable the :kconfig:option:`CONFIG_SUIT_DFU_CANDIDATE_PROCESSING_FULL` Kconfig option to allow the application core to process SUIT manifests. + +#. Enable the :kconfig:option:`CONFIG_SUIT_STREAM_SOURCE_FLASH` Kconfig option, which allows the SUIT processor on the application core to read and parse DFU cache partitions. + +#. Modify the application manifest file :file:`app_envelope.yaml.jinja2` by completing the following steps: + + a. Modify the ``CACHE_POOL`` identifier in the SUIT manifest: + + .. code-block:: yaml + + suit-components: + ... + - - CACHE_POOL + - 1 + + The ``CACHE_POOL`` identifier must match the identifier of the cache partition defined in the DTS file. + + #. Add the ``suit-payload-fetch`` sequence: + + .. code-block:: yaml + + suit-payload-fetch: + - suit-directive-set-component-index: 2 + - suit-directive-override-parameters: + suit-parameter-uri: 'file://{{ app['binary'] }}' + - suit-directive-fetch: + - suit-send-record-failure + + This snippet assumes that ``CACHE_POOL`` is the third component on the manifest's components list (so its component index is ``2``) + +#. If your application uses the radio core, complete the following steps to modify the radio core manifest file :file:`rad_envelope.yaml.jinja2`: + + a. Modify the ``CACHE_POOL`` identifier in the SUIT manifest: + + .. code-block:: yaml + + suit-components: + ... + - - CACHE_POOL + - 1 + + The ``CACHE_POOL`` identifier must match the identifier of the cache partition defined in the DTS file. + + #. Add the ``suit-payload-fetch`` sequence: + + .. code-block:: yaml + + suit-payload-fetch: + - suit-directive-set-component-index: 2 + - suit-directive-override-parameters: + suit-parameter-uri: 'file://{{ radio['binary'] }}' + - suit-directive-fetch: + - suit-send-record-failure + + This snippet assumes that ``CACHE_POOL`` is the third component on the manifest's components list (so its component index is ``2``) + +#. Complete the following steps to modify the root manifest file :file:`root_with_binary_nordic_top_extflash.yaml.jinja2`: + + a. Add the ``suit-payload-fetch`` sequence: + + .. code-block:: yaml + + suit-payload-fetch: + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: "#{{ application['name'] }}" + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + + This snippet assumes that ``CAND_MFST`` is the first component on the manifest's components list (so its component index is ``0``). + + #. If your application uses the radio core, append the following to the ``suit-payload-fetch`` sequence: + + .. code-block:: yaml + + suit-payload-fetch: + - suit-directive-set-component-index: 0 + - suit-directive-override-parameters: + suit-parameter-uri: "#{{ radio['name'] }}" + - suit-directive-fetch: + - suit-send-record-failure + - suit-condition-dependency-integrity: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + - suit-directive-process-dependency: + - suit-send-record-success + - suit-send-record-failure + - suit-send-sysinfo-success + - suit-send-sysinfo-failure + +Testing the application with external flash support +=================================================== + +1. |open_terminal_window_with_environment| + +#. Build and flash the application by completing the following commands: + + .. code-block:: console + + west build ./ -b nrf54h20dk/nrf54h20/cpuapp -T + west flash + + The build system will automatically use :ref:`configuration_system_overview_sysbuild` and generate a :file:`build/zephyr/dfu_suit.zip` archive, which contains the SUIT envelope and candidate images. + +#. Build a new version of the application with the incremented ``CONFIG_N_BLINKS`` value. + +#. Download the new :file:`dfu_suit.zip` archive to your mobile device. + +#. Use the `nRF Connect Device Manager`_ mobile app to update your device with the new firmware by completing the following steps: + + a. Ensure that you can access the :file:`dfu_suit.zip` archive from your phone or tablet. + + #. In the mobile app, scan and select the device to update. + + #. Switch to the :guilabel:`Image` tab. + + #. Press the :guilabel:`SELECT FILE` button and select the :file:`dfu_suit.zip` archive. + + #. Press the :guilabel:`START` button. + This initiates the DFU process of transferring the image to the device. + + The Device Manager mobile application will unpack the file and upload the SUIT envelope to the device. + The firmware images will be uploaded separately by the mobile application to the device, if the device requests it. + + #. Wait for the DFU to finish and then verify that the application works properly. + +Create custom companion images +****************************** + +Nordic Semiconductor provides a reference companion image in the :file:`samples/suit/flash_companion` directory, which can serve as a base for developing a customized companion image. + +Limitations +*********** + +* The Secure Domain, System Controller and companion image update candidates must always be stored in the MRAM. + Trying to store those candidates in external memory will result in a failure during the installation process. + +* The companion image needs either a dedicated area in the executable region of the MRAM or it needs to fit within the local RAM that is assigned to the application domain. + The default flash companion application uses local RAM, so there is no need to reserve additional area in the main application memory map. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_fetch.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_fetch.rst similarity index 85% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_fetch.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_fetch.rst index 40591bbad7eb..b6f8a5f6030d 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_fetch.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_fetch.rst @@ -7,11 +7,11 @@ How to fetch payloads :local: :depth: 2 -In the Software Updates for Internet of Things (SUIT), it is possible for a device to obtain a new firmware in two ways: +In the Software Updates for Internet of Things (SUIT), a device can obtain new firmware in two ways: -1. The push model - where all necessary candidate images are integrated into the SUIT envelope, and uploaded to a device as a single unit. +1. Using the push model - where all necessary candidate images are uploaded to the device along with the envelope before triggering the envelope processing. -#. The fetch model - where the envelope contains 0 or not all necessary candidate images. +#. Using the fetch model - where not all the required payloads are uploaded to the device before triggering the envelope processing. The manifest contains logic that instructs the device to fetch other required candidate images through a user-defined mechanism during the envelope processing. This guide explains how to reconfigure an application that uses the push model to a fetch model-based upgrade. @@ -25,9 +25,11 @@ The push model does not require the SUIT processor to be built into the applicat The fetch model, on the other hand, requires the SUIT processor to be built into the application firmware in order to execute the ``suit-payload-fetch`` sequence. You can enable this by using the :kconfig:option:`CONFIG_SUIT_DFU_CANDIDATE_PROCESSING_FULL` Kconfig option. -In the push model, the envelope along with all necessary candidate images must be stored in a continuous memory region in the MCU's non-volatile storage. -In the fetch model, the envelope must still be stored in a continuous memory region in the MCU, but it does not occupy as much space because not all candidate images are integrated into it. -Some or all candidate images can be stored in separate memory regions from the envelope, or on a completely different storage device altogether. +In both models, the SUIT envelope must be stored in a continuous memory region in the MCU's non-volatile storage. +Some or all candidate images can be stored either in separate memory regions from the envelope or on a completely different storage device. + +In the push model, all candidate images must be uploaded to the device before the envelope processing starts. +In the fetch model, the device can fetch the candidate images after the envelope processing has started. Reasons to use the fetch model ****************************** @@ -41,10 +43,6 @@ The fetch model has greater flexibility compared to the push model in the follow Nordic Semiconductor provides a reference fetch source implementation which uses the SMP protocol over serial or Bluetooth® LE. You have the option to implement any fetching mechanism needed for the application, such as fetching from an HTTP resource. -* Candidate images can be stored in a different memory partition than the envelope itself. - The SUIT envelope itself must always be stored in non-volatile storage that is integrated into the MCU. - The fetched candidate images do not have restrictions on where they are placed and can be stored on an external memory chip. - Migrating from push-based to fetch-based firmware upgrade ********************************************************* diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_hierarchical_manifests.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_hierarchical_manifests.rst similarity index 98% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_hierarchical_manifests.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_hierarchical_manifests.rst index d7913a70d1d0..38c71e267fa4 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_hierarchical_manifests.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_hierarchical_manifests.rst @@ -29,6 +29,8 @@ Manifest are organized in a hierarchy-tree structure consisting of a single root Hierarchical manifest topology +.. _suit_default_manifest_topology_for_the_nrf54h20_soc: + Default manifest topology for the nRF54H20 SoC ********************************************** diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_intro.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_intro.rst similarity index 99% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_intro.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_intro.rst index ae707a65750a..7e58427d7da1 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_intro.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_intro.rst @@ -7,7 +7,7 @@ Introduction to SUIT :local: :depth: 2 -This documentives an overview of SUIT and its characteristics. +This documents an overview of SUIT and its characteristics. See the :ref:`nrf54h_suit_sample` if you want to try using the SUIT procedure on the nRF54H20 SoC. .. _ug_suit_overview: diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_manifest_overview.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_manifest_overview.rst similarity index 100% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_manifest_overview.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_manifest_overview.rst diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_push.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_push.rst similarity index 94% rename from doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_push.rst rename to doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_push.rst index 4ccbc9f4993a..8e136a3afa21 100644 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_push.rst +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_push.rst @@ -87,14 +87,14 @@ To reconfigure the sample to allow for pushing images into DFU cache partitions, * Optionally, modify :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_PARTITION` to select the partition where the image will be pushed (default is partition 1). * Optionally, modify the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI` to modify the URI used as key for the given image in the DFU cache. -#. Ensure that the URI used by the ``suit-payload-fetch`` sequence to fetch a given image matches the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI` Kconfig option. +#. Ensure that the URI used by the ``suit-directive-fetch`` command to fetch a given image matches the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI` Kconfig option. This is done by default when using the manifest templates provided by Nordic Semiconductor. For the application image URI, you can do that as follows (assuming the target name ``application`` for the image): .. code-block:: yaml - suit-directive-override-parameters: - suit-parameter-uri: '{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}' + suit-parameter-uri: "{{ application['config']['CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI'] }}" - suit-directive-fetch: - suit-send-record-failure diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_recovery.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_recovery.rst new file mode 100644 index 000000000000..c1dab7cabbd4 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_recovery.rst @@ -0,0 +1,412 @@ +.. _ug_nrf54h20_suit_recovery: + +SUIT Recovery +############# + +.. contents:: + :local: + :depth: 2 + +During the device lifetime, the device can encounter various issues that lead to boot failure. +In such cases, the device must have a mechanism to recover from the failure and continue operating. + +In SUIT, this requirement is addressed by running a specially prepared recovery firmware. +While the recovery firmware requires some additional space on the device, it is a highly recommended feature for all devices utilizing SUIT. + +This document describes scenarios in which an nRF54H20 device using SUIT can enter recovery mode, as well as the recovery process. + +Entering recovery mode +********************** + +When booting the device, the Secure Domain verifies the currently installed manifests and firmware images. +If the verification fails, the device enters recovery mode. +The reasons for validation failure can include, but are not limited to, the following: + +* An invalid manifest signature. +* A mismatch between the digest of the installed firmware image and the digest in the manifest. +* The manifest attempting to perform unauthorized operations. + +These issues can occur in the following scenarios: + +* Tampering by an attacker. +* Bitflips in the MRAM memory caused by radiation or other external conditions. +* Hardware failures in advanced cases where an in-place update is performed, resulting in a partially overwritten firmware image. +* An incorrectly constructed manifest, leading to a successful update but a failure during boot. + +.. caution:: + The last case must never occur in a production environment, but it is possible during development. + The manufacturer must always ensure that the manifest is correctly constructed and that all images managed by SUIT are compatible with each other after the update. + If any bugs are overlooked during the development phase, this could result in inconsistencies in the firmware. + +Recovery Mode and Recovery Manifests +************************************ + +The recovery manifests form a separate hierarchy from the normal manifests. +In this hierarchy, the application recovery (``APP_RECOVERY``) manifest is responsible for managing both the application core image and other manifests, such as the radio recovery manifest. + +The following image shows the recovery manifest topology for the nRF54H20 SoC: + +.. figure:: images/nrf54h20_suit_recovery_manifest_topology.png + :alt: Recovery manifest topology for the nRF54H20 SoC + +If a failure during a boot process occurred, the Secure Domain sets the recovery flag and reboots the device. +Upon each boot the Secure Domain checks if the recovery flag is set. +If it is set, the device enters recovery mode. +If it is not, the boot process continues normally by executing the root manifest. + +After entering the recovery mode it is verified if MPI configuration for the APP_RECOVERY is present. +If it is, the APP_RECOVERY manifest is processed. +If no MPI configuration is found, the Secure Domain attempts to process the normal manufacturer root manifest. +This is needed, as the device might enter recovery mode if it is empty. +The recovery flag is not cleared after flashing the firmware, but the device should proceed as if it would boot normally. + +This flow is shown in the following diagram: + +.. figure:: images/nrf54h20_suit_recovery_boot_path .png + :alt: Booting in recovery mode + +The role of the recovery application is to perform an update of the main application firmware, which does not differ from the normal SUIT update process. +As soon as the update finishes successfully, the recovery flag is cleared and the device proceeds with normal operation. + +.. note:: + The recovery application itself can only be updated from the main application - not when running the recovery application. + +.. _ug_nrf54h20_suit_recovery_default_fw: + +Using the default recovery firmware +*********************************** + +Nordic provides a default recovery firmware that can be used in the recovery process. +This firmware uses Bluetooth LE and SMP as a transport. +It is optimized for memory usage, currently using around 164 kB of MRAM (72 kB of application core and 92 kB radio core). + +To use the firmware: + +1. Create :file:`recovery.overlay` and :file:`recovery_hci_ipc.ovelay` files in the main application's :ref:`configuration_system_overview_sysbuild` directory. + These files must define the ``cpuapp_recovery_partition`` and ``cpurad_recovery_partition`` nodes respectively. + These partitions specify where the images for the recovery firmware are stored and cannot overlap with the main application partitions. + For reference, see the files in the :ref:`SUIT DFU on the nRF54H20 SoC ` sample located in :file:`samples/suit/smp_transfer`. + +#. Set the :kconfig:option:`SB_CONFIG_SUIT_BUILD_RECOVERY` sysbuild configuration option in the main application. + This will cause the recovery firmware to be built automatically as part of the main application build. + +#. :ref:`Program the main application firmware to the device `. + This automatically programs both the main application and the recovery firmware onto the device. + +#. To update the recovery firmware perform an update in the same way as described in :ref:`nrf54h_suit_sample`, however using the recovery firmware envelope. + The envelopes needed for the update are located in the build directory of the main application, by default found in :file:`build/DFU/app_recovery.suit` and :file:`build/DFU/rad_recovery.suit`. + +Further information about the default recovery firmware can be found in :ref:`suit_recovery`. +The code for the default recovery firmware can be found in the :file:`samples/suit/recovery` directory. + +.. _ug_nrf54h20_suit_recovery_update_fw: + +Updating the recovery firmware +****************************** + +To update the recovery firmware you can either use: + +* The APP_RECOVERY envelope, found in :file:`/build/DFU/app_recovery.suit` +* The zip file, found in :file:`/build/zephyr/dfu_suit_recovery.zip`` + +These can be used to update the recovery application the same as :file:`root.suit` or :file:`dfu_suit.zip` are used to update the main application - see :ref:`nrf54h_suit_sample` as an example. + +.. note:: + The recovery application can only be updated from the main application - not when running the recovery application itself. + +.. _ug_nrf54h20_suit_recovery_create_images: + +Creating custom recovery images +******************************* + +To turn an application into a recovery application, the following steps have to be performed: + +1. For each of the images defined by the custom recovery application, ensure the following configuration is present: + + * :kconfig:option:`CONFIG_SUIT_RECOVERY` set to ``y`` + * :kconfig:option:`CONFIG_NRF_REGTOOL_GENERATE_UICR` set to ``n`` + * :kconfig:option:`CONFIG_NRF_REGTOOL_GENERATE_BICR` set to ``n`` + + To do that you can simply paste the following code snippet into your configuration files: + + .. code-block:: cfg + + CONFIG_SUIT_RECOVERY=y + CONFIG_NRF_REGTOOL_GENERATE_UICR=n + CONFIG_NRF_REGTOOL_GENERATE_BICR=n + +#. Create the overlay files to be used by the recovery application. + In this guide it is assumed that for the application core they are placed in the custom recovery application directory in the :file:`boards/nrf54h20dk_nrf54h20_cpuapp.overlay` file. + + The application core recovery image overlay should contain the following code: + + .. code-block:: dts + + / { + chosen { + zephyr,code-partition = &cpuapp_recovery_partition; + nrf,tz-secure-image = &cpuapp_recovery_partition; + }; + }; + + &cpusec_cpuapp_ipc { + status = "okay"; + }; + + &cpusec_bellboard { + status = "okay"; + }; + + Optionally, if using the radio core recovery image, the radio core recovery image overlay should contain the following code: + + .. code-block:: dts + + / { + chosen { + zephyr,code-partition = &cpurad_recovery_partition; + nrf,tz-secure-image = &cpurad_recovery_partition; + }; + }; + +#. Add :file:`sysbuild.cmake` to the custom recovery application directory. + In this file add the following code: + + .. code-block:: cmake + + add_overlay_dts(recovery ${CMAKE_CURRENT_LIST_DIR}/boards/nrf54h20dk_nrf54h20_cpuapp.overlay) + + This will ensure that when building from the main application directory the overlay file is attached to and not overwritten by the configuration coming from the main application. + +#. If you want to add additional images to the recovery image, you can add it with code similar to the one from the default recovery firmware image: + + .. code-block:: cmake + + ExternalZephyrProject_Add( + APPLICATION recovery_hci_ipc + SOURCE_DIR "${ZEPHYR_BASE}/samples/bluetooth/hci_ipc" + BOARD ${BOARD}/${SB_CONFIG_SOC}/${SB_CONFIG_NETCORE_REMOTE_BOARD_TARGET_CPUCLUSTER} + BOARD_REVISION ${BOARD_REVISION} + ) + + add_overlay_config(recovery_hci_ipc ${CMAKE_CURRENT_LIST_DIR}/sysbuild/hci_ipc.conf) + add_overlay_dts(recovery_hci_ipc ${CMAKE_CURRENT_LIST_DIR}/sysbuild/hci_ipc.overlay) + + Replace recovery_hci_ipc, hci_ipc and ``SOURCE_DIR`` with the appropriate values for your application. + + +#. Optionally - you can modify the recovery manifest templates. + The manifest template defined by the ``CONFIG_SUIT_ENVELOPE_TEMPLATE_FILENAME`` is first searched for in :file:`suit/` in the main application directory. + If it is not found, :file:`suit/` in the recovery app is checked. + If the manifest template is still not found, the default template directory in |NCS| is checked (:file:`config/suit/templates`). + +#. Extend the ``SUIT_RECOVERY_APPLICATION`` choice with an option for attaching the custom recovery application. + Then, make the ``SB_CONFIG_SUIT_RECOVERY_APPLICATION_PATH`` point to the custom application path. + This is done by adding the following code to a sysbuild Kconfig file visible by the build system - this can be the :file:`Kconfig.sysbuild` file in the main application directory: + + .. code-block:: kconfig + + if SUIT_BUILD_RECOVERY + + choice SUIT_RECOVERY_APPLICATION + prompt "Select SUIT recovery application" + + config SUIT_RECOVERY_APPLICATION_CUSTOM + bool "Use the custom recovery application" + + endchoice + + config SUIT_RECOVERY_APPLICATION_PATH + string + default "" if SUIT_RECOVERY_APPLICATION_CUSTOM + + endif # SUIT_BUILD_RECOVERY + +.. note:: + ``SUIT_RECOVERY_APPLICATION_CUSTOM`` can be changed to any name that is appropriate for the given application. + +.. note:: + The value of ``SUIT_RECOVERY_APPLICATION_PATH`` can contain variables like ``${ZEPHYR_NRF_MODULE_DIR}`` + +#. When building the main application, set ``SB_CONFIG_SUIT_RECOVERY_APPLICATION_CUSTOM`` (or the Kconfig option name if a different one was chosen) to ``y``. + +.. _ug_nrf54h20_suit_recovery_enter_recovery_request: + +Entering recovery through a request from the local domains +********************************************************** + +Recovery mode can be initiated through a request sent from local domains. +This functionality is useful for several scenarios, including: + +* Device recovery: Provides a recovery mechanism if the main firmware crashes and a J-Link connection is unavailable. +* Foreground updates: Allows the recovery application to function as a "foreground update" application, reducing space requirements for the main application. +* Application debugging: Facilitates debugging of the recovery application. + +For an exemplary implementation, see :ref:`Entering recovery through button press `, which implements such a request-based entry. +The source code of this feature is available in the :file:`nrf/subsys/suit/app_tools/recovery_button` directory. + +To request the device to enter recovery mode, invoke the ``suit_foreground_dfu_required()`` function. + +To exit recovery mode, invoke the ``suit_boot_flags_reset()`` function from the recovery application. +If the main application firmware is corrupted, the device will re-enter recovery mode on the next boot, regardless of attempts to reset the boot flags. + +"Enter recovery check" by running recovery firmware (companion image) before the main application +================================================================================================= + +In specific scenarios, the device must determine whether to enter recovery mode before starting the main application. +For example, a developer might require the device to enter recovery mode if a specific button is pressed during boot. + +To achieve this, you can configure the recovery application as a companion image in the invocation path preceding the main application. +Although other companion images can fulfill this purpose, the recovery application is the most commonly used option. +Using the recovery application as a companion simplifies the system by enabling the recovery firmware to serve multiple purposes. + +The recovery (companion) application can check if the device should enter recovery mode and set the recovery flag using ``suit_foreground_dfu_required()`` if needed. +You must ensure that this is only performed when the device is in the ``SUIT_BOOT_MODE_INVOKE`` boot mode. +The current boot mode can be determined using the ``suit_boot_mode_read`` function. + +If the device should remain in normal boot mode (for example, the condition is not met) or if the device is already in recovery mode, the firmware should call ``suit_invoke_confirm(0)``. +This ensures that the SUIT manifest is processed further by the Secure Domain Firmware, allowing the main application to boot. + +To enable this feature, perform the following steps: + +.. note:: + This assumes that the companion image is orchestrated by the ``APP_LOCAL_3`` SUIT manifest, which is the default configuration when using the recovery firmware as the companion. + + +1. Add the appropriate checking code to the recovery (companion) application in its startup code. + Use the following code snippet as a reference: + + .. code-block:: c + + static int should_enter_recovery_check(void) + { + suit_boot_mode_t mode = SUIT_BOOT_MODE_INVOKE_RECOVERY; + suit_ssf_err_t err = SUIT_PLAT_SUCCESS; + int ret = 0; + + err = suit_boot_mode_read(&mode); + + if (err != SUIT_PLAT_SUCCESS) { + suit_invoke_confirm(-EPIPE); + return -EPIPE; + } + + if (mode == SUIT_BOOT_MODE_INVOKE) { + if (/* add the condition here */) { + err = suit_foreground_dfu_required(); + } + } + + if (err != SUIT_PLAT_SUCCESS) { + ret = -EPIPE; + } + + (void)suit_invoke_confirm(ret); + + return ret; + } + + SYS_INIT(should_enter_recovery_check, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); + + You must place the code in the recovery (companion) application's source code. + To implement this, you can do one of the following: + + * Create a module with the code snippet and integrate it into the Nordic-provided recovery application. + * Create a custom recovery application or companion image and include the module there. + +2. If using the default SUIT manifests and running the recovery image as the companion image, no modifications to the manifest templates are needed. + Instead, set the :kconfig:option:`CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP` option in the recovery image. + To do so, add ``-Drecovery_CONFIG_SUIT_INVOKE_APP_LOCAL_3_BEFORE_MAIN_APP=y`` to the build command when building the recovery application. + + If you are not using the default SUIT maifests, you must modify the manifest templates as follows: + + a. In the ``APP_LOCAL_3`` manifest template, add the following code before the ``suit-directive-invoke`` directive on the companion image: + + .. code-block:: yaml + + - suit-directive-override-parameters: + suit-parameter-invoke-args: + suit-synchronous-invoke: True + suit-timeout: 1000 + + b. In the root manifest template, add the ``INSTLD_MFST`` component for the local manifest orchestrating the comapanion image. + You must ensure it is invoked before the main application images. + If the modified template is based on the root manifest template from the |NCS|, it will in most cases be enough to add it as the first manifest in the component list. + The following code snippet is responsible for this in the default root manifest template: + + .. code-block:: yaml + + {{- component_list.append( app_recovery_local_component_index ) or ""}} + - - INSTLD_MFST + - RFC4122_UUID: + namespace: {{ mpi_app_recovery_local_vendor_name }} + name: {{ mpi_app_recovery_local_class_name }} + + +.. _ug_nrf54h20_suit_recovery_enter_through_button: + +Entering recovery mode through button press +=========================================== + +A common use case for entering recovery mode is to allow the device to enter recovery mode by pressing a button. +In the |NCS|, this use case is provided as a simple plug-and-play solution. +When it is enabled, the device will enter recovery mode if the button is pressed during boot. + +.. note:: + If no modifications or additional modules are added to the recovery application, the only way to exit the recovery mode is by performing a device firmware upgrade. + +There are two variants of this feature: + +* The recovery button checked in the recovery application running as a companion image during the boot stage (recommended). +* The recovery button checked in the main application. + +The first variant is recommended because it allows the check to be performed independently of the main application. + +Recovery button checked in the recovery application +--------------------------------------------------- + +In this variant, the recovery application is executed as a companion image before the main application as part of the normal invocation path. + +The recovery application checks whether the device is already in recovery mode. +If the device is in recovery mode, the recovery application continues its normal operation, enabling firmware recovery. + +If the device is not in recovery mode, the recovery application checks whether the specified button is pressed. +If the button is pressed, the recovery application sets the recovery flag and reboots the device. +Otherwise, it sends a confirmation message to the Secure Domain Firmware, which then halts the recovery application and proceeds with booting the main application. + +To enable the feature, add the following code to the :file:`sysbuild/recovery.overlay` file in the main application directory: + + .. code-block:: dts + + / { + chosen { + ncs,recovery-button = &button0; + }; + }; + + Replace ``button0`` with the appropriate button node. + + +.. note:: + In this option, running the recovery application as a companion image is orchestrated by the root SUIT manifest. + Special care must be taken if the root manifest template is modified. + Incorrect modifications to the root manifest can result in the button press feature not functioning correctly. + This may cause the device to become unrecoverable without a JLink connection in the event of a crash. + + +Recovery button checked in the main application +----------------------------------------------- + +In this variant, a check is performed within the main application firmware at an early stage to determine if the specified button is pressed. +If the button is pressed, the recovery flag is set, and the device reboots. + +To enable this feature in this variant, add the following overlay to the main application's configuration: + + .. code-block:: dts + + / { + chosen { + ncs,recovery-button = &button0; + }; + }; + + Replace ``button0`` with the appropriate button node. diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_sdfw_sdrfw_update.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_sdfw_sdrfw_update.rst new file mode 100644 index 000000000000..a348ce9dbf2f --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_sdfw_sdrfw_update.rst @@ -0,0 +1,58 @@ +.. _ug_nrf54h20_suit_sdfw_sdrfw_update: + +Secure Domain Firmware Update +############################# + +.. contents:: + :local: + :depth: 2 + + +Both the Secure Domain Firmware (SDFW) and the Secure Domain Recovery Firmware (SDRFW) are launched on a core responsible for establishing the Root of Trust as a Secure Domain. +Due to security requirements, the update process for these binaries differs significantly from regular updates in local domains. + +To ensure that trusted execution can be established on the device, a valid SDRFW must be present on the device before performing a SDFW update. +An update is initiated only if the update candidate is verified by the Secure Domain ROM (SDROM) using a key that matches the requested update type. + +.. note:: + The bundle that the user programs already contains both SDFW image and SDRFW image. + +The SUIT framework allows flexible firmware launching and updating while keeping parts of the codebase unmodifiable by end users. +A common approach is to use a platform-specific layer that maps firmware blocks to device memory ranges, simplifying updates for basic systems. +Manifests can describe actions required to launch or update each firmware block. +In the nRF54H20, this approach is used in some areas, but the SDFW and the SDRFW require the SDROM to handle launching and updates, rather than direct copying to a destination address. + + +Implementation +************** + +SUIT manifests use components to define executable or updatable entities. +On a given platform, components may have different characteristics that require varied approaches for launching or updating (for example, execution in place instead of copying to RAM). + +As described in :ref:`suit_component_types`, a special SUIT component type (``SOC_SPEC``) describes components that are controlled by Nordic Semiconductor. + +For the nRF54H20 SoC, there are two components of this type: one for the SDFW and the other for the SDRFW. +These are identified by component IDs 1 and 2, respectively: + +* ``SOC_SPEC/1`` - Secure Domain Firmware +* ``SOC_SPEC/2`` - Secure Domain Recovery Firmware + +As shown in :ref:`suit_default_manifest_topology_for_the_nrf54h20_soc`, both components are included in a single SUIT manifest. +This manifest is managed by the ``Nordic top`` manifest, which is, in turn, controlled by the ``Root`` manifest. + +Update process +************** + +The update process begins by attempting to update the SDRFW image. +If this update fails, the process still proceeds with updating the SDFW. +To prevent ambiguity if one slot update fails while the other succeeds, the manifest version reflects the version of the SDFW. + +.. note:: + Every update attempt involves system reboot. As a result, multiple passes through the root manifest during update sequences are expected. + +.. figure:: images/nrf54h20_suit_sdfw_sdrfw_update_flow.svg + :alt: Secure Domain Firmware and Secure Domain Recovery Firmware update flow + + Update flow for the Secure Domain Firmware and the Secure Domain Recovery Firmware + +More information about strategy, configuration and update of Nordic components can be found under :ref:`ug_nrf54h20_suit_soc_binaries`. diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_smp.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_smp.rst new file mode 100644 index 000000000000..1382ca7fb327 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_smp.rst @@ -0,0 +1,467 @@ +.. _ug_nrf54h20_suit_smp: + +SUIT and SMP protocol (including SUIT SMP extension) +#################################################### + +.. contents:: + :local: + :depth: 2 + +SUIT DFU offers a flexible and extensible update process. +You can use the Zephyr management subsystem, through the Simple Management Protocol (SMP) protocol, to manage SUIT-based images alongside existing MCUboot images. + +Slots and images in Zephyr +========================== + +In the |NCS|, *slot* and *image* concepts are derived from MCUboot. +An *image* consists of two slots: a *primary* and a *secondary*. +The application runs from the primary slot, while updates are uploaded to the secondary slot. +MCUboot is responsible for swapping these slots during boot. + +The slots support a single upgradable application, with equal sizes. +Zephyr supports up to two images, each represented by an index. + +.. note:: + Image metadata, such as version information, is embedded within the image payload. + +Components in SUIT +================== + +SUIT defines a *component* as an updatable logical block, which can be firmware, software, configuration, or data. +This is similar to how MCUmgr defines an *image*. +Updates are delivered to the device as a SUIT *envelope*, containing SUIT manifests and, optionally, integrated payloads. +The relationships between components are maintained through SUIT manifests. + +Metadata, such as version information, expected image digest, and image size is embedded into the SUIT manifest. + +MCUmgr and SUIT - key similarities and differences +=================================================== + +The following table summarizes key similarities and differences between MCUmgr and SUIT: + ++-----------------------------+-------------------------+----------------------------------+ +| Feature | MCUmgr | SUIT | ++=============================+=========================+==================================+ +| Metadata | Attached to the images | Defined by a separate SUIT | +| | | manifest | ++-----------------------------+-------------------------+----------------------------------+ +| Image Topology | Slots (primary, | Manifests organized into | +| | secondary) organized as | a hierarchical tree | +| | a list | | ++-----------------------------+-------------------------+----------------------------------+ +| Slot/Image Configuration | Slots defined in | Slot definitions can be modified | +| | MCUboot; difficult to | through the SUIT manifest, | +| | change after deployment | allowing greater flexibility | ++-----------------------------+-------------------------+----------------------------------+ +| Installation/Boot | Limited by static | Customizable through SUIT | +| Customization | image metadata | manifest commands | ++-----------------------------+-------------------------+----------------------------------+ +| State information | Embedded within the | Update candidate existence is | +| | image slot metadata | represented within the SUIT | +| | | manifest | ++-----------------------------+-------------------------+----------------------------------+ + +SUIT in SMP image management group +================================== + +The SMP protocol can provide SMP-based SUIT image management, assuming that even a complex SUIT-based system can be represented as a *single image* system. +In this model, the contents of the *primary slot* of image 0 represent the currently installed SUIT root manifest, while the secondary slot of image 0 holds the update candidate root manifest. +For more information on images and slots in Zephyr, see :ref:`zephyr:mcumgr_smp_group_1` + + +Get state of images request +--------------------------- + +This command retrieves images and their states. +The response is in CBOR format: + +.. code-block:: + + { + (str)"images" : [ + { + (str,opt)"image" : (int) //SUIT - always 0. + (str)"slot" : (int) //SUIT - 0 - "primary" - installed Root manifest, 1 - update candidate manifest in the DFU partition. + (str)"version" : (str) //SUIT - sequence-number from root manifest. + (str)"hash" : (byte str) //SUIT - digest of root manifest. + } + ... + ]} + +Image upload request +-------------------- + +This command uploads an image containing a SUIT envelope to be stored in the DFU partition or a dump of the DFU cache partition. +The CBOR data format is the following: + +.. code-block:: + + { + (str,opt)"image" : (uint) //SUIT - 0 - DFU partition, 1 to n - DFU cache partition 0 to n-1. + (str,opt)"len" : (uint) + (str)"off" : (uint) + (str,opt)"data" : (byte str) + } + +Set state of images request +--------------------------- + +This command triggers an installation process using the SUIT envelope stored in the DFU partition. +The CBOR data format is the following: + +.. code-block:: + + { + (str)"confirm" : (bool) //Must be set to "true". + } + +SUIT SMP protocol extension +=========================== + +The existing image management approach works well for basic scenarios involving single-step SUIT envelope pushes. +More advanced scenarios require defining a new SMP management group. + +Management Group ID +------------------- + +The new SUIT SMP protocol uses ``MGMT_GROUP_ID_PERUSER + 2`` (for example, 66). + +Commands +-------- + +Get SUIT manifests list request +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This command allows retrieving information about the roles of manifests supported by the device. +The SUIT SMP operation code (OP) and command ID are the following: + +* ``OP: MGMT_OP_READ (0), MGMT_OP_READ_RSP(1)`` +* ``Command ID: 0`` + +CBOR data of successful response: + +.. code-block:: + + { + (str)"rc" : (uint) + (str)"manifests" : [ + { + (str)"role" : (uint) + } + ] + } + +where: + +* *role* - Manifest role encoded as two nibbles: ` `. + +* *rc* - Return code: + + * *MGMT_ERR_ENOTSUP* - Unsupported command. + * *MGMT_ERR_EMSGSIZE* - Device was unable to encode the answer. + +Get SUIT manifest state request +------------------------------- + +This command allows you to get information about the configuration of supported manifests and selected attributes of installed manifests of a specified role. +The SUIT SMP operation code (OP) and command ID are the following: + +* ``OP: MGMT_OP_READ (0), MGMT_OP_READ_RSP(1)`` +* ``Command ID: 1`` + +CBOR data of request: + +.. code-block:: + + { + (str)"role" : (uint) + } + +where: + +* *role* - Manifest role, one of the values returned by Get SUIT Manifests List Request. + +CBOR data of successful response: + +.. code-block:: + + { + (str)"rc" : (uint) + (str)"class_id" : (byte str) + (str)"vendor_id" : (byte str) + (str)"downgrade_prevention_policy" : (uint) + (str)"independent_updateability_policy" : (uint) + (str)"signature_verification_policy" : (uint) + (str, opt)"digest" : (byte str) + (str, opt)"digest_algorithm" : (int) + (str, opt)"signature_check" : (uint) + (str, opt)"sequence_number" : (uint) + (str, opt)"semantic_version" : [0*5 int] + } + +where: + +* *class_id* - UUID representing a given manifest type. +* *vendor_id* - Vendor ID, manifest class ID was generated in the space of this value. +* *downgrade_prevention_policy* - Downgrade prevention policy of the given supported manifest. +* *independent_updateability_policy* - Indicates whether the given supported manifest be updated independently. +* *signature_verification_policy* - Configured signature verification policy of a given manifest. +* *digest* - Digest of manifest carried in respective manifest authentication block. + If the digest calculated on manifest content does not match the digest stored in the respective manifest authentication block, it is assumed that the manifest is not installed or corrupted. + In such cases, the response will not contain the 'digest' field, and the remaining fields will not contain any meaningful information. +* *digest_algorithm* - See ietf-suit-manifest, cose-alg-sha-256 = -16, cose-alg-sha-512 = -44,… +* *signature_check* - Signature check status. +* *sequence_number* - Value taken from the respective field of the manifest. +* *semantic_version* - An array of up to 5 integers, taken from the respective field of the manifest, allowing expression of the semantic version, for example, 1.17.5-rc.2. + +* *rc* - Return code: + + * *MGMT_ERR_ENOTSUP* - Unsupported command. + * *MGMT_ERR_EMSGSIZE* - The device was unable to encode the answer. + +Example of human-readable response using Get SUIT Manifests List Request and Get SUIT Manifest State Request(s): + +.. code-block:: shell + + ./newtmgr -c serial0 suit manifests + Manifests: + + class ID: 3f6a3a4d-cdfa-58c5-acce-f9f584c41124 (nRF54H20_sample_root) + vendor ID: 7617daa5-71fd-5a85-8f94-e28d735ce9f4 (nordicsemi.com) + role: 0x20 (Root Manifest) + digest: d0b69723..15d7140d (sha-256) + signature check passed + sequence number: 2 + semantic version: 1.17.5-rc.2 + + class ID: 00112233-4455-5577-8899-aabbccddeeff + vendor ID: 00110011-0011-0011-0011-001100110011 + role: 0x21 (Application Recovery Manifest) + Manifest not installed or damaged! + +Candidate envelope upload request +--------------------------------- + +The command delivers a SUIT envelope to the device. +Once the upload is completed, the device validates the delivered envelope and starts SUIT processing. +The SUIT SMP operation code (OP) and command ID are the following: + +* ``OP: MGMT_OP_WRITE (2), MGMT_OP_WRITE_RSP(3)`` +* ``Command ID: 2`` + +CBOR data of request: + +.. code-block:: + + { + (str,opt)"len" : (uint) + (str,opt)"defer_install" : (bool) + (str)"off" : (uint) + (str)"data" : (byte str) + } + +where: + +* *len* - Length of an envelope. + Must be provided with the first chunk when "off" is 0. +* *defer_install* - Evaluated by the device on the first delivered chunk when "off" is 0. + When set, it indicates that envelope processing must NOT be triggered upon envelope delivery. +* *off* - Offset of the envelope chunk the request carries. +* *data* - Image chunk to be stored at the provided offset. + +.. note:: + Request with len = 0, defer_install != true, off = 0 may be utilized to trigger processing on an already delivered envelope. + +CBOR data of response: + +.. code-block:: + + { + (str)"rc" : (uint) + (str)"off" : (uint) + } + +where: + +* *off* - Position of the "write pointer" after the operation. +* *rc* - Return code. + The following values represent unrecoverable errors; once an SMP client receives any of these, it must stop the current transfer: + + * *MGMT_ERR_EBADSTATE* - Possible reason - device reboot occurred in the middle of the transfer. + * *MGMT_ERR_ENOENT* - DFU partition not found. + * *MGMT_ERR_EINVAL* - The requested data structure cannot be decoded or incorrect information in the request was detected. + * *MGMT_ERR_ENOMEM* - Not enough space to store the image. + * *MGMT_ERR_ENOTSUP* - Unsupported command. + + The following errors are possibly recoverable: + + * *MGMT_ERR_EMSGSIZE* - The device was unable to encode the answer. + * *MGMT_ERR_EUNKNOWN* - Issues with NVM erase/write operations. + + +Get missing image state request +------------------------------- + +This SUIT command sequence can conditionally execute directives based, for example, on the digest of the installed image. +This allows for the SUIT candidate envelope to contain only SUIT manifests, and the images required to be updated are fetched by the device only if necessary. +In that case, the device informs the SMP client that a specific image is required, and then the SMP client delivers the requested image in chunks. +Due to the fact that SMP is designed in a client-server pattern and lacks server-sent notifications, the implementation is based on polling. +The SUIT SMP operation code (OP) and command ID are the following: + +* ``OP: MGMT_OP_READ (0), MGMT_OP_READ_RSP(1)`` +* ``Command ID: 3`` + +CBOR data of response: + +.. code-block:: + + { + (str)"rc" : (uint) + (str,opt)"stream_session_id" : (uint) + (str,opt)"resource_id" : (byte str) + } + +where: + +* *resource_id* - Resource identifier, typically in the form of a URI. +* *stream_session_id* - Session identifier. + Non-zero value, unique for image request, not provided if there is no pending image request. +* *rc* - Return code: + + * *MGMT_ERR_ENOTSUP* - Unsupported command. + * *MGMT_ERR_EMSGSIZE* - The device was unable to encode the answer. + +Image upload request +-------------------- + +This command delivers a requested image to the device. +The SUIT SMP operation code (OP) and command ID are the following: + +* ``OP: MGMT_OP_WRITE (2), MGMT_OP_WRITE_RSP(3)`` +* ``Command ID: 4`` + +CBOR data of request: + +.. code-block:: + + { + (str,opt)"stream_session_id" : (uint) + (str,opt)"len" : (uint) + (str)"off" : (uint) + (str)"data" : (byte str) + } + +where: + +* *stream_session_id* - Session identifier. + The same value as obtained using Get Missing Image Info Request. + Must appear when "off" is 0. +* *len* - Length of an image. + Must appear when "off" is 0. +* *off* - Offset of the image chunk the request carries. +* *data* - Image chunk to be stored at the provided offset. + +CBOR data of response: + +.. code-block:: + + { + (str)"rc" : (uint) + (str)"off" : (uint) + } + +where: + +* *off* - Offset of the last successfully written byte of the candidate envelope. +* *rc* - Return code. + The following values represent unrecoverable errors; once an SMP client receives any of these, it must stop the current transfer: + + * *MGMT_ERR_EBADSTATE* - Possible reasons - device reboot occurred in the middle of the transfer. + * *MGMT_ERR_EINVAL* - The requested data structure cannot be decoded or incorrect information in the request was detected. + * *MGMT_ERR_ENOMEM* - Not enough space to store the image. + * *MGMT_ERR_ENOTSUP* - Unsupported command. + + The following errors are possibly recoverable: + + * *MGMT_ERR_EMSGSIZE* - The device was unable to encode the answer. + * *MGMT_ERR_EUNKNOWN* - Issues with the NVM erase/write operations. + +Cache raw image upload request +------------------------------ + +This command delivers a requested image to the device. +The SUIT SMP operation code (OP) and command ID are the following: + +* ``OP: MGMT_OP_WRITE (2), MGMT_OP_WRITE_RSP(3)`` +* ``Command ID: 5`` + +CBOR data of request: + +.. code-block:: + + { + (str,opt)"target_id" : (uint) + (str,opt)"len" : (uint) + (str)"off" : (uint) + (str)"data" : (byte str) + } + +where: + +* *target_id* - Cache pool identifier. + Must appear when "off" is 0. +* *len* - Length of an image. + Must appear when "off" is 0. +* *off* - Offset of the image chunk the request carries. +* *data* - Image chunk to be stored at the provided offset. + +CBOR data of response: + +.. code-block:: + + { + (str)"rc" : (uint) + (str)"off" : (uint) + } + +where: + +* *off* - Offset of the last successfully written byte of the candidate envelope. +* *rc* - Return code. + The following values represent unrecoverable errors; once an SMP client receives any of these, it must stop the current transfer: + + * *MGMT_ERR_EBADSTATE* - Possible reason - device reboot occurred in the middle of the transfer. + * *MGMT_ERR_ENOENT* - Cache pool not found. + dfu_cache_partition_n not defined in device DTS, or, for cache pool 0, dfu_partition not defined in DTS or candidate envelope not stored in dfu partition. + * *MGMT_ERR_EINVAL* - The requested data structure cannot be decoded or incorrect information in the request was detected. + * *MGMT_ERR_ENOMEM* - Not enough space to store the image. + * *MGMT_ERR_ENOTSUP* - Unsupported command. + + The following errors are possibly recoverable: + + * *MGMT_ERR_EMSGSIZE* - The device was unable to encode the answer. + * *MGMT_ERR_EUNKNOWN* - Some issues with NVM erase/write operations. + +Cleanup request +--------------- + +This command erases the DFU partition and DFU cache partitions. +The SUIT SMP operation code (OP) and command ID are the following: + +* ``OP: MGMT_OP_WRITE (2), MGMT_OP_WRITE_RSP(3)`` +* ``Command ID: 6`` + +CBOR data of response: + +.. code-block:: + + { + (str)"rc" : (uint) + } + +where: + +* *rc* - Return code: + + * *MGMT_ERR_ENOTSUP* - Unsupported command. + * *MGMT_ERR_EMSGSIZE* - The device was unable to encode the answer. diff --git a/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_soc_binaries.rst b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_soc_binaries.rst new file mode 100644 index 000000000000..75a527ae1b5b --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54h/ug_nrf54h20_suit_soc_binaries.rst @@ -0,0 +1,78 @@ +.. _ug_nrf54h20_suit_soc_binaries: + +Upgrade the nRF54H20 SoC binaries with SUIT +########################################### + +.. contents:: + :local: + :depth: 2 + +The nRF54H20 SoC includes the *nRF54H20 SoC binaries*, precompiled firmware components provided by Nordic Semiconductor that provide basic functionality and security features. + +To see which version of the nRF54H20 SoC binaries to use with the given version of the nRF Connect SDK, see :ref:`abi_compatibility`. + +Updating the nRF54H20 SoC binaries +********************************** + +You can update the nRF54H20 SoC binaries in two ways. +Both methods require using the :file:`nordic_top.suit` envelope, available inside the nRF54H20 SoC binaries ZIP package. + +The two methods for updating are the following: + +* Updating the SoC binaries without the manufacturer application. + +* Updating along with the manufacturer application by attaching the :file:`nordic_top.suit` envelope to the manufacturer root manifest, updating both the SoC binaries and the manufacturer's application simultaneously. + + +Updating the nRF54H20 SoC binaries without the manufacturer application +======================================================================= + +When using this method, you perform two updates: + +1. An update using a manufacturer envelope that contains the update candidate. +2. A second update provided by the :file:`nordic_top.suit` envelope from the SoC binaries bundle. + +Each envelope contains all the necessary information, allowing the device to differentiate between the two updates. + +This approach offers the following benefits: + +* The update candidate requires a smaller partition. +* There is no need to integrate the process of downloading Nordic artifacts into the manufacturer application build process. +* There is no need to update the version and sequence number of the manufacturer root manifest when you update only the SoC binaries. + +However, there are the following limitations: + +* This method requires two updates, which is not supported by all protocols. +* The manufacturer envelope cannot ensure the compatibility of SoC binaries with the manufacturer application. + +.. _ug_nrf54h20_suit_soc_binaries_root_in_manufacturer: + +Attaching the nordic_top.suit envelope to the manufacturer root manifest +======================================================================== + +When building an application, you can configure the build system to include the Nordic components inside the SUIT root envelope used for updates. + +This approach has the following benefits: + +* You can perform the entire update by pushing a single image to the device, which some protocols may require. +* You can use the manufacturer root manifest to manage dependencies between the manufacturer application and the SoC binaries. + +This approach has the following drawbacks: + +* You need a larger partition to store the update candidate since both the manufacturer application and the SoC binaries must fit within it. +* The manufacturer must integrate the process of downloading Nordic artifacts into the update package creation process. + +To build and perform an update using this method, do the following: + +1. Unpack the SoC binaries ZIP file to a directory of your choice. + One of the extracted files will be the :file:`nordic_top.suit` envelope. + +2. Build the application, pointing to the directory containing the :file:`nordic_top.suit` envelope. + To do this, set the ``SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY`` sysbuild configuration option. + For example:: + + west build -b nrf54h20dk/nrf54h20/cpuapp -- -DSB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY="\"\"" + + Replace ```` with the path to the directory containing the extracted :file:`nordic_top.suit` file. + +3. Use the :file:`build/DFU/root.suit` file generated by the build system to update both the manufacturer application and the SoC binaries. diff --git a/doc/nrf/app_dev/device_guides/nrf54l/building_nrf54l.rst b/doc/nrf/app_dev/device_guides/nrf54l/building_nrf54l.rst new file mode 100644 index 000000000000..e93b1859cf09 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54l/building_nrf54l.rst @@ -0,0 +1,142 @@ +.. _building_nrf54l: + +Building and programming with nRF54L15 DK +######################################### + +.. contents:: + :local: + :depth: 2 + +.. note:: + The FLPR core support in the |NCS| is currently :ref:`experimental`. + Additionally, it is not yet available for the nRF54L05 and nRF54L10 SoCs. + +This guide provides instructions on how to build and program the nRF54L15 development kit. +Whether you are working with single or multi-image builds, the following sections will guide you through the necessary steps. + +Depending on the sample, you must program only the application core or both the Fast Lightweight Peripheral Processor (FLPR) and the application core. +Additionally, the process will differ based on whether you are working with a single-image or multi-image build. + +.. note:: + The following instructions do not include multi-image single-core builds scenario. + +Building for the application core only +************************************** + +Building for the application core only follows the default building process for the |NCS|. +For instructions, see how the :ref:`building` page. + +.. _building_nrf54l_app_flpr_core: + +Building for the application and FLPR core +****************************************** + +Building for both the application and the FLPR cores is different from the default |NCS| procedure. +Using the FLPR core also requires additional configuration to enable it. +This section outlines how to build and program for both the application and FLPR core, covering separate builds and sysbuild configurations. +The FLPR core supports two variants: + +* ``nrf54l15dk/nrf54l15/cpuflpr``, where FLPR runs from SRAM, which is the recommended method. + To build FLPR image with this variant, the application core image must include the ``nordic-flpr`` :ref:`snippet `. + +* ``nrf54l15dk/nrf54l15/cpuflpr/xip``, where FLPR runs from RRAM. + To build FLPR image with this variant, the application core image must include the ``nordic-flpr-xip`` snippet. + +Standard build +-------------- + +This subsection focuses on how to build an application using :ref:`sysbuild `. + +.. note:: + Currently, the documentation does not cover specific instructions for building an application image that uses sysbuild to incorporate the FLPR core as a sub-image. + The only documented scenario is for building FLPR as the main image and the application as a sub-image. + +Complete the following steps: + +.. tabs:: + + .. group-tab:: Using minimal sample for VPR bootstrapping + + This option automatically programs the FLPR core with :ref:`dedicated bootstrapping firmware `. + + To build and flash both images, run the following command that performs a :ref:`pristine build `: + + .. code-block:: console + + west build -p -b nrf54l15dk/nrf54l15/cpuflpr + west flash + + .. group-tab:: Using application that supports multi-image builds + + If your application involves creating custom images for both the application core and the FLPR core, make sure to disable the VPR bootstrapping sample. + You can do this by disabling the ``SB_CONFIG_VPR_LAUNCHER`` option when building for the FLPR target. + For more details, see :ref:`how to configure Kconfig `. + + To build and flash both images, run the following command that performs a :ref:`pristine build `: + + .. code-block:: console + + west build -p -b nrf54l15dk/nrf54l15/cpuflpr -- -DSB_CONFIG_VPR_LAUNCHER=n + west flash + +Separate images +--------------- + +You can build and program application sample and the FLPR sample as separate images using the |nRFVSC| or command line. +To use nRF Util, see `Programming application firmware on the nRF54L15 SoC`_. +Depending on the selected method, complete the following steps: + +.. tabs:: + + .. group-tab:: nRF Connect for VS Code + + .. note:: + + The |nRFVSC| currently offers experimental support for the nRF54L15's FLPR core. + Certain features, particularly debugging, may not function as expected. + + .. include:: /includes/vsc_build_and_run.txt + + 3. Build the application image by setting the following options: + + * Board target to ``nrf54l15dk/nrf54l15/cpuapp``. + * Choose either ``nordic-flpr`` or ``nordic-flpr-xip`` snippet depending on the FLPR image target. + * System build to :guilabel:`No sysbuild`. + + For more information, see :ref:`cmake_options`. + + #. Build the FLPR image by setting the following options: + + * Board target to ``nrf54l15dk/nrf54l15/cpuflpr`` (recommended) or ``nrf54l15dk/nrf54l15/cpuflpr/xip``. + * System build to :guilabel:`No sysbuild`. + + For more information, see :ref:`cmake_options`. + + .. group-tab:: Command line + + 1. |open_terminal_window_with_environment| + #. Build the application core image, and based on your build target include the appropriate snippet: + + .. code-block:: console + + west build -p -b nrf54l15dk/nrf54l15/cpuapp -S nordic-flpr --no-sysbuild + + #. Program the application core image by running the `west flash` command :ref:`without --erase `. + + .. code-block:: console + + west flash + + #. Build the FLPR core image: + + .. code-block:: console + + west build -p -b nrf54l15dk/nrf54l15/cpuflpr --no-sysbuild + + You can also customize the command for additional options, by adding :ref:`build parameters `. + + #. Once you have successfully built the FLPR core image, program it by running the `west flash` command :ref:`without --erase `. + + .. code-block:: console + + west flash diff --git a/doc/nrf/app_dev/device_guides/nrf54l/cryptography.rst b/doc/nrf/app_dev/device_guides/nrf54l/cryptography.rst index 27ab16e5e9e5..fd958695d073 100644 --- a/doc/nrf/app_dev/device_guides/nrf54l/cryptography.rst +++ b/doc/nrf/app_dev/device_guides/nrf54l/cryptography.rst @@ -10,7 +10,7 @@ nRF54L Series cryptography The cryptographic peripherals of the nRF54L Series are supported through a set of standard PSA Crypto APIs, with some additional vendor-specific extensions. The nRF Security library offers a set of :ref:`nrf_security_drivers`. -On the nRF54L devices, in addition to the nrf_oberon driver covering the software-based cryptography implementations, the CRACEN driver (nrf_cracen) provides entropy and hardware-accelerated cryptography using the Crypto Accelerator Engine (CRACEN) peripheral. +On nRF54L Series devices, the CRACEN driver (nrf_cracen) provides entropy and hardware-accelerated cryptography using the Crypto Accelerator Engine (CRACEN) peripheral. The CRACEN PSA driver supports the following: * Executing cryptographic operations using the CRACEN peripheral. @@ -20,13 +20,23 @@ The CRACEN PSA driver supports the following: The keys that are stored in the KMU or generated by the IKG are referenced using the built-in keys that are key IDs in the range from ``MBEDTLS_PSA_KEY_ID_BUILTIN_MIN`` to and including ``MBEDTLS_PSA_KEY_ID_BUILTIN_MAX``. +.. _ug_nrf54l_crypto_kmu_cracen_peripherals: + KMU and CRACEN peripherals ************************** The nRF54L Series Crypto Accelerator Engine (CRACEN) and the Key Management Unit (KMU) peripherals, along with the CRACEN PSA driver, are central when ensuring that the assets of an nRF54L device are protected. -While CRACEN is not accessed by the CPU and typically not directly used by the end-users and their applications, the KMU provides operations to import, use, revoke, and/or delete assets. +While CRACEN is not accessed by the CPU and typically not directly used by the end-users and their applications, the KMU provides operations to import, use, revoke, or delete assets. Only the KMU is able to push assets to CRACEN's protected RAM and the SEED register. +.. note:: + CRACEN relies on microcode for asymmetric cryptography operations like signature validation. + On the nRF54L15, nRF54L10, and nRF54L05 devices, this microcode must be uploaded to a special CRACEN RAM area before first use and after each reset. + + If a bootloader uploads this microcode, there is no need to re-upload it for application use. + This saves approximately 5 KB in the crypto driver code. + See the :ref:`ug_nrf54l_crypto_configuration` section for more information. + The KMU can store cryptographic keys and 384-bit random seeds for the IKG in key storage slots. The CRACEN PSA driver exposes the KMU operations through standard PSA Crypto API calls, with some vendor-specific extensions. The following KMU operations are supported: @@ -123,13 +133,14 @@ IKG keys are also accessed using the standard PSA Crypto APIs, and are reference +=================+=====================================+===================================================+ | ECC secp256r1 | ``CRACEN_BUILTIN_IDENTITY_KEY_ID`` | Used for signing/verification. | +-----------------+-------------------------------------+---------------------------------------------------+ -| AES 256-bit | ``CRACEN_BUILTIN_MKEK_ID`` | Used for encryption/decryption or key derivation. | +| AES 256-bit | ``CRACEN_BUILTIN_MKEK_ID`` | Used for key derivation. | +-----------------+-------------------------------------+---------------------------------------------------+ -| AES 256-bit | ``CRACEN_BUILTIN_MEXT_ID`` | Used for encryption/decryption or key derivation. | +| AES 256-bit | ``CRACEN_BUILTIN_MEXT_ID`` | Used for key derivation. | +-----------------+-------------------------------------+---------------------------------------------------+ The keys are not exportable, except for the public key associated with the asymmetric key. +.. _ug_nrf54l_crypto_kmu_key_programming_model: Programming model for referencing keys ************************************** @@ -252,11 +263,19 @@ The following table lists all key types that can be stored in the KMU, indicatin - Yes * - ED25519 public key - | ``key_type``: ``PSA_KEY_TYPE_ECC_PUBLIC_KEY(PSA_ECC_FAMILY_TWISTED_EDWARDS)`` - | ``key bits``: 255 + | ``key_bits``: 255 - 2 - No - Yes - Yes + * - HMAC SHA-256 128-bit keys + - | ``key_type``: ``PSA_KEY_TYPE_HMAC`` + | ``key_bits``: 128 + | ``key_algorithm``: ``PSA_ALG_HMAC(PSA_ALG_SHA_256)`` + - 1 + - No + - No + - Yes .. [1] Keys with the Encrypted usage scheme (``CRACEN_KMU_KEY_USAGE_SCHEME_ENCRYPTED``) will require two additional KMU slots to store the nonce and the authentication tag. Storing keys in KMU @@ -280,7 +299,6 @@ Removing or revoking keys from KMU Keys are deleted or revoked using the ``psa_destroy_key`` function. Calling the ``psa_destroy_key`` function on keys that have the persistence ``CRACEN_KEY_PERSISTENCE_REVOKABLE``, will mark the associated KMU slots as revoked, preventing the slots from being reused for new keys. - Using KMU keys ============== @@ -303,19 +321,25 @@ You might encounter the following KMU-specific error codes when using the KMU ke * ``PSA_ERROR_HARDWARE_FAILURE``: The key slot has invalid data. * ``PSA_ERROR_CORRUPTION_DETECTED``: The key slot has invalid data. +.. _ug_nrf54l_crypto_configuration: + Configuration ************* See :ref:`configuring_kconfig` for information on how to set the required configuration options temporarily or permanently. -The CRACEN peripheral does not require any configuration. -Its operation is ensured by hardware. +The CRACEN peripheral's operation is ensured by hardware. + +The following Kconfig option toggles CRACEN microcode upload: + +* :kconfig:option:`CONFIG_CRACEN_LOAD_MICROCODE`: Enabled by default. + Set to ``n`` to disable microcode upload. -The following Kconfig options are used to enable support for KMU: +Use the following Kconfig options to enable KMU support: -* :kconfig:option:`CONFIG_NRF_SECURITY`: Enables the nRF Security library -* :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_C`: Enables the Platform Security Architecture (PSA) cryptography API -* :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_CRACEN`: Enables the CRACEN driver +* :kconfig:option:`CONFIG_NRF_SECURITY`: Enables the nRF Security library. +* :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_C`: Enables the Platform Security Architecture (PSA) cryptography API. +* :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_CRACEN`: Enables the CRACEN driver. The following code block shows how KMU support is enabled: diff --git a/doc/nrf/app_dev/device_guides/nrf54l/features.rst b/doc/nrf/app_dev/device_guides/nrf54l/features.rst index 5cb98a1106f3..2cfa69da2318 100644 --- a/doc/nrf/app_dev/device_guides/nrf54l/features.rst +++ b/doc/nrf/app_dev/device_guides/nrf54l/features.rst @@ -14,10 +14,29 @@ For additional information, see the following documentation: * Zephyr page on the :ref:`zephyr:nrf54l15dk_nrf54l15` * :ref:`installation` and :ref:`configuration_and_build` documentation to install the |NCS| and learn more about its development environment. +VPR core +******** + +The nRF54L15 DK has VPR core named *fast lightweight peripheral processor* (FLPR). +It is designed to support the RISC-V instruction set, and features key enhancements that enable efficient handling of basic and complex operations, as well as streamlined instruction processing. +It can be used as either a standalone processor or as a helper core. + +As a helper processor, FLPR specializes in managing tasks that require real-time attention or low power consumption, effectively boosting the performance of the main processor. +It is versatile, capable of operating independently or as an integrated peripheral, with accessible components for easy control and customization. + +Trusted Firmware-M (TF-M) +************************* + +Trusted Firmware-M provides a configurable set of software components to create a Trusted Execution Environment. +When you build your application with CMSE enabled, the TF-M is automatically included in the build. + +For more information about the TF-M, see :ref:`ug_tfm`. +See also :ref:`tfm_hello_world` for a sample that demonstrates how to add TF-M to an application. + Supported protocols ******************* -The nRF54L15 DK supports Bluetooth Low Energy (LE), proprietary protocols (including Enhanced ShockBurst), Matter, and Thread. +The nRF54L15 DK supports Bluetooth® Low Energy (LE) including Bluetooth Mesh, proprietary protocols (including Enhanced ShockBurst), Matter, and Thread. Amazon Sidewalk =============== @@ -38,10 +57,24 @@ The :ref:`ug_ble_controller` user guide contains more information about the two See the :ref:`zephyr:bluetooth` section of the Zephyr documentation for information on the Bluetooth Host and open source Bluetooth LE Controller. The |NCS| contains :ref:`ble_samples` that can be run on the nRF54L15 DK device. -In addition, you can run the :ref:`zephyr:bluetooth-samples` that are included from Zephyr. +In addition, you can run the :zephyr:code-sample-category:`bluetooth` samples that are included from Zephyr. For available libraries, see :ref:`lib_bluetooth_services` (|NCS|) and :ref:`zephyr:bluetooth_api` (Zephyr). +Bluetooth Mesh +-------------- + +Bluetooth Mesh operates on Bluetooth Low Energy (LE), and is implemented according to Bluetooth Mesh Profile Specification v1.0.1 and Bluetooth Mesh Model Specification v1.0.1. +For the application core, the |NCS| provides several :ref:`bt_mesh_samples`. +In addition, you can find Bluetooth Mesh samples with :zephyr:code-sample-category:`bluetooth` samples. + +IEEE 802.15.4 +============= + +Implementation of the IEEE 802.15.4 MAC layer frame technology that enhances network efficiency and reliability through intelligent decoding of frame control fields, which manage types, addressing, and control flags. + +For the application core, the |NCS| provides a series of samples for the :ref:`Thread `, and :ref:`Matter ` protocols. + Enhanced ShockBurst =================== @@ -90,13 +123,14 @@ See the :ref:`nfc_samples` and :ref:`lib_nfc` for the samples and libraries that MCUboot bootloader support ************************** -The nRF54L15 DK supports MCUboot as its bootloader, in the experimental phase. -This means the following: +Devices in the nRF54L Series support MCUboot as their bootloader and offer the following features: + + * Software and hardware-based :ref:`cryptography` + * Hardware key management + * Single image pair for dual-bank Device Firmware Update (DFU) targeted at the CPU application (the ``nrf54l15dk/nrf54l15/cpuapp`` board target) + * Configuring MCUboot as a first-stage bootloader - * Only software cryptography is supported. - * Single image pair is supported for dual-bank Device Firmware Update (DFU) targeted at the CPU application (the ``nrf54l15dk/nrf54l51/cpuapp`` board target). - * MCUboot can be configured as a first-stage bootloader (second-stage bootloader functionality is not yet available). - * Serial recovery mode is also not yet supported. +The second-stage bootloader functionality and the serial recovery mode are currently not supported. Supported DFU protocols ======================= @@ -104,4 +138,4 @@ Supported DFU protocols The DFU process in the nRF54L15 DK uses the MCUmgr protocol. It can be used for performing updates over Bluetooth® Low Energy (LE) and serial connections. -For instructions on testing, see :ref:`nrf54l_testing_dfu`. +For details, see :ref:`ug_nrf54l_developing_ble_fota`. diff --git a/doc/nrf/app_dev/device_guides/nrf54l/fota_update.rst b/doc/nrf/app_dev/device_guides/nrf54l/fota_update.rst new file mode 100644 index 000000000000..03a8ec8b2cb8 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54l/fota_update.rst @@ -0,0 +1,255 @@ +.. _ug_nrf54l_developing_ble_fota: + +FOTA updates on nRF54L Series devices +##################################### + +.. contents:: + :local: + :depth: 2 + +.. fota_upgrades_intro_start + +|fota_upgrades_def| +You can also use FOTA updates to replace the application. +See the :ref:`app_dfu` page for general Device Firmware Update (DFU) information, such as supported methods for sending and receiving updates on the device. +Currently, FOTA updates are supported only for the application core. +For more information about introducing immutable MCUboot bootloader, refer to :ref:`ug_bootloader_adding_sysbuild_immutable_mcuboot`. + +.. note:: + The nRF54L SoC's support hardware Key Management Unit (KMU), designed to provide authentication keys for DFU purposes. + Ensure you complete the :ref:`KMU provisioning` during your device's DFU setup with KMU enabled. + Failing to do so may prevent your application from booting properly. + +.. fota_upgrades_intro_end + +.. _ug_nrf54l_developing_ble_fota_steps: + +FOTA over Bluetooth Low Energy +****************************** + +.. fota_upgrades_over_ble_intro_start + +FOTA updates are supported using MCUmgr's Simple Management Protocol (SMP) over Bluetooth®. +The application acts as a GATT server and allows the connected Bluetooth Central device to perform a firmware update. +To use FOTA over Bluetooth LE, samples must support Bluetooth peripheral role (:kconfig:option:`CONFIG_BT_PERIPHERAL`). + +By default, the application supports SMP handlers related to: + +* Image management +* Operating System (OS) management, which is used to reboot the device after completing firmware uploads +* Erasing the settings partition to prevent booting a new application with incompatible content that was written by the previous application + +To enable support for FOTA updates, do the following: + +* Enable the :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU` Kconfig option, which implies configuration of the following: + + * All of the SMP command handlers mentioned in the :ref:`ug_nrf54l_developing_ble_fota_steps` section + * SMP BT reassembly feature + * The :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP` Kconfig option, which automatically extends the Bluetooth buffers to speed up the FOTA transfer over Bluetooth while also increasing RAM usage + + .. note:: + The :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU` Kconfig option enables the device to use MCUmgr for performing firmware over-the-air (FOTA) updates using Bluetooth LE. + It can be used along with other samples, and is meant as a demonstration of the default DFU configuration over Bluetooth. + + .. note:: + To prevent an unauthenticated access to the device over SMP, it is strongly recommended to enable the :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW_AUTHEN` option. + This will enforce a remote device to initiate a pairing request before accessing SMP characteristics. + +.. fota_upgrades_over_ble_intro_end + +.. fota_upgrades_over_ble_mandatory_mcuboot_start + +* Enable the ``SB_CONFIG_BOOTLOADER_MCUBOOT`` option to use MCUboot as a bootloader. + You can do this by, for example, setting the option in the :file:`sysbuild.conf` file. + For more information, go to the :ref:`ug_bootloader_adding_sysbuild_immutable_mcuboot` page. + +.. fota_upgrades_over_ble_mandatory_mcuboot_end + +.. fota_upgrades_over_ble_additional_information_start + +If necessary, you can modify any of the implied options or defaulted values introduced by the :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU` Kconfig option. + +You can either add these Kconfig options to the configuration files of your application or have them inline in a project build command. +Here is an example of how you can build for the :ref:`peripheral_lbs` sample: + +.. parsed-literal:: + :class: highlight + + west build -b *board_target* -- -DSB_CONFIG_BOOTLOADER_MCUBOOT=y -DCONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y + +When you connect to the device after the build has completed and the firmware has been programmed to it, the SMP Service is enabled with the ``UUID 8D53DC1D-1DB7-4CD3-868B-8A527460AA84``. +If you want to add SMP Service to advertising data, refer to the :zephyr:code-sample:`smp-svr`. + +.. fota_upgrades_over_ble_additional_information_end + +.. _ug_nrf54l_developing_ble_fota_steps_testing: + +Testing steps +============= + +.. fota_upgrades_outro_start + +To perform a FOTA update, complete the following steps: + +.. fota_upgrades_over_ble_nrfcdm_common_dfu_steps_start + +1. Locate the :file:`dfu_application.zip` archive in the build directory. + The archive is automatically generated after adding the DFU configuration and building your project. + + .. note:: + For each image included in the DFU-generated package, use a higher version number than your currently active firmware. + You can do this by modifying the VERSION file in the application directory or by making changes to the application code. + For the semantic versioning, modify the :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` Kconfig option. + For the monotonic counter (HW), modify the ``SB_CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_VALUE`` Kconfig option. + Otherwise, the DFU target may reject the FOTA process due to a downgrade prevention mechanism. + +#. Download the :file:`dfu_application.zip` archive to your mobile phone. + See :ref:`app_build_output_files` for more information about the contents of update archive. + + .. note:: + nRF Connect for Desktop does not currently support the FOTA process. + +#. Use the `nRF Connect Device Manager`_ mobile app to update your device with the new firmware. + + a. Ensure that you can access the :file:`dfu_application.zip` archive from your phone or tablet. + #. In the mobile app, scan and select the device to update. + #. Switch to the :guilabel:`Image` tab. + #. Tap the :guilabel:`SELECT FILE` button and select the :file:`dfu_application.zip` archive. + #. Tap the :guilabel:`START` button. + #. Initiate the DFU process of transferring the image to the device: + + * If you are using an Android phone or tablet, select a mode in the dialog window, and tap the :guilabel:`START` button. + * If you are using an iOS device, tap the selected mode in the pop-up window. + + .. note:: + For samples using random HCI identities, the Test and Confirm mode should not be used. + + #. Wait for the DFU to finish and then verify that the new application works properly by observing the new device name visible in the Device Manager app. + +.. fota_upgrades_over_ble_nrfcdm_common_dfu_steps_end + +.. fota_upgrades_outro_end + +FOTA update sample +****************** + +.. fota_upgrades_update_start + +The :zephyr:code-sample:`smp-svr` demonstrates how to set up your project to support FOTA updates. + +When working in the |NCS| environment, ignore the part of the sample documentation that describes the building and programming steps. +In |NCS|, you can build and program the :zephyr:code-sample:`smp-svr` as any other sample using the following commands: + +.. tabs:: + + .. group-tab:: nRF54L SoCs + + .. parsed-literal:: + :class: highlight + + west build -b *board_target* -- -DEXTRA_CONF_FILE=overlay-bt.conf + west flash + + .. group-tab:: nRF54L SoCs with HW cryptography support + + .. parsed-literal:: + :class: highlight + + west build -b *board_target* -- -DEXTRA_CONF_FILE=overlay-bt.conf -DSB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519=y -DSB_CONFIG_BOOT_SIGNATURE_TYPE_PURE=y -Dmcuboot_CONFIG_PM_PARTITION_SIZE_MCUBOOT=0x10000 -DSB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU=y + west flash + + + .. group-tab:: nRF54L15 DK with SPI Flash as update image bank + + .. parsed-literal:: + :class: highlight + + west build -b nrf54l15dk/nrf54l15/cpuapp -T sample.mcumgr.smp_svr.bt.nrf54l15dk.ext_flash + west flash + + .. group-tab:: nRF54l15 DK with SPI Flash as update image (DTS partitioning) + + To build with the DTS partitioning, run the following command: + + .. parsed-literal:: + :class: highlight + + west build -b nrf54l15dk/nrf54l15/cpuapp -d build/smp_svr_54l_d zephyr/samples/subsys/mgmt/mcumgr/smp_svr -T sample.mcumgr.smp_svr.bt.nrf54l15dk.ext_flash.pure_dts + +Make sure to indicate the :file:`overlay-bt.conf` overlay configuration for the Bluetooth transport like in the command example. +This configuration was carefully selected to achieve the maximum possible throughput of the FOTA update transport over Bluetooth with the help of the following features: + +* Bluetooth MTU - To increase the packet size of a single Bluetooth packet transmitted over the air (:kconfig:option:`CONFIG_BT_BUF_ACL_RX_SIZE` and others). +* Bluetooth connection parameters - To adaptively change the connection interval and latency on the detection of the SMP service activity (:kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL`). +* MCUmgr packet reassembly - To allow exchange of large SMP packets (:kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_REASSEMBLY`, :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE` and others). + +Consider using these features in your project to speed up the FOTA update process. + +.. fota_upgrades_update_end + +.. _ug_nrf54l_developing_ble_fota_mcuboot_kmu: + +Provisioning of keys for Hardware KMU +************************************* + +In case of FOTA implementations using the MCUboot bootloader, which includes hardware cryptography and KMU, you must complete key provisioning before booting any application. +Refer to :ref:`ug_nrf54l_developing_provision_kmu` for detailed description. + +.. _ug_nrf54l_developing_ble_fota_mcuboot_direct_xip_mode: + +Build configuration additions for MCUboot in the direct-xip mode +**************************************************************** + +.. fota_upgrades_over_ble_mcuboot_direct_xip_information_start + +FOTA updates are also supported when MCUboot is in the direct-xip mode. +In this mode, the MCUboot bootloader boots an image directly from a given slot, so the swap operation is not needed. +It can be used either with or without the revert mechanism support. +For more information about the direct-xip mode and the revert mechanism support, go to the *Equal slots* (direct-xip) section on the :doc:`mcuboot:design` page. + +.. note:: + Direct-xip mode cannot be combined with image encryption. + In addition, when building a project with direct-xip for the nRF54L SoC targets, a static partition manager file is required for partitioning. + See NCSDK-30119 issue on the :ref:`known_issues` page. + +To use MCUboot in the direct-xip mode together with FOTA updates, do the following: + +* Enable the ``SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP`` Kconfig option in sysbuild. + +See how to build the :ref:`peripheral_lbs` sample with MCUboot in the direct-xip mode when the revert mechanism support is disabled: + +.. parsed-literal:: + :class: highlight + + west build -b *board_target* -- -DSB_CONFIG_BOOTLOADER_MCUBOOT=y -DSB_CONFIG_MCUBOOT_MODE_DIRECT_XIP=y -DCONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y + +Optionally, if you want to enable the revert mechanism support, complete the following: + +* Enable the ``SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT`` Kconfig option in sysbuild instead of ``SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP``. + +See how to build the :ref:`peripheral_lbs` sample with MCUboot in direct-xip mode when the revert mechanism support is enabled: + +.. parsed-literal:: + :class: highlight + + west build -b *board_target* -- -DSB_CONFIG_BOOTLOADER_MCUBOOT=y -DSB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT=y -DCONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y + +.. note:: + When building the application with MCUboot in direct-xip mode with revert mechanism support, the signed image intended for flashing is automatically marked as confirmed (Pre-confirmation). + Without this configuration, the application will fail to boot. + Confirmation mark should not, however, be added when building update images. + +Both the ``SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP`` and ``SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT`` Kconfig options automatically build application update images for both slots. +To read about the files that are built when the option is enabled, refer to the :ref:`app_build_mcuboot_output` page. + +.. fota_upgrades_over_ble_mcuboot_direct_xip_nrfcdm_note_start + +.. note:: + Support for FOTA updates with MCUboot in the direct-xip mode is available since the following versions of the `nRF Connect Device Manager`_ mobile app: + + * Version ``1.8.0`` on Android. + * Version ``1.4.0`` on iOS. + +.. fota_upgrades_over_ble_mcuboot_direct_xip_nrfcdm_note_end + +.. fota_upgrades_over_ble_mcuboot_direct_xip_information_end diff --git a/doc/nrf/app_dev/device_guides/nrf54l/index.rst b/doc/nrf/app_dev/device_guides/nrf54l/index.rst index 52942d28f6ea..353bc83c0c74 100644 --- a/doc/nrf/app_dev/device_guides/nrf54l/index.rst +++ b/doc/nrf/app_dev/device_guides/nrf54l/index.rst @@ -20,18 +20,53 @@ Zephyr and the |NCS| provide support and contain board definitions for developin - Product pages * - :ref:`zephyr:nrf54l15dk_nrf54l15` - PCA10156 - - ``nrf54l15dk/nrf54l51/cpuapp`` - - :ref:`Getting started ` - - `nRF54L15 System-on-Chip`_ + - ``nrf54l15dk/nrf54l15/cpuapp`` + - | `Datasheet `_ + | `Quick Start app`_ + | `User Guide `_ + - | `nRF54L15 DK product page `_ + | `nRF54L15 System-on-Chip (SoC) `_ + * - nRF54L10 emulation on the nRF54L15 DK + - PCA10156 + - ``nrf54l15dk/nrf54l10/cpuapp`` + - | `Datasheet `_ + - | `nRF54L10 System-on-Chip (SoC) `_ + * - nRF54L05 emulation on the nRF54L15 DK + - PCA10156 + - ``nrf54l15dk/nrf54l05/cpuapp`` + - | `Datasheet `_ + - | `nRF54L05 System-on-Chip (SoC) `_ + +.. _ug_nrf54L15_revision: + +Ensure to check the revision of your nRF54L15 device to see if it is supported: + +.. list-table:: + :header-rows: 1 + + * - DK revision + - Status + * - nRF54L15 DK v0.9.1 + - Supported + * - nRF54L15 PDK v0.8.1 + - Supported + * - nRF54L15 PDK v0.7.0 or earlier + - Deprecated after |NCS| v2.7.0 .. note:: - When building your project with the nRF54L15 DK v0.8.1 (Engineering B silicon), that is marked as PDK, and the nRF54L15 DK v0.9.1 (Engineering B silicon), you must use the ``nrf54l15dk/nrf54l51/cpuapp`` board target. + The nRF54L15 DK v0.9.1 and the nRF54L15 PDK v0.8.1 are functionally equal and use the same board target (``nrf54l15dk/nrf54l15/cpuapp``). .. toctree:: :maxdepth: 2 :caption: Subpages: features + zms cryptography - testing_dfu + vpr_flpr + building_nrf54l + nrf54l_signing_with_payload + fota_update + kmu_basics + kmu_provision diff --git a/doc/nrf/app_dev/device_guides/nrf54l/kmu_basics.rst b/doc/nrf/app_dev/device_guides/nrf54l/kmu_basics.rst new file mode 100644 index 000000000000..025603b31dfa --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54l/kmu_basics.rst @@ -0,0 +1,65 @@ +.. _ug_nrf54l_developing_basics_kmu: + +Introduction to KMU key provisioning +#################################### + +.. contents:: + :local: + :depth: 2 + +The nRF54L devices are equipped with a Key Management Unit (KMU) that facilitates secure and confidential storage of keys. +This feature is crucial not only for private keys but also for public keys, as the :ref:`KMU can directly transfer a key to the CRACEN RAM`. +Even when keys must pass through addressable RAM, the KMU significantly reduces the risk of key exposure. +Therefore, you should use KMU for managing secrets whenever possible. + +Key Types +********* + +Different types of keys, such as revocable and locked keys, serve distinct purposes and have unique policies associated with their use and management. +In the PSA abstraction, key types are mapped by the ``psa_set_key_lifetime`` function. +Refer to :ref:`PSA Key programming model` for details. + +Revocable keys +============== + +Revocable keys can be set as invalid for further use, which prevents the keys from being reused or new keys from being provisioned onto the same slots. +For these keys, the revocation policy (RPOLICY) must be marked as ``revoked``. +For some technical solutions, a few keys of the same key type (for example, generation 0, 1, 2) might be provisioned. +At any given time, only one generation should be active. +If a key generation is compromised, it should be revoked to prevent its use. +The specifics of the revocation scheme depend on the technical solution, but it is recommended to designate one generation as non-revocable (``locked``) to prevent a Denial of Service (DoS) attack on the key's availability for the solution. + +Locked keys +=========== + +Once provisioned, locked keys are permanently available for use and cannot be deleted without erasing the device. +For these keys, the revocation policy (RPOLICY) must be marked as ``locked``. + +Provisioning keys for the bootloader +************************************ + +The bootloader can use multiple key generations for image verification (up to three for nRF54L SoCs). +To safeguard against unauthorized provisioning by attackers, you must :ref:`provision all key generations onto the device`. + +By default, MCUboot uses a single key. +You can configure the number of key generations that MCUboot uses for application verification with the ``CONFIG_BOOT_SIGNATURE_KMU_SLOTS`` MCUboot's Kconfig option. + +Limitations on key types and trade-offs +*************************************** + +Access to the KMU is restricted to secure code. +When an SoC runs applications code as secure, the application has some control over the KMU. +A provisioned key cannot be overwritten, but its content might be blocked from use at runtime (push block mechanism) by unexpected routines. +However, applications can revoke a revocable key on the nRF54L15, nRF54L10, and nRF54L05 devices. +The revoked key might not necessarily belong to an application; it could, for example, belong to a bootloader. + +Revocable KMU keys are exposed to revocation by applications running in secure mode. +If you cannot trust the application running in the secure mode, you should provision locked keys. +You can consider the following options: + +* Supporting key generations with revocable keys - The advantage of this method is that the application or bootloader can revoke a key generation if the private key is compromised or lost. + The disadvantage is that a malicious application could also revoke the key. +* Supporting one locked key - The advantage of this method is that the key cannot be deleted by the application. + The disadvantage is that the method does not support multiple generations of keys. + +Always consider the specific security needs of your application and choose the most appropriate key management approach to safeguard your digital assets. diff --git a/doc/nrf/app_dev/device_guides/nrf54l/kmu_provision.rst b/doc/nrf/app_dev/device_guides/nrf54l/kmu_provision.rst new file mode 100644 index 000000000000..fcd2a2966f9b --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54l/kmu_provision.rst @@ -0,0 +1,97 @@ +.. _ug_nrf54l_developing_provision_kmu: + +Performing KMU provisioning +########################### + +.. contents:: + :local: + :depth: 2 + +The nRF54L devices are equipped with Hardware Key Management Unit (KMU), that requires provisioning when in use. +The |NCS| provides a west command, ``ncs-provision``, allowing to upload keys to the device though the Serial Write Debug (SWD) interface. + +Prerequisites +************* + +First, ensure that the nrfprovision script is installed. +It should install automatically during the setup of the |NCS| working environment. +If it was not installed, or if you wish to install it manually, run the following command: + +.. parsed-literal:: + :class: highlight + + pip install nrfprovision==0.9.0 --extra-index-url https://files.nordicsemi.com/artifactory/api/pypi/nordic-pypi/simple + + +Key generation +************** + +If you need a new key, you can generate it using imgtool or another tool that produces the required kind and format of key. +For instructions on how to generate a key, see the :doc:`imgtool page in the MCUboot documentation`. +See the following example for generating a private key: + +.. parsed-literal:: + :class: highlight + + imgtool keygen -k my_ed25519_priv_key.pem -t ed25519 + +Provisioning keys to the board +****************************** + +Before uploading keys, ensure that the SoC is unprovisioned. +If the SoC has been previously provisioned and you need to use a different set of keys, you must first erase the SoC with the erase command: + +.. tabs:: + + .. group-tab:: erase using nrfutil + + .. parsed-literal:: + :class: highlight + + nrfutil device erase + + .. group-tab:: erase using nrfjprog + + .. parsed-literal:: + :class: highlight + + nrfjprog --eraseall + +Once you have an unprovisioned SoC, upload keys to the board by running the following command: + +.. parsed-literal:: + :class: highlight + + west ncs-provision upload -s nrf54l15 -k ed25519.pem -k ed25519-1.pem -k ed25519-2.pem + +* Parameter ``-s (-–soc)`` specifies the target device. + +* Parameter ``-k (-–key)`` specifies the private key PEM files to be provisioned to the SoC. + You can specify up to three keys. + +* Parameter ``--dev-id`` specifies the interface serial number and should be used if multiple J-link interfaces are connected to the development machine. + +* Parameter ``-p" (--policy)`` specifies the policy applied to the given set of keys. + You can apply the following options: + + * ``lock-last`` - Uploads the last key as locked, while the preceding keys are revocable. This option is set by default. + * ``revokable`` - Enables revocation for each key. + * ``lock`` - Sets all keys to be permanent. + +The script generates the public key for each private key and uploads them to your device. +These public keys generate the verification keys for the application image, which are then used by MCUboot for validation. +The first key specified in the command is used for signing the application image. +Currently, the script supports only ED25519 Keys. + +For MCUboot, take note of the following: + +* By default, it uses one key. +* KMU support in its configuration needs to be enabled by setting the ``SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU`` sysbuild Kconfig option. + Otherwise, MCUboot will fallback to the compiled in key. + +For provision one key to the board run the following command: + +.. parsed-literal:: + :class: highlight + + west ncs-provision upload -s nrf54l15 -k ed25519.pem diff --git a/doc/nrf/app_dev/device_guides/nrf54l/nrf54l_signing_with_payload.rst b/doc/nrf/app_dev/device_guides/nrf54l/nrf54l_signing_with_payload.rst new file mode 100644 index 000000000000..262c6457f7dd --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54l/nrf54l_signing_with_payload.rst @@ -0,0 +1,243 @@ +.. _nRF54l_signing_app_with_flpr_payload: + +Signing applications with integrated FLPR payload +################################################# + +.. contents:: + :local: + :depth: 2 + +The nRF54L SoCs include a FLPR CPU designed to handle fast communication with external devices independently, enhancing flexibility in protocol implementation. +For details, see :ref:`vpr_flpr_nrf54l`. + +You can dynamically load and modify the FLPR code during runtime. +This guide describes how to build the application and FLPR cores, creating a single file, signed and managed by MCUboot, with FLPR integrated and executable from the application slot. + +Requirements and limitations +**************************** + +MCUboot requires the application and the FLPR application to be concatenated and signed together to treat them as a single image. +To do this, you have to build the main application (CPUAPP application) and the FLPR application separately, manually merge them, and sign them for MCUboot. + +In addition to these requirements, there are also limitations caused by sysbuild. +The FLPR application cannot be built as part of the main sysbuild process. +Instead, the CPUAPP application can be built with MCUboot integration, while the FLPR must be built separately and then merged. +For details, see :ref:`building_nrf54l`. +Note that the DTS file for the CPUAPP application must reserve a required area for the FLPR binary. + +Using Partition Manager +======================= + +For :ref:`partition_manager`, applications can only use static definitions. +In the current version of the |NCS|, the CPUAPP application and the FLPR application use different partitioning definitions. +The CPUAPP application follows the Partition Manager's scheme, while FLPR relies on DTS partitioning and disregards the Partition Manager scheme. +For this reason, partitions defined for FLPR in DTS must also be reserved in the Partition Manager to ensure consistency. +In addition, FLPR partition parameters such as size and offset must be aligned in the DTS definition, the FLPR application project, and the Partition Manager scheme of the CPUAPP project. + +Placement of the FLPR binary on storage devices is flexible, however, the loading mechanism must be aware of its starting point, which is specified in the DTS file. +You must ensure that the FLPR partition in both the DTS and Partition Manager leaves sufficient space at the end for MCUboot swap information, which is necessary to update the application image. +The build system will not check if the compiled application satisfies the size requirements (see the NCSDK-20567 issue on the :ref:`known_issues` page). + +Creating a project with FLPR core +********************************* + +Each project (CPUAPP application and the FLPR application) can independently enable sysbuild. +The CPUAPP application, operating on the application core, requires the integration of MCUboot as the bootloader to ensure proper boot management and security. +The FLPR application operates independently from the main project structure, allowing it to be built separately. + +Configuring memory partitions +***************************** + +When the FLPR application is built, partitioning must be done through DTS. +This is necessary because the Partition Manager does not currently support or recognize the FLPR application. + +When building the main application that incorporates FLPR, ensure that the Partition Manager is enabled. +Your setup must reserve a partition for the FLPR that reflects the layout defined by the FLPR application. +For details on configuring partitions, see the following sections. + +DTS memory definitions for FLPR application +=========================================== + +Define FLPR partitions for the FLPR application as follows, using example addresses: + +.. code-block:: dts + + &cpuflpr_rram { + reg = <0x98000 0x20000>; + }; + +This configuration sets up a partition starting at address ``0x98000`` with a size of ``0x20000``. + +DTS memory definitions for CPUAPP application +============================================= + +To ensure the CPUAPP application functions correctly with the FLPR payload, you must apply specific configurations. + +Memory partition configuration +------------------------------ + +See an example of memory partition configuration: + +.. code-block:: dts + + /{ + soc { + reserved-memory { + #address-cells = <1>; + #size-cells = <1>; + cpuflpr_code_partition: image@98000 { + /* FLPR core code partition */ + reg = <0x98000 0x20000>; + }; + }; + cpuflpr_sram_code_data: memory@20028000 { + compatible = "mmio-sram"; + reg = <0x20028000 DT_SIZE_K(96)>; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x0 0x20028000 0x18000>; + }; + }; + }; + &cpuapp_sram { + reg = <0x20000000 DT_SIZE_K(160)>; + ranges = <0x0 0x20000000 0x28000>; + }; + +1. Adjust the following partitions: + + * ``cpuflpr_code_partition`` - This partition defines where the FLPR code is placed on the storage device. + The code is later loaded by the CPUAPP application. + + * Location: 0x98000 + * Size: 0x20000 + + Ensure the ``cpuflpr_code_partition`` does not extend to the end of the image slot. + You must leave space for the MCUboot swap information. + + .. note:: + + When using the Partition Manager, ensure this partition is reserved for FLPR. + The Partition Manager will ignore this setting while allocating space for the application running on CPUAPP, but the :ref:`FLPR minimal sample ` will still utilize it. + + * ``cpuflpr_sram_code_data`` - This configuration defines the RAM space reserved only for the FLPR. + It is not available for the application core and should be excluded from its memory allocation. + + * Compatible with ``mmio-sram``. + * Location: 0x20028000 + * Size: 96KB + + * ``cpuapp_sram`` - This configuration defines the RAM limit for the CPUAPP application. + + * Location: 0x20000000 + * Size: 160KB + +#. Configure the CPUAPP application as follows for it to recognize the placement of the FLPR code: + + .. code-block:: dts + + &cpuflpr_vpr { + execution-memory = <&cpuflpr_sram_code_data>; + source-memory = <&cpuflpr_code_partition>; + }; + + where + + * The ``execution-memory`` links SRAM definitions to FLPR (``cpuflpr_sram_code_data``). + * The ``source-memory`` links RRAM definitions to FLPR (``cpuflpr_code_partition``). + + These links inform the main application about the memory usage by the FLPR core. + +Partition Manager configuration +------------------------------- + +Adjust the static definitions in the Partition Manager as follows: + +* For the FLPR partition (``flpr0``): + + .. code-block:: dts + + flpr0: + address: 0x98000 + end_address: 0xb8000 + region: flash_primary + size: 0x20000 + + The ``address`` and ``size`` must match the DTS definitions. + The ``end_address`` is the sum of the address and size. + +* For the ``mcuboot_primary_app`` configuration: + + .. code-block:: dts + + mcuboot_primary_app: + address: 0xc800 + end_address: 0xb8000 + orig_span: &id002 + - app + - flpr0 + region: flash_primary + size: 0xab800 + span: *id002 + + This configuration indicates that ``flpr0`` is now set within ``mcuboot_primary_app``, meaning it is part of the image. + +Building project +**************** + +For detailed instructions on how to build your project, see :ref:`building_nrf54l`. + +Creating a single image +*********************** + +After the build is complete, you must manually collect the artifacts into a single image for MCUboot to work correctly. + +Merging binaries +================ + +Once you have successfully built the CPUAPP and FLPR applications separately and using sysbuild, you can merge the files. + +1. Locate the :file:`zephyr.hex` files for both applications: + + * For CPUAPP, find the :file:`build//zephyr/zephyr.hex` file. + * For FLPR, find the :file:`/zephyr/zephyr.hex` file. + +#. If you do not have your environment set up, first source the :file:`zephyr_env.sh` script or ensure you have set the ``ZEPHYR_BASE`` environmental variable to the Zephyr directory used for building. + +#. Execute the merge command: + + .. code-block:: console + + python3 ${ZEPHYR_BASE}/scripts/build/mergehex.py /zephyr/zephyr.hex build//zephyr/zephyr.hex -o app_and_flpr_merged.hex + + It results in creating the :file:`app_and_flpr_merged.hex` file that contains both the FLPR and CPUAPP application. + + .. note:: + + Merging errors, where memory locations overlap in both HEX files, indicate misalignment between DTS and Partition Manager definitions for FLPR and CPUAPP. This suggests that FLPR is built in an area already allocated to the application. + To resolve this issue, you must check and adjust the settings in either the Partition Manager, the DTS, or both, to ensure that the FLPR-designated area does not overlap with the application-designated area. + +Signing binaries +================ + +For MCUboot, the merged HEX file (:file:`app_and_flpr_merged.hex`) is a single application that must be signed. + +1. Calculate the slot size by using the ``mcuboot_primary_app`` configuration. + The ``0xac000`` comes from the following calculation: ``0xab800 + 0x800 = 0xac000``, where ``0xab800`` represents the total size of the primary application area, and ``0x800`` is added to accommodate the metadata required by MCUboot, resulting in a total ``slot_size`` of ``0xac000``. + +#. Using the :doc:`imgtool`, sign the merged application. + + .. code-block:: console + + python3 ${ZEPHYR_BASE}/bootloader/mcuboot/scripts/imgtool.py sign --version --align 16 --slot-size 0xac000 --pad-header --header-size 0x800 -k app_and_flpr_merged.hex app_and_flpr_merged.signed.hex + python3 ${ZEPHYR_BASE}/bootloader/mcuboot/scripts/imgtool.py sign --version --align 16 --slot-size 0xac000 --pad-header --header-size 0x800 -k app_and_flpr_merged.hex app_and_flpr_merged.signed.bin + + Adjust the following values in the script: + + * Replace ``0xac000`` in the command line with the calculated value. + * Replace ```` with the application version and ```` with the :ref:`signature key `. + + At the end of this process, you will have two files: + + * The :file:`app_and_flpr_merged.signed.hex` file, that is an application you can :ref:`program directly to the device`. + * The :file:`app_and_flpr_merged.signed.bin` file, that is an application that can be :ref:`uploaded as an update`. diff --git a/doc/nrf/app_dev/device_guides/nrf54l/testing_dfu.rst b/doc/nrf/app_dev/device_guides/nrf54l/testing_dfu.rst deleted file mode 100644 index 5892a84b7f7f..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf54l/testing_dfu.rst +++ /dev/null @@ -1,30 +0,0 @@ -.. _nrf54l_testing_dfu: - -Testing the DFU solution -######################## - -You can evaluate the DFU functionality by running the :zephyr:code-sample:`smp-svr` sample for the ``nrf54l15dk/nrf54l51/cpuapp`` board target, which is available for both Bluetooth® LE and serial channels. -This allows you to build and test the DFU solutions that are facilitated through integration with child images and the partition manager. - -To compile the SMP server sample for testing secondary image slots on external SPI NOR flash, make sure you are in the :file:`ncs` directory and run the command based on the selected partitioning method. - -.. tabs:: - - .. group-tab:: Partition Manager - - To build with the Partition Manager, run the following command: - - .. code-block:: console - - west build -b nrf54l15dk/nrf54l15/cpuapp -d build/smp_svr_54l zephyr/samples/subsys/mgmt/mcumgr/smp_svr -T sample.mcumgr.smp_svr.bt.nrf54l15pdk.ext_flash - - .. group-tab:: DTS partitioning - - To build with the DTS partitioning, run the following command: - - .. code-block:: console - - west build -b nrf54l15dk/nrf54l15/cpuapp -d build/smp_svr_54l_d zephyr/samples/subsys/mgmt/mcumgr/smp_svr -T sample.mcumgr.smp_svr.bt.nrf54l15pdk.ext_flash.pure_dts - -This configuration sets up the secondary image slot on the serial flash memory installed on the nRF54L15 DK. -It also enables the relevant SPI and the SPI NOR flash drivers. diff --git a/doc/nrf/app_dev/device_guides/nrf54l/vpr_flpr.rst b/doc/nrf/app_dev/device_guides/nrf54l/vpr_flpr.rst new file mode 100644 index 000000000000..743b05aed045 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54l/vpr_flpr.rst @@ -0,0 +1,53 @@ +.. _vpr_flpr_nrf54l: + +Working with the FLPR core +########################## + +.. contents:: + :local: + :depth: 2 + +.. note:: + The FLPR core support in the |NCS| is currently :ref:`experimental`. + Additionally, it is not yet available for the nRF54L05 and nRF54L10 SoCs. + +The nRF54L15 SoC has a dedicated VPR CPU (RISC-V architecture), named *fast lightweight peripheral processor* (FLPR). +The following peripherals are available for use with the FLPR core, and can be accessed through the appropriate Zephyr Device Driver API: + +* GPIO +* GPIOTE +* GRTC +* TWIM +* UARTE +* VPR + +.. _vpr_flpr_nrf54l15_initiating: + +Using FLPR with Zephyr multithreaded mode +***************************************** + +FLPR can function as a generic core, operating under the full Zephyr kernel. +In this configuration, building the FLPR target is similar to the application core. +However, the application core build must incorporate an overlay that enables the FLPR core. + +Bootstrapping the FLPR core +=========================== + +The |NCS| provides a FLPR snippet that adds an overlay required for bootstrapping the FLPR core. +Snippet's primary function is to enable the code that transfers the FLPR code to the designated region (if necessary) and to initiate the FLPR core. + +When building for the ``nrf54l15dk/nrf54l15/cpuflpr`` target, a minimal sample is automatically loaded onto the application core. +See more information on :ref:`building_nrf54l_app_flpr_core`. + +Using MCUboot with FLPR +*********************** + +To ensure that MCUboot functions correctly with a FLPR-integrated application, several manual configurations are necessary. +For details, see :ref:`nRF54l_signing_app_with_flpr_payload`. + +Memory allocation +***************** + +If a FLPR CPU is running, it can lead to increased latency when accessing ``RAM_01``. +Because of this, when FLPR is used in a project, you should utilize ``RAM_01`` to store only the FLPR code, FLPR data, and the application CPU's non-time-sensitive information. +Conversely, you should use ``RAM_00`` to store data with strict access time requirements such as DMA buffers, and the application CPU data used in low-latency ISRs. diff --git a/doc/nrf/app_dev/device_guides/nrf54l/zms.rst b/doc/nrf/app_dev/device_guides/nrf54l/zms.rst new file mode 100644 index 000000000000..701d1533cc3b --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf54l/zms.rst @@ -0,0 +1,78 @@ +.. _memory_storage: + +Enabling Zephyr Memory Storage +############################## + +.. contents:: + :local: + :depth: 2 + +For nRF54L Series, you should use the :ref:`Zephyr Memory Storage (ZMS) `. +ZMS utilizes a flexible data management system that reduces write and erase cycles, extending the lifespan of non-volatile memory. + +.. note:: + + If you are using the :ref:`Non-Volatile Storage (NVS) `, ensure to switch to the ZMS solution. + +Enabling the ZMS module +*********************** + +You can enable the ZMS module for your application in two ways - directly through ZMS or through the :ref:`Settings subsystem `. +Additionally, you can optimize the application performance using caching mechanism: + +.. tabs:: + + .. group-tab:: Using storage directly through ZMS + + 1. Enable the :kconfig:option:`CONFIG_ZMS` Kconfig option in your project's configuration file. + #. Optionally, enable the lookup cache to increase the application performance: + + a. Enable the :kconfig:option:`CONFIG_ZMS_LOOKUP_CACHE` Kconfig option. + #. Set the lookup cache size in :kconfig:option:`CONFIG_ZMS_LOOKUP_CACHE_SIZE` depending on your application needs. + + .. group-tab:: Using storage through Settings subsystem + + 1. Enable the :kconfig:option:`CONFIG_ZMS` Kconfig option in your project's configuration file. + #. Enable ZMS within the Settings subsystem with the :kconfig:option:`CONFIG_SETTINGS_ZMS` Kconfig option. + #. Optionally, enable the lookup cache to increase the application performance: + + a. Enable the :kconfig:option:`CONFIG_ZMS_LOOKUP_CACHE` Kconfig option. + #. Set the lookup cache size in :kconfig:option:`CONFIG_ZMS_LOOKUP_CACHE_SIZE` depending on your application needs. + #. Ensure the lookup cache is configured to support the Setting subsystem by enabling the :kconfig:option:`CONFIG_ZMS_LOOKUP_CACHE_FOR_SETTINGS` Kconfig option. + + #. To further enhance the performance, enable the :kconfig:option:`CONFIG_SETTINGS_ZMS_NAME_CACHE` Kconfig option, and configure its size with :kconfig:option:`CONFIG_SETTINGS_ZMS_NAME_CACHE_SIZE` according to your application needs. + +Optimizing ZMS in your application +********************************** + +When integrating ZMS through the Settings subsystem in your application, you might need to optimize its performance. +The following sections include the best practices to enhance ZMS performance. + +Sector size and count +===================== + +To ensure optimal performance from ZMS, consider the following: + +* Storage partition sizing - The total storage partition size and the sector size should be carefully dimensioned to optimize ZMS performance. + For detailed instructions on managing free space effectively within ZMS, refer to the :ref:`ZMS ` documentation. + You should choose a storage partition capable of holding double the size of the key-value pairs expected to be written. + +* Entry management - In subsystems like Settings, all path-value pairs are split into two ZMS entries (ATEs). + You should include the extra header needed by these entries in your total storage space calculations. + +* Optimizing data storage - Storing small data directly in the ZMS entry headers can significantly enhance performance. + For instance, in the Settings subsystem, using a path name of 8 bytes or less can speed up read and write operations. + +Dimensioning cache +================== + +Proper cache sizing is critical for maintaining high performance and efficient memory usage in ZMS: + +* Cache size determination - Ideally, the cache size should match the number of different entries that could be written to the storage. + This ensures efficient data retrieval and storage operations. + +* Memory considerations - Each cache entry consumes an additional 8 bytes of RAM. + Therefore, you should choose the cache size to balance performance with memory usage effectively. + +* Settings subsystem specifics - When using ZMS through the Settings subsystem, remember that each entry translates into two ZMS entries. + Consequently, the optimal cache size should be twice the number of Settings entries to accommodate this division effectively. diff --git a/doc/nrf/app_dev/device_guides/nrf70/features.rst b/doc/nrf/app_dev/device_guides/nrf70/features.rst index 7a3083818b0a..756b0b0c1790 100644 --- a/doc/nrf/app_dev/device_guides/nrf70/features.rst +++ b/doc/nrf/app_dev/device_guides/nrf70/features.rst @@ -49,7 +49,45 @@ The nRF70 Series devices also support the following functionalities: * :ref:`ug_nrf70_developing_raw_ieee_80211_packet_transmission`: Allows the injection of raw IEEE 802.11 frames in Station and Monitor modes. * :ref:`Promiscuous reception `: Allows the reception of IEEE 802.11 packets from a connected BSSID when operating in Station mode. +* :ref:`Offloaded raw transmission `: Allows the offloading of raw IEEE 802.11 frame transmission to the nRF Wi-Fi driver. +* :ref:`Wi-Fi advanced security modes `: Allows the use of advanced security modes, certificate-based Wi-Fi security, and the Platform Security Architecture (PSA) security framework. Peer-to-peer support in the form of Wi-Fi Direct® will be available in the future. See the :ref:`ug_wifi` documentation for more information related to Wi-Fi modes of operation. + +.. _ug_nrf70_features_hostap: + +hostap +****** + +The nRF70 Series devices use the `WPA Supplicant`_ to implement full Wi-Fi functionality. +The WPA supplicant is part of the ``hostap`` project and is a widely used implementation of the IEEE 802.11i standard for wireless LAN security. +The WPA supplicant is a software component that implements the Wi-Fi Protected Access (WPA™), WPA2™ and WPA3™ security protocols. + +The nRF70 Series devices use `Zephyr hostap fork`_, a fork of the hostap project that is integrated with the Zephyr RTOS. +The WPA supplicant is integrated with the Zephyr RTOS and registers as a Wi-Fi network manager in the Zephyr networking stack. +See `Zephyr Wi-Fi NM API`_ for details. +The `Zephyr Wi-Fi management`_ layer in Zephyr uses the Wi-Fi network manager to manage the Wi-Fi interface. + +The nRF70 Series driver registers as a Wi-Fi device in the Zephyr networking stack and provides the Wi-Fi interface to the WPA supplicant. +The WPA supplicant then manages the Wi-Fi interface and provides the Wi-Fi functionality to the application. + +.. note:: + + The WPA supplicant is only used for System mode to offer full Wi-Fi functionality. + It is not used in other modes, for example, Scan-only mode. + +Supported hostap features in the |NCS| +====================================== + +The `Zephyr hostap fork`_ supports a wide range of Wi-Fi features and functionalities. +The nRF70 Series devices use the Zephyr hostap fork but only implement a subset of the features supported by the fork. + +The nRF70 Series devices support the following features: + +* Wi-Fi 6 support. +* Station mode. +* SoftAP mode - Based on ``wpa_supplicant``. +* WPA2-PSK and WPA3-SAE security modes. +* WPA2-EAP-TLS security mode. diff --git a/doc/nrf/app_dev/device_guides/nrf70/fw_patches_ext_flash.rst b/doc/nrf/app_dev/device_guides/nrf70/fw_patches_ext_flash.rst index 2cbb70ea0ea7..0a97feedf309 100644 --- a/doc/nrf/app_dev/device_guides/nrf70/fw_patches_ext_flash.rst +++ b/doc/nrf/app_dev/device_guides/nrf70/fw_patches_ext_flash.rst @@ -188,6 +188,9 @@ For example, for nrfjprog: nrfjprog -f nrf53 -s 0 --program build/merged.hex ---sectorerase --qspisectorerase --verify --reset +.. note:: + |nrfjprog_deprecation_note| + Updating firmware patches ========================= diff --git a/doc/nrf/app_dev/device_guides/nrf70/index.rst b/doc/nrf/app_dev/device_guides/nrf70/index.rst index 50a2ec8bb55e..19c312be0b72 100644 --- a/doc/nrf/app_dev/device_guides/nrf70/index.rst +++ b/doc/nrf/app_dev/device_guides/nrf70/index.rst @@ -35,28 +35,28 @@ Zephyr and the |NCS| provide support for developing networking applications with - PCA10095 - ``nrf5340dk/nrf5340/cpuapp`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ * - :ref:`zephyr:nrf52840dk_nrf52840` - nRF7002 EK - PCA10056 - ``nrf52840dk/nrf52840`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ * - :ref:`zephyr:nrf9151dk_nrf9151` - nRF7002 EK - PCA10171 - ``nrf9151dk/nrf9151/ns`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ * - :ref:`zephyr:nrf9161dk_nrf9161` - nRF7002 EK - PCA10153 - ``nrf9161dk/nrf9161/ns`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ * - :ref:`zephyr:nrf9160dk_nrf9160` - nRF7002 EK @@ -77,11 +77,13 @@ Zephyr and the |NCS| provide support for developing networking applications with - ``nrf54h20dk/nrf54h20/cpuapp`` - | `nRF54H20 Objective Product Specification 0.3.1`_ | :ref:`Getting started ` - * - :ref:`zephyr:nrf54l15pdk_nrf54l15` + * - :ref:`zephyr:nrf54l15dk_nrf54l15` - nRF7002 EB - PCA20053 - - ``nrf54l15pdk/nrf54l15/cpuapp`` - - :ref:`Getting started ` + - ``nrf54l15dk/nrf54l15/cpuapp`` + - | `Quick Start app`_ + | :ref:`Developing with nRF54L Series ` + The following nRF70 Series shields are available and defined in the :file:`nrf/boards/shields` folder: @@ -110,7 +112,7 @@ The following nRF70 Series shields are available and defined in the :file:`nrf/b | `User Guide `_ * - nRF7002 :term:`Expansion Board (EB)` - PCA63561 - - ``nrf7002eb``, ``nrf700x_nrf54h20dk``, ``nrf700x_nrf54l15pdk`` + - ``nrf7002eb``, ``nrf7002eb_interposer_p1`` (nRF54 Series) - | :ref:`Development guide ` | `User Guide `_ @@ -130,3 +132,4 @@ The following subpages cover topics related to developing applications with the power_profiling nrf7002ek_dev_guide nrf7002eb_dev_guide + wifi_advanced_security_modes diff --git a/doc/nrf/app_dev/device_guides/nrf70/nrf7002eb_dev_guide.rst b/doc/nrf/app_dev/device_guides/nrf70/nrf7002eb_dev_guide.rst index b808e0fea55f..7ff072699769 100644 --- a/doc/nrf/app_dev/device_guides/nrf70/nrf7002eb_dev_guide.rst +++ b/doc/nrf/app_dev/device_guides/nrf70/nrf7002eb_dev_guide.rst @@ -1,5 +1,5 @@ .. _ug_nrf7002eb_gs: -.. _ug_nrf7002eb_nrf54l15pdk_gs: +.. _ug_nrf7002eb_nrf54l15dk_gs: .. _ug_nrf7002eb_nrf54h20dk_gs: Developing with nRF7002 EB @@ -12,7 +12,7 @@ Developing with nRF7002 EB The nRF7002 :term:`Expansion Board (EB)` (PCA63561), part of the `nRF70 Series Family `_, can be used to provide Wi-Fi® connectivity to compatible development or evaluation boards through the nRF7002 Wi-Fi 6 companion IC. For example, you can use it with the :ref:`Nordic Thingy:53 `, an IoT prototyping platform from Nordic Semiconductor. -You can also use the nRF7002 EB to provide Wi-Fi connectivity to the :ref:`zephyr:nrf54h20dk_nrf54h20` and :ref:`zephyr:nrf54l15pdk_nrf54l15`. +You can also use the nRF7002 EB to provide Wi-Fi connectivity to the :ref:`zephyr:nrf54h20dk_nrf54h20` and :ref:`zephyr:nrf54l15dk_nrf54l15`. .. figure:: images/nRF7002eb.png :alt: nRF7002 EB @@ -29,10 +29,10 @@ The castellated holes on the side of the board allow the EB to be used as a brea This way, you can provide Wi-Fi capabilities to develop Wi-Fi applications with another System on Chip (SoC), MPU, or MCU host. For the pinout of the castellated holes, see `nRF7002 EB castellated edge holes`_ in the board's `Hardware User Guide `_. -Pin mapping for the nRF54H20 DK and the nRF54L15 PDK -**************************************************** +Pin mapping for the nRF54H20 DK and the nRF54L15 DK +*************************************************** -For nRF54H20 DK and nRF54L15 PDK, refer to the following tables for the pin mapping for these kits: +For nRF54H20 DK and nRF54L15 DK, refer to the following tables for the pin mapping for these kits: .. tabs:: @@ -65,10 +65,10 @@ For nRF54H20 DK and nRF54L15 PDK, refer to the following tables for the pin mapp .. note:: Connect ``VIO`` to 1.8 V and ``VBAT`` to 3.6 V and ``GND``. - .. group-tab:: nRF54L15 PDK + .. group-tab:: nRF54L15 DK +-----------------------------------+-------------------+-----------------------------------------------+ - | nRF70 Series pin name (EB name) | nRF54L15 PDK pins | Function | + | nRF70 Series pin name (EB name) | nRF54L15 DK pins | Function | +===================================+===================+===============================================+ | CLK (CLK) | P1.11 | SPI Clock | +-----------------------------------+-------------------+-----------------------------------------------+ @@ -116,19 +116,19 @@ Alternatively, add the shield in the project's :file:`CMakeLists.txt` file by us set(SHIELD nrf7002eb) -To build for the nRF7002 EB with nRF54H20 DK, use the ``nrf54h20dk/nrf54h20/cpuapp`` board target with the CMake ``SHIELD`` variable set to ``nrf700x_nrf54h20dk``. -To build for a custom target, set ``-DSHIELD=nrf700x_nrf54h20dk`` when you invoke ``west build`` or ``cmake`` in your |NCS| application. -Alternatively, you can add the shield in the project's :file:`CMakeLists.txt` file by using the ``set(SHIELD nrf700x_nrf54h20dk)`` command. +To build for the nRF7002 EB with nRF54H20 DK, use the ``nrf54h20dk/nrf54h20/cpuapp`` board target with the CMake ``SHIELD`` variable set to ``nrf7002eb_interposer_p1 nrf7002eb``. +To build for a custom target, set ``-DSHIELD="nrf7002eb_interposer_p1;nrf7002eb"`` when you invoke ``west build`` or ``cmake`` in your |NCS| application. +Alternatively, you can add the shield in the project's :file:`CMakeLists.txt` file by using the ``set(SHIELD nrf7002eb_interposer_p1 nrf7002eb)`` command. -To build for the nRF7002 EB with the nRF54L15 PDK, use the ``nrf54l15pdk/nrf54l15/cpuapp`` board target with the CMake ``SHIELD`` variable set to ``nrf700x_nrf54l15pdk``. -To build for a custom target, set ``-DSHIELD=nrf700x_nrf54l15pdk`` when you invoke ``west build`` or ``cmake`` in your |NCS| application. -Alternatively, you can add the shield in the project's :file:`CMakeLists.txt` file by using the ``set(SHIELD nrf700x_nrf54l15pdk)`` command. +To build for the nRF7002 EB with the nRF54L15 DK, use the ``nrf54l15dk/nrf54l15/cpuapp`` board target with the CMake ``SHIELD`` variable set to ``nrf7002eb_interposer_p1 nrf7002eb``. +To build for a custom target, set ``-DSHIELD="nrf7002eb_interposer_p1;nrf7002eb"`` when you invoke ``west build`` or ``cmake`` in your |NCS| application. +Alternatively, you can add the shield in the project's :file:`CMakeLists.txt` file by using the ``set(SHIELD nrf7002eb_interposer_p1 nrf7002eb)`` command. -Limitations when building with nRF54H20 DK and nRF54L15 PDK -*********************************************************** +Limitations when building with nRF54H20 DK and nRF54L15 DK +********************************************************** The Wi-Fi support is experimental and has the following limitations: * It only supports STA mode. * It is only suitable for low-throughput applications. -* For nRF54L15 PDK, WPA3 security mode is not supported. +* For nRF54L15 DK, WPA3 security mode is not supported. diff --git a/doc/nrf/app_dev/device_guides/nrf70/power_profiling.rst b/doc/nrf/app_dev/device_guides/nrf70/power_profiling.rst index 67fd0f5a04e5..cc34ee3c5522 100644 --- a/doc/nrf/app_dev/device_guides/nrf70/power_profiling.rst +++ b/doc/nrf/app_dev/device_guides/nrf70/power_profiling.rst @@ -32,7 +32,7 @@ To measure the power consumption of the nRF7002 DK, complete the following steps To reproduce the plots for DTIM period of 3, complete the following steps using the :ref:`wifi_shell_sample` sample: 1. Configure an AP with DTIM value of 3. - #. Connect to the AP using the following Wi-Fi shell commands: + #. Connect to the AP using the following Wi-Fi® shell commands: .. code-block:: console diff --git a/doc/nrf/app_dev/device_guides/nrf70/stack_partitioning.rst b/doc/nrf/app_dev/device_guides/nrf70/stack_partitioning.rst index 412f2630ea2c..78ba5ccc6d02 100644 --- a/doc/nrf/app_dev/device_guides/nrf70/stack_partitioning.rst +++ b/doc/nrf/app_dev/device_guides/nrf70/stack_partitioning.rst @@ -11,7 +11,7 @@ The nRF70 Series of wireless companion ICs implement the Physical (PHY) and Medi The higher layers of the networking stack, namely, the nRF Wi-Fi driver and supplicant, the TCP/IP stack, and the networking application layers, run on the host device. Data transfer between the host and the nRF70 companion device can occur through either SPI or QSPI interfaces. -The following figure illustrates the partitioning of the Wi-Fi stack between the nRF70 Series device and the host device: +The following figure illustrates the partitioning of the Wi-Fi® stack between the nRF70 Series device and the host device: .. figure:: images/nrf70_ug_overview.svg :alt: Overview of nRF70 application architecture diff --git a/doc/nrf/app_dev/device_guides/nrf70/wifi_advanced_security_modes.rst b/doc/nrf/app_dev/device_guides/nrf70/wifi_advanced_security_modes.rst new file mode 100644 index 000000000000..754854cfa9f7 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/nrf70/wifi_advanced_security_modes.rst @@ -0,0 +1,86 @@ +.. _ug_nrf70_wifi_advanced_security_modes: + +nRF70 Series advanced security modes +#################################### + +.. contents:: + :local: + :depth: 2 + +Enterprise security +******************* + +The nRF70 Series devices support Wi-Fi® enterprise security, which is a more secure form of Wi-Fi security compared to Wi-Fi personal security. +Wi-Fi enterprise security is used in corporate environments where the security requirements are more stringent. +It is based on the IEEE 802.1X standard, which defines the port-based network access control. + +The nRF70 Series devices support the following Wi-Fi enterprise security mode, ``WPA2-EAP-TLS``. +This mode uses the Extensible Authentication Protocol (EAP) with Transport Layer Security (TLS) for authentication. +The client and the authentication server exchange certificates to authenticate each other. + + +Enterprise testing: X.509 certificate headers generation +======================================================== + +Wi-Fi enterprise security requires use of X.509 certificates. +Test certificates in PEM format are available at :zephyr_file:`samples/net/wifi/test_certs/` repository. +During the build process, the certificates are converted to a C header file that is included in the Wi-Fi shell module or the :ref:`Wi-Fi credentials ` library. + +To use custom certificates, use the following commands: + +.. code-block:: bash + + $ cp client.pem samples/net/wifi/test_certs/ + $ cp client-key.pem samples/net/wifi/test_certs/ + $ cp ca.pem samples/net/wifi/test_certs/ + $ cp client.pem samples/net/wifi/test_certs/client2.pem + $ cp client-key.pem samples/net/wifi/test_certs/client-key2.pem + $ cp ca.pem samples/net/wifi/test_certs/ca2.pem + + $ west build -p -b samples/net/wifi -- -DEXTRA_CONF_FILE=overlay-enterprise.conf + +.. note:: + The EAP phase2 certificates (suffixed with 2) are unused in ``WPA2-EAP-TLS`` but are mandatory for building the sample application. + The phase1 certificates are copied as phase2 certificates to avoid build errors as a temporary workaround. + +To establish a Wi-Fi connection, use the following command: + +.. code-block:: console + + uart:~$ wifi connect -s -k 7 -a anon -K + +.. code-block:: console + + uart:~$ wifi_cred add -s -k 7 -a anon -K + + +.. note:: + + The Wi-Fi credentials only support 16characters for the anonymous identity and the key passphrase. + +The server certificate is also provided in the same directory for testing purposes. +You can use any AAA server for testing purposes, such as FreeRADIUS or hostapd. + +.. note:: + + The certificates are for testing purposes only and should not be used for production. + +.. _ug_nrf70_developing_wifi_psa_support: + +Platform Security Architecture (PSA) crypto support +*************************************************** + +The nRF70 Series devices support the `Platform Security Architecture (PSA)`_ security framework. +This framework provides a set of APIs for cryptographic operations, which are used by the nRF70 Series. +This improves the security of the nRF70 device compared to the non-PSA mode. + +.. note:: + + Currently, the PSA crypto support is only applicable to the WPA2™-personal security profile. + +Enable PSA support +================== + +To enable the nRF70 PSA crypto support in your applications, use the :kconfig:option:`CONFIG_HOSTAP_CRYPTO_ALT_PSA` Kconfig option. + +The Wi-Fi connection process is similar to the non-PSA mode, however, the only difference is that the cryptographic operations are performed using PSA crypto APIs. diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_navigationcertificatemanager_nrf9161.png b/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_navigationcertificatemanager_nrf9161.png deleted file mode 100644 index 77b2870afdb3..000000000000 Binary files a/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_navigationcertificatemanager_nrf9161.png and /dev/null differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_open_serial_terminal_nrf9161.png b/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_open_serial_terminal_nrf9161.png deleted file mode 100644 index 621d7f9b7283..000000000000 Binary files a/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_open_serial_terminal_nrf9161.png and /dev/null differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_selectdevice_nrf9161.png b/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_selectdevice_nrf9161.png deleted file mode 100644 index 45c55b0e9734..000000000000 Binary files a/doc/nrf/app_dev/device_guides/nrf91/images/cellularmonitor_selectdevice_nrf9161.png and /dev/null differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_erasewrite_nrf9151dk.png b/doc/nrf/app_dev/device_guides/nrf91/images/programmer_erasewrite_nrf9151dk.png new file mode 100644 index 000000000000..2be7fbec9ab2 Binary files /dev/null and b/doc/nrf/app_dev/device_guides/nrf91/images/programmer_erasewrite_nrf9151dk.png differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_hex_write_nrf9161.png b/doc/nrf/app_dev/device_guides/nrf91/images/programmer_hex_write_nrf9161.png deleted file mode 100644 index 2281b6e37f0c..000000000000 Binary files a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_hex_write_nrf9161.png and /dev/null differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device_nrf9161.png b/doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device_nrf9161.png deleted file mode 100644 index 513429363261..000000000000 Binary files a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device_nrf9161.png and /dev/null differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_thingy91_connect_dk_swd_vddio.svg b/doc/nrf/app_dev/device_guides/nrf91/images/programmer_thingy91_connect_dk_swd_vddio.svg deleted file mode 100644 index 3e5af225f46f..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_thingy91_connect_dk_swd_vddio.svg +++ /dev/null @@ -1,17789 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmerapp_modemdfu_nrf9161.png b/doc/nrf/app_dev/device_guides/nrf91/images/programmerapp_modemdfu_nrf9161.png deleted file mode 100644 index 1c73217e0aad..000000000000 Binary files a/doc/nrf/app_dev/device_guides/nrf91/images/programmerapp_modemdfu_nrf9161.png and /dev/null differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_pin_imei.svg b/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_pin_imei.svg deleted file mode 100644 index 74a83f47538e..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_pin_imei.svg +++ /dev/null @@ -1,4197 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_sw1_sw3.svg b/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_sw1_sw3.svg deleted file mode 100644 index df02af1f0d8c..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_sw1_sw3.svg +++ /dev/null @@ -1,3872 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_sw1_sw4.svg b/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_sw1_sw4.svg deleted file mode 100644 index 9ab0860edf19..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_sw1_sw4.svg +++ /dev/null @@ -1,3897 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/app_dev/device_guides/nrf91/index.rst b/doc/nrf/app_dev/device_guides/nrf91/index.rst index 1cba5ee4feac..4bc2031fdecb 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/index.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/index.rst @@ -1,8 +1,6 @@ .. _ug_nrf91: .. _ug_nrf9160: .. _ug_nrf9161: -.. _ug_thingy91: -.. _thingy91_ug_intro: Developing with nRF91 Series ############################ @@ -25,7 +23,7 @@ Zephyr and the |NCS| provide support for developing cellular applications using - PCA10153 - ``nrf9161dk/nrf9161``, ``nrf9161dk/nrf9161/ns`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ - | `nRF9161 DK product page`_ | `nRF9161 System in Package (SiP) `_ @@ -41,7 +39,7 @@ Zephyr and the |NCS| provide support for developing cellular applications using - PCA10171 - ``nrf9151dk/nrf9151``, ``nrf9151dk/nrf9151/ns`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ - | `nRF9151 DK product page`_ | `nRF9151 System in Package (SiP) `_ @@ -50,18 +48,6 @@ Zephyr and the |NCS| provide support for developing cellular applications using - ``nrf9131ek/nrf9131``, ``nrf9131ek/nrf9131/ns`` - -- - | `nRF9131 System in Package (SiP) `_ - * - Thingy:91 - - PCA20035 - - ``thingy91/nrf9160``, ``thingy91/nrf9160/ns`` - - | :ref:`Getting started ` - | `User Guide `_ - - | `Thingy\:91 product page`_ - | `nRF9160 System in Package (SiP) `_ - * - Thingy:91 X - - PCA20065 - - ``thingy91x/nrf9151``, ``thingy91x/nrf9151/ns`` - - -- - - | `nRF9151 System in Package (SiP) `_ The nRF Connect SDK also offers :ref:`samples ` dedicated to these devices, as well as compatible :ref:`drivers` and :ref:`libraries`. @@ -74,8 +60,7 @@ If you want to go through a hands-on online training to familiarize yourself wit nrf91_features nrf91_board_controllers nrf91_cloud_certificate - thingy91_connecting - nrf91_updating_fw_programmer + nrf91_dk_updating_fw_programmer nrf91_building nrf91_programming nrf91_testing_at_client diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_board_controllers.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_board_controllers.rst index 400fa2cce514..62996dd4b539 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_board_controllers.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/nrf91_board_controllers.rst @@ -23,7 +23,7 @@ The following sections have a complete list of configuration options available f * `Board control `_ in the nRF9151 DK Hardware guide The nRF5340 IMCU comes preprogrammed with J-Link SEGGER OB and board controller firmware. -If you want to change the default configuration of the DK, you can use the `nRF Connect Board Configurator`_ app in `nRF Connect for Desktop`_ . +If you want to change the default configuration of the DK, you can use the `Board Configurator app`_ in `nRF Connect for Desktop`_ . To update board controller firmware on the nRF9161 DK, download the `nRF9161 DK board controller firmware`_ from the nRF9161 DK downloads page. To program the HEX file, use `nRF Util`_. @@ -41,6 +41,9 @@ The nRF52840 SoC on the DK comes preprogrammed with a firmware. If you need to restore the original firmware at some point, download the `nRF9160 DK board controller firmware`_ from the nRF9160 DK downloads page. To program the HEX file, use nrfjprog (which is part of the `nRF Command Line Tools`_). +.. note:: + |nrfjprog_deprecation_note| + If you want to route some pins differently from what is done in the preprogrammed firmware, program the :zephyr:code-sample:`hello_world` sample instead of the preprogrammed firmware. Build the sample (located under :file:`ncs/zephyr/samples/hello_world`) for the ``nrf9160dk_nrf52840`` board target. To change the routing options, enable or disable the corresponding devicetree nodes for that board as needed. diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_building.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_building.rst index 5f0fb8601f6f..3d0f6dfbef00 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_building.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/nrf91_building.rst @@ -71,7 +71,7 @@ To perform a FOTA update, complete the following steps: See :ref:`upgradable_bootloader` for more information. #. Make the binary file (or files) available for download. - Upload the serialized :file:`.cbor` binary file or files to a web server that is compatible with the :ref:`lib_download_client` library. + Upload the serialized :file:`.cbor` binary file or files to a web server that is compatible with the :ref:`lib_downloader` library. The full FOTA procedure depends on where the binary files are hosted for download. diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_cloud_certificate.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_cloud_certificate.rst index 1938a3cc8352..0afd9c7c37c6 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_cloud_certificate.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/nrf91_cloud_certificate.rst @@ -92,7 +92,7 @@ After downloading the certificate, you must provision it to your DK. Complete the following steps to provision the certificate: -1. Start nRF Connect for Desktop and install the `Cellular Monitor`_ app. +1. Start nRF Connect for Desktop and install the `Cellular Monitor app`_. #. Open the Cellular Monitor app. #. Connect the DK to the computer with a micro-USB cable, and turn it on. #. Click :guilabel:`Select device` and select the DK from the drop-down list. @@ -102,36 +102,36 @@ Complete the following steps to provision the certificate: .. group-tab:: nRF91x1 DK .. figure:: images/cellularmonitor_selectdevice_nrf9151.png - :alt: Cellular Monitor - Select device (nRF9151 DK shown) + :alt: Cellular Monitor app - Select device (nRF9151 DK shown) - Cellular Monitor - Select device (nRF9151 DK shown) + Cellular Monitor app - Select device (nRF9151 DK shown) .. group-tab:: nRF9160 DK .. figure:: images/cellularmonitor_selectdevice1_nrf9160.png - :alt: Cellular Monitor - Select device + :alt: Cellular Monitor app - Select device - Cellular Monitor - Select device + Cellular Monitor app - Select device The drop-down text changes to the type of the selected device, with the SEGGER ID below the name. -#. Click the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor`_ app to open the Serial Terminal. +#. Click the :guilabel:`Open Serial Terminal` option of the `Cellular Monitor app`_ to open the Serial Terminal app. .. tabs:: .. group-tab:: nRF91x1 DK .. figure:: images/cellularmonitor_open_serial_terminal_nrf9151.png - :alt: Cellular Monitor - Open Serial Terminal (nRF9151 DK shown) + :alt: Cellular Monitor app - Open Serial Terminal (nRF9151 DK shown) - Cellular Monitor - Open Serial Terminal (nRF9151 DK shown) + Cellular Monitor app - Open Serial Terminal (nRF9151 DK shown) .. group-tab:: nRF9160 DK .. figure:: images/cellularmonitor_open_serial_terminal.png - :alt: Cellular Monitor - Open Serial Terminal (nRF9151 DK shown) + :alt: Cellular Monitor app - Open Serial Terminal (nRF9151 DK shown) - Cellular Monitor - Open Serial Terminal (nRF9151 DK shown) + Cellular Monitor app - Open Serial Terminal (nRF9151 DK shown) #. Enter ``AT+CFUN=4`` in the text field for AT commands and click :guilabel:`Send`. This AT command sets the modem to offline state. @@ -148,16 +148,16 @@ Complete the following steps to provision the certificate: .. group-tab:: nRF91x1 DK .. figure:: images/cellularmonitor_navigationcertificatemanager_nrf9151.png - :alt: Cellular Monitor - Certificate Manager (nRF9151 DK shown) + :alt: Cellular Monitor app - Certificate Manager (nRF9151 DK shown) - Cellular Monitor - Certificate Manager (nRF9151 DK shown) + Cellular Monitor app - Certificate Manager (nRF9151 DK shown) .. group-tab:: nRF9160 DK .. figure:: images/cellularmonitor_navigationcertificatemanager.png - :alt: Cellular Monitor - Certificate Manager + :alt: Cellular Monitor app - Certificate Manager - Cellular Monitor - Certificate Manager + Cellular Monitor app - Certificate Manager #. Click :guilabel:`Load from JSON` and select the :file:`*.cert.json` file that you downloaded from nRF Cloud. Alternatively, you can drag and drop the file onto the GUI. diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_dk_updating_fw_programmer.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_dk_updating_fw_programmer.rst index 4c984e5be131..88ae6c56c48d 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_dk_updating_fw_programmer.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/nrf91_dk_updating_fw_programmer.rst @@ -8,6 +8,7 @@ Updating the DK firmware using Programmer :local: :depth: 2 +Updating the firmware for nRF91 Series devices involves several key steps to ensure the device operates with the latest features, improvements, and security updates. Before you begin to update the firmware, download and extract the latest application and modem firmware from the `nRF9151 DK Downloads`_, `nRF9161 DK Downloads`_, or `nRF9160 DK Downloads`_ page, depending on the DK you are using. The downloaded ZIP archive contains the following firmware: @@ -53,7 +54,14 @@ Modem firmware The :file:`CONTENTS.txt` file in the extracted folder contains the location and names of the different firmware images. Complete the steps in the following sections to program applications using the Programmer app from `nRF Connect for Desktop`_. -You will need the following USB cables for this purpose: +The nRF Connect for Desktop requires `SEGGER J-Link`_ |jlink_ver|. + +* On Windows, the driver comes bundled with nRF Connect for Desktop. +* On macOS and Linux, you must install the driver manually. + +See the `nRF Connect for Desktop's additional requirements`_ section for more details on the SEGGER J-Link driver. + +You will also need the following USB cables: * nRF91x1 DK - USB-C cable * nRF9160 DK - micro-USB cable @@ -204,7 +212,18 @@ To update the application firmware using the Programmer app, complete the follow #. Click the :guilabel:`Erase & write` button in the **DEVICE** section to program the DK. Do not unplug or turn off the DK during this process. - .. figure:: images/programmer_erasewrite_nrf9160dk.png - :alt: Programmer - Erase & write + .. tabs:: + + .. group-tab:: nRF91x1 DK + + .. figure:: images/programmer_erasewrite_nrf9151dk.png + :alt: Programmer - Erase & write (nRF9151 DK shown) + + Programmer - Erase & write (nRF9151 DK shown) + + .. group-tab:: nRF9160 DK + + .. figure:: images/programmer_erasewrite_nrf9160dk.png + :alt: Programmer - Erase & write - Programmer - Erase & write + Programmer - Erase & write diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_features.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_features.rst index 34c7c555373b..bc1e9d5571c5 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_features.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/nrf91_features.rst @@ -71,7 +71,13 @@ Application =========== The user application runs in NSPE. -Therefore, it must be built for the ``nrf9151dk/nrf9151/ns``, ``nrf9161dk/nrf9161/ns``, ``nrf9160dk/nrf9160/ns``, or ``thingy91/nrf9160/ns`` board target, depending on the DK that you are using. +Therefore, you must build it for any of the following board targets, depending on the device that you are using: + +* ``nrf9151dk/nrf9151/ns`` +* ``nrf9161dk/nrf9161/ns`` +* ``nrf9160dk/nrf9160/ns`` +* ``thingy91/nrf9160/ns`` +* ``thingy91x/nrf9151/ns`` The application image might require other images to be present. Some samples include the :ref:`bootloader` sample (:kconfig:option:`CONFIG_SECURE_BOOT`) and :doc:`mcuboot:index-ncs` (:kconfig:option:`CONFIG_BOOTLOADER_MCUBOOT`). @@ -115,10 +121,10 @@ There are two ways to update the modem firmware: Full update You can use either a wired or a wireless connection to do a full update of the modem firmware: - * When using a wired connection, you can use either the `nRF Connect Programmer`_, which is part of `nRF Connect for Desktop`_, or the `nRF pynrfjprog`_ Python package. + * When using a wired connection, you can use either the `Programmer app`_, which is part of `nRF Connect for Desktop`_, or the `nRF pynrfjprog`_ Python package. Both methods use the Simple Management Protocol (SMP) to provide an interface over UART, which enables the device to perform the update. - * You can use the nRF Connect Programmer to perform the update, regardless of the images that are part of the existing firmware of the device. + * You can use the Programmer app to perform the update, regardless of the images that are part of the existing firmware of the device. For example, you can update the modem on an nRF9160 DK using the instructions described in the :ref:`nrf9160_updating_fw_modem` section. * You can also use the nRF pynrfjprog Python package to perform the update, as long as a custom application image integrating the ``lib_fmfu_mgmt`` subsystem is included in the existing firmware of the device. @@ -159,10 +165,6 @@ The band lock mask allows you to set the bands on which you want the modem to op Each bit in the :kconfig:option:`CONFIG_LTE_LOCK_BAND_MASK` option represents one band. The maximum length of the string is 88 characters (bit string, 88 bits). -For Thingy:91, you can configure the modem to use specific LTE bands by using the band lock AT command. -The preprogrammed firmware configures the modem to use the bands currently certified on the Thingy:91 hardware. -When building the firmware, you can configure which bands must be enabled. - For more detailed information, see the `band lock section in the nRF9160 AT Commands Reference Guide`_ or the `band lock section in the nRF91x1 AT Commands Reference Guide`_, depending on the SiP you are using. .. _nrf91_ug_network_mode: @@ -181,14 +183,6 @@ You can change the system mode and the LTE system mode preference using the ``AT For more detailed information, see the `system mode section in the nRF9160 AT Commands Reference Guide`_ or the `system mode section in the nRF91x1 AT Commands Reference Guide`_, depending on the SiP you are using. - -LTE-M / NB-IoT switching ------------------------- - -Thingy:91 has a multimode modem, which enables it to support automatic switching between LTE-M and NB-IoT. -A built-in parameter in the Thingy:91 firmware determines whether the modem first attempts to connect in LTE-M or NB-IoT mode. -If the modem fails to connect using this preferred mode within the default timeout period (10 minutes), the modem switches to the other mode. - Modem library ************* @@ -207,8 +201,8 @@ For more information on the integration, see :ref:`nrf_modem_lib_readme`. Modem trace =========== -The modem traces of the nRF91 Series modem can be captured using the Cellular Monitor. -For more information on how to collect traces using Cellular Monitor, see the `Cellular Monitor`_ documentation. +The modem traces of the nRF91 Series modem can be captured using the Cellular Monitor app. +For more information on how to do this, see the `Cellular Monitor app`_ documentation. To enable the modem traces in the modem and to forward them to the :ref:`modem_trace_module` over UART, include the ``nrf91-modem-trace-uart`` snippet while building your application as described in :ref:`nrf91_modem_trace_uart_snippet`. .. note:: @@ -262,9 +256,6 @@ Therefore, the performance is not ideal when there are obstructions overhead or Customers who are developing their own hardware with the nRF9160 are strongly recommended to use the `nRF9160 Antenna and RF Interface Guidelines`_ as a reference. See `GPS interface and antenna`_ for more details on GNSS interface and antenna. -Thingy:91 has a GNSS receiver, which allows the device to be located globally using GNSS signals if it is activated. -In :ref:`asset_tracker_v2`, the GNSS receiver is activated by default. - .. note:: Starting from |NCS| v1.6.0 (Modem library v1.2.0), the GNSS socket is deprecated and replaced with the :ref:`GNSS interface `. diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_programming.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_programming.rst index a0d459ee25df..f5abf1242a6c 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_programming.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/nrf91_programming.rst @@ -28,86 +28,3 @@ Selecting board controller on nRF9160 DK When programming on the nRF9160 DK, make sure to set the **SW10** switch (marked PROG/DEBUG) in the **nRF91** position to program the nRF9160 application. In nRF9160 DK board revision v0.9.0 and earlier, the switch is called **SW5**. - -.. _building_pgming: - -Programming onto Thingy:91 -************************** - -You can also program the Thingy:91 with the images obtained by building the code in an |NCS| environment. - -To set up your system to be able to build a compatible firmware image, follow the :ref:`installation` guide for the |NCS| and read the :ref:`configuration_and_build` documentation. -The build targets of interest for Thingy:91 in |NCS| are as follows: - -+---------------+---------------------------------------------------+ -|Component | Build target | -+===============+===================================================+ -|nRF9160 SiP |``thingy91/nrf9160/ns`` | -+---------------+---------------------------------------------------+ -|nRF52840 SoC |``thingy91/nrf52840`` | -+---------------+---------------------------------------------------+ - -You must use the build target ``thingy91/nrf9160/ns`` when building the application code for the nRF9160 SiP and the build target ``thingy91/nrf52840`` when building the application code for the onboard nRF52840 SoC. - -.. note:: - - * In |NCS| releases before v1.3.0, these build targets were named ``nrf9160_pca20035``, ``nrf9160_pca20035ns``, and ``nrf52840_pca20035``. - * In |NCS| releases ranging from v1.3.0 to v1.6.1, the build target ``thingy91/nrf9160/ns`` was named ``thingy91_nrf9160ns``. - -.. note:: - - LTE/GNSS features can only be used with :ref:`Cortex-M Security Extensions enabled ` (``_ns`` build target). - -The table below shows the different types of build files that are generated and the different scenarios in which they are used: - -+-----------------------+----------------------------------------+----------------------------------------------------------------+ -| File | File format | Programming scenario | -+=======================+========================================+================================================================+ -|:file:`merged.hex` | Full image, HEX format | Using an external debug probe and nRF Connect Programmer. | -+-----------------------+----------------------------------------+----------------------------------------------------------------+ -|:file:`app_signed.hex` | MCUboot compatible image, HEX format | Using the built-in bootloader and nRF Connect Programmer. | -+-----------------------+----------------------------------------+----------------------------------------------------------------+ -|:file:`app_update.bin` | MCUboot compatible image, binary format|* Using the built-in bootloader and mcumgr command line tool. | -| | |* For FOTA updates. | -+-----------------------+----------------------------------------+----------------------------------------------------------------+ - -For an overview of different types of build files in the |NCS|, see :ref:`app_build_output_files`. - -There are multiple methods of programming a sample or application onto a Thingy:91. -It is recommended to use an external debug probe to program the Thingy:91. - -.. note:: - - If you do not have an external debug probe available to program the Thingy:91, you can directly program by :ref:`using the USB (MCUboot) method and nRF Connect Programmer `. - In this scenario, use the :file:`app_signed.hex` firmware image file. - -.. note:: - - While building applications for Thingy:91, the build system changes the signing algorithm of MCUboot so that it uses the default RSA keys. - This is to ensure backward compatibility with the MCUboot versions that precede the |NCS| v1.4.0. - Use the default RSA keys only for development. - In a final product, you must use your own, secret keys. - See :ref:`ug_fw_update_development_keys` for more information. - -Complete the following steps to program firmware onto Thingy:91: - -.. include:: /includes/thingy91_prog_extdebugprobe.txt - -.. tabs:: - - .. group-tab:: nRF Connect for VS Code - - 5. In |nRFVSC|, click the :guilabel:`Flash` option in the **Actions View**. - - If you have multiple boards connected, you are prompted to pick a device at the top of the screen. - - A small notification banner appears in the bottom-right corner of |VSC| to display the progress and confirm when the flash is complete. - - .. group-tab:: Command line - - 5. |open_terminal_window_with_environment| - 6. Program the sample or application to the device using the following command:: - - west flash - - The device resets and runs the programmed sample or application. diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_snippet.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_snippet.rst index 05b5d51af7f8..7cef79420188 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_snippet.rst +++ b/doc/nrf/app_dev/device_guides/nrf91/nrf91_snippet.rst @@ -40,12 +40,31 @@ nRF91 modem traces with flash backend using snippets The ``nrf91-modem-trace-ext-flash`` snippet enables modem tracing, the flash backend, and external flash and configures them to store modem traces to a dedicated partition on the external flash for supported boards. To change the partition size, the project needs to configure the :kconfig:option:`CONFIG_NRF_MODEM_LIB_TRACE_BACKEND_FLASH_PARTITION_SIZE` Kconfig option. -To enable modem traces with the flash backend, use the following command pattern, where *board_target* corresponds to your board target and `` to your application image name: +To enable modem traces with the flash backend, add the ``nrf91-modem-trace-ext-flash`` snippet to the :term:`build configuration`. +You can do this in one of the following ways: -.. parsed-literal:: - :class: highlight +.. tabs:: + + .. group-tab:: west + + To add the modem traces with the flash backend snippet when building an application with west, use the following command pattern, where *board_target* corresponds to your board target and `` to your application image name: - west build --board *board_target* -- -D_SNIPPET="nrf91-modem-trace-ext-flash" + .. parsed-literal:: + :class: highlight + + west build --board *board_target* -- -D_SNIPPET="nrf91-modem-trace-ext-flash" + + .. group-tab:: CMake + + To add the modem traces with the flash backend snippet when building an application with CMake, add the following command to the CMake arguments: + + .. code-block:: console + + -D_SNIPPET="nrf91-modem-trace-ext-flash" [...] + + To build with the |nRFVSC|, specify ``-D_SNIPPET="nrf91-modem-trace-ext-flash" [...]`` in the **Extra CMake arguments** field. + + See :ref:`cmake_options` for more details. .. _nrf91_modem_trace_ram_snippet: @@ -55,12 +74,31 @@ nRF91 modem traces with RAM backend using snippets The ``nrf91-modem-trace-ram`` snippet enables modem tracing and configures it to store modem traces to a dedicated partition on the RAM. To change the partition size, the project needs to configure the :kconfig:option:`CONFIG_NRF_MODEM_LIB_TRACE_BACKEND_RAM_LENGTH` Kconfig option. -To enable modem traces with the RAM backend, use the following command pattern, where *board_target* corresponds to your board target and `` to your application image name: +To enable modem traces with the RAM backend, add the ``nrf91-modem-trace-ram`` snippet to the :term:`build configuration`. +You can do this in one of the following ways: -.. parsed-literal:: - :class: highlight +.. tabs:: + + .. group-tab:: west + + To add modem traces with the RAM backend when building an application with west, use the following command pattern, where *board_target* corresponds to your board target and `` to your application image name: - west build --board *board_target* -- -D_SNIPPET="nrf91-modem-trace-ram" + .. parsed-literal:: + :class: highlight + + west build --board *board_target* -- -D_SNIPPET="nrf91-modem-trace-ram" + + .. group-tab:: CMake + + To add the modem traces with the RAM backend snippet when building an application with CMake, add the following command to the CMake arguments: + + .. code-block:: console + + -D_SNIPPET="nrf91-modem-trace-ram" [...] + + To build with the |nRFVSC|, specify ``-D_SNIPPET="nrf91-modem-trace-ram" [...]`` in the **Extra CMake arguments** field. + + See :ref:`cmake_options` for more details. .. _nrf91_modem_trace_uart_snippet: @@ -74,8 +112,8 @@ If this configuration does not match your requirements, you can add a snippet or .. note:: If you are using the nRF9160 DK, remember to :ref:`set the board controller switch to the **nRF91** position ` before programming. -To enable modem tracing with the UART trace backend on a nRF91 device, add the ``nrf91-modem-trace-uart`` snippet to the :term:`build configuration`. -This can be done in one of the following ways: +To enable modem tracing with the UART trace backend on a nRF91 Series device, add the ``nrf91-modem-trace-uart`` snippet to the :term:`build configuration`. +You can do this in one of the following ways: .. tabs:: @@ -98,7 +136,7 @@ This can be done in one of the following ways: .. code-block:: console - -D_SNIPPET="nrf91-modem-trace-uart" [...] + -D_SNIPPET="nrf91-modem-trace-uart" [...] To build with the |nRFVSC|, specify ``-D_SNIPPET="nrf91-modem-trace-uart" [...]`` in the **Extra CMake arguments** field. @@ -111,22 +149,61 @@ nRF91 modem traces with RTT backend using snippets The ``nrf91-modem-trace-rtt`` snippet enables the :kconfig:option:`CONFIG_NRF_MODEM_LIB_TRACE` Kconfig option and chooses the RTT trace backend with the necessary Kconfig options. -To enable modem traces with the RTT backend, use the following command pattern, where *board_target* corresponds to your board target and `` to your application image name: +To enable modem tracing with the RTT backend, add the ``nrf91-modem-trace-rtt`` snippet to the :term:`build configuration`. +You can do this in one of the following ways: -.. parsed-literal:: - :class: highlight +.. tabs:: + + .. group-tab:: west + + To add modem traces with the RTT backend when building an application with west, use the following command pattern, where *board_target* corresponds to your board target and `` to your application image name: - west build --board *board_target* -- -D_SNIPPET="nrf91-modem-trace-rtt" + .. parsed-literal:: + :class: highlight + + west build --board *board_target* -- -D_SNIPPET="nrf91-modem-trace-rtt" + + .. group-tab:: CMake + + To add the modem traces with the RTT backend snippet when building an application with CMake, add the following command to the CMake arguments: + + .. code-block:: console + + -D_SNIPPET="nrf91-modem-trace-rtt" [...] + + To build with the |nRFVSC|, specify ``-D_SNIPPET="nrf91-modem-trace-rtt" [...]`` in the **Extra CMake arguments** field. + + See :ref:`cmake_options` for more details. .. _tfm_enable_share_uart: Shared UART for application and TF-M logging ******************************************** -If you want to activate TF-M logging while having modem traces enabled, it can be useful to direct the TF-M logs to the UART (**UART0**) used by the application. -To activate both modem traces and TF-M logs, use the following command pattern, where *board_target* corresponds to your board target: +If you want to activate TF-M logging while having modem traces with the UART backend enabled, it can be useful to direct the TF-M logs to the UART (**UART0**) used by the application. + +To enable modem traces and TF-M logs, add the ``nrf91-modem-trace-uart`` and ``tfm-enable-share-uart`` snippets to the :term:`build configuration`. +You can do this in one of the following ways: -.. parsed-literal:: - :class: highlight +.. tabs:: - west build --board *board_target* -S nrf91-modem-trace-uart -S tfm-enable-share-uart + .. group-tab:: west + + To activate both modem traces and TF-M logs when building an application with west, use the following command pattern, where *board_target* corresponds to your board target: + + .. parsed-literal:: + :class: highlight + + west build --board *board_target* -S nrf91-modem-trace-uart -S tfm-enable-share-uart + + .. group-tab:: CMake + + To activate TF-M logs when building an application with CMake, add the following command to the CMake arguments: + + .. code-block:: console + + -D_SNIPPET="tfm-enable-share-uart" [...] + + To build with the |nRFVSC|, specify ``-D_SNIPPET="tfm-enable-share-uart" [...]`` in the **Extra CMake arguments** field. + + See :ref:`cmake_options` for more details. diff --git a/doc/nrf/app_dev/device_guides/nrf91/nrf91_updating_fw_programmer.rst b/doc/nrf/app_dev/device_guides/nrf91/nrf91_updating_fw_programmer.rst deleted file mode 100644 index 2add5dc811b9..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf91/nrf91_updating_fw_programmer.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. _nrf91_updating_fw_programmer: - -Updating the firmware for nRF91 Series devices -############################################## - -Updating the firmware for nRF91 Series devices involves several key steps to ensure the device operates with the latest features, improvements, and security updates. -The latest firmware binary compatible with the nRF91 Series device are available on the following pages: - -* `nRF9151 DK Downloads`_ -* `nRF9161 DK Downloads`_ -* `nRF9160 DK Downloads`_ - -You can update the firmware using the Programmer app from `nRF Connect for Desktop`_ download. - -See the subpages for detailed documentation on how to update the application and modem firmware for nRF91 Series devices: - -.. toctree:: - :maxdepth: 1 - :caption: Subpages: - - nrf91_dk_updating_fw_programmer - thingy91_updating_fw_programmer diff --git a/doc/nrf/app_dev/device_guides/nrf91/thingy91_connecting.rst b/doc/nrf/app_dev/device_guides/nrf91/thingy91_connecting.rst deleted file mode 100644 index dcfde8b82d7a..000000000000 --- a/doc/nrf/app_dev/device_guides/nrf91/thingy91_connecting.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. _thingy91_serialports: - -Connecting to Thingy:91 -####################### - -.. contents:: - :local: - :depth: 2 - -You can connect to Thingy:91 wirelessly (using the `nRF Toolbox`_ app) or over a serial connection (using `nRF Connect Serial Terminal`_, `Cellular Monitor`_, or a serial terminal). - -Using nRF Toolbox -***************** - -To connect to your Thingy:91 wirelessly, you need to meet the following prerequisites: - -* The :ref:`connectivity_bridge` installed on your Thingy:91. -* The :ref:`nus_service_readme` enabled. - - .. note:: - By default, the Bluetooth LE interface is off, as the connection is not encrypted or authenticated. - To turn it on at runtime, set the appropriate option in the :file:`Config.txt` file located on the USB Mass storage Device. - -Using a serial terminal -*********************** - -If you prefer to use a standard serial terminal, you need to specify the baud rate manually. - -Thingy:91 uses the following UART baud rate configuration: - -.. list-table:: - :header-rows: 1 - :align: center - - * - UART Interface - - Baud Rate - * - UART_0 - - 115200 - * - UART_1 - - 1000000 - -Using nRF Connect Serial Terminal -********************************* - -You can use the `nRF Connect Serial Terminal`_ application to get debug output and send AT commands to the Thingy:91. -In the case of nRF Connect Serial Terminal or Cellular Monitor, the baud rate for the communication is set automatically. diff --git a/doc/nrf/app_dev/device_guides/pmic/npm1300.rst b/doc/nrf/app_dev/device_guides/pmic/npm1300.rst index 0ce6837aae32..39adde384126 100644 --- a/doc/nrf/app_dev/device_guides/pmic/npm1300.rst +++ b/doc/nrf/app_dev/device_guides/pmic/npm1300.rst @@ -53,32 +53,31 @@ The following boards in the `Zephyr`_ open source project and in the |NCS| are c | ``nrf54h20dk_nrf54h20_cpuppr`` - | `Objective Product Specification `_ | :ref:`Getting started ` - * - :ref:`zephyr:nrf54l15pdk_nrf54l15` + * - :ref:`zephyr:nrf54l15dk_nrf54l15` - nPM1300 EK - PCA10156 - - | ``nrf54l15pdk/nrf54l15/cpuapp`` for the PDK revision v0.2.1, AB0-ES7 (Engineering A). - | ``nrf54l15pdk@0.3.0/nrf54l15/cpuapp`` for the PDK revisions v0.3.0 and v0.7.0 (Engineering A). + - | ``nrf54l15dk/nrf54l15/cpuapp`` - -- * - :ref:`zephyr:nrf5340dk_nrf5340` - nPM1300 EK - PCA10095 - ``nrf5340dk/nrf5340/cpuapp`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ * - :ref:`zephyr:nrf52840dk_nrf52840` - nPM1300 EK - PCA10056 - ``nrf52840dk/nrf52840`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ * - :ref:`zephyr:nrf52dk_nrf52832` - nPM1300 EK - PCA10040 - ``nrf52dk/nrf52832`` - | `Product Specification `_ - | `Quick Start`_ + | `Quick Start app`_ | `User Guide `_ PMIC samples and libraries @@ -91,17 +90,17 @@ The |NCS| also provides the :ref:`nrfxlib:nrf_fuel_gauge` that processes battery PMIC tools ********** -The :ref:`nrfxlib:nrf_fuel_gauge` is supported by the `nPM PowerUP`_ application from `nRF Connect for Desktop`_. +The :ref:`nrfxlib:nrf_fuel_gauge` is supported by the `nPM PowerUP app`_ in `nRF Connect for Desktop`_. You can use this application together with the library to derive a battery model for your product. For this purpose, you can use the nPM1300 EK either alone (to use the built-in battery models) or together with the additional `nPM Fuel Gauge Board`_ (to generate a custom battery model). See `Evaluate nPM1300 using nPM PowerUP`_ in the `nPM1300 EK User Guide`_ for more information. .. _ug_npm1300_developing_overlay_import: -Importing an overlay from nPM PowerUP -===================================== +Importing an overlay from the nPM PowerUP app +============================================= -The nPM PowerUP application from nRF Connect for Desktop supports exporting a full configuration of the nPM1300 in devicetree overlay format. +The nPM PowerUP app from nRF Connect for Desktop supports exporting a full configuration of the nPM1300 in devicetree overlay format. You can use this exported overlay file to quickly configure the nPM1300 in your application. If there is no overlay file for your project, include the file directly in your application folder with the name :file:`app.overlay`. diff --git a/doc/nrf/app_dev/device_guides/thingy53/building_thingy53.rst b/doc/nrf/app_dev/device_guides/thingy53/building_thingy53.rst new file mode 100644 index 000000000000..f860411da205 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy53/building_thingy53.rst @@ -0,0 +1,214 @@ +.. _thingy53_building_pgming: + +Building and programming with Thingy:53 +####################################### + +.. contents:: + :local: + :depth: 2 + +You can program the Nordic Thingy:53 by using the images obtained by building the code in the |NCS| environment. + +To set up your system to be able to build a firmware image, follow the :ref:`installation` guide for the |NCS|. + +.. _thingy53_build_pgm_targets: + +Board targets +************* + +The board targets of interest for Thingy:53 in the |NCS| are listed in the following table: + ++--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+ +|Component | Board target | ++================================+==================================================================================================================================+ +| nRF5340 SoC - Application core |``thingy53/nrf5340/cpuapp`` for :ref:`Cortex-M Security Extensions (CMSE) disabled ` | +| | | +| |``thingy53/nrf5340/cpuapp/ns`` for :ref:`CMSE enabled ` | ++--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+ +| nRF5340 SoC - Network core |``thingy53/nrf5340/cpunet`` | ++--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+ + +The |NCS| uses :ref:`ug_multi_image` for Thingy:53 by default. +When you choose ``thingy53/nrf5340/cpuapp`` or ``thingy53/nrf5340/cpuapp/ns`` as the board target when building a sample or application, you will generate firmware for both the application core and network core: + +* The application core firmware consists of MCUboot bootloader and an application image. +* The network core firmware consists of network core bootloader (B0n) and application firmware of the network core. + +The build process generates firmware in two formats: + +* Intel Hex file (:file:`merged.hex` and :file:`merged_CPUNET.hex`) - Used with an external debug probe. + These file contains bootloaders and applications for each core. +* Binary files (:file:`zephyr.signed.bin`), containing signed application firmwares for the application and network core, respectively. + For convenience, the binary files are bundled in :file:`dfu_application.zip`, together with a manifest that describes them. + You can use the binary files or the combined zip archive to update application firmware for both cores, with either MCUboot serial recovery or OTA DFU using Bluetooth® LE. + +For more information about files generated as output of the build process, see :ref:`app_build_output_files`. + +See the following sections for details regarding building and programming the firmware for Thingy:53 in various environments. + +.. _thingy53_build_pgm_targets_wifi: + +Building Wi-Fi applications on Thingy:53 +======================================== + +You can use the Nordic Thingy:53 with the nRF7002 Expansion Board (EB) for Wi-Fi development. +Connect the nRF7002 EB to the **P9** connector on Thingy:53. + +To build for the nRF7002 EB with Thingy:53, use the ``thingy53/nrf5340/cpuapp`` board target with the CMake ``SHIELD`` variable set to ``nrf7002eb``. +For example, you can use the following command when building on the command line: + +.. code-block:: + + west build -b thingy53/nrf5340/cpuapp -- -DSHIELD=nrf7002eb + +For the compatible Wi-Fi samples in the |NCS|, see the :ref:`wifi_samples` section. + +.. _thingy53_app_update: + +Programming methods for Thingy:53 +********************************* + +You can program the firmware on the Nordic Thingy:53 using an external debug probe and a 10-pin JTAG cable, using :ref:`Visual Studio Code `, :ref:`command line `, or the `Programmer app `_ from nRF Connect for Desktop. +You can also program applications running on both the network and application core using the built-in MCUboot serial recovery mode, using the `Programmer app`_ from nRF Connect for Desktop or `nRF Util `_. + +Finally, you can use the `Programmer app`_ from nRF Connect for Desktop, the `nRF Programmer`_ mobile app for Android and iOS, or nRF Util to update the :ref:`preloaded application images `. + +.. _thingy53_app_update_debug: + +Firmware update using external debug probe +========================================== + +You can program the firmware on the Nordic Thingy:53 using an external debug probe and a 10-pin JTAG cable. +In such cases, you can program the Thingy:53 the same way as the nRF5340 DK. + +The external debug probe must support Arm Cortex-M33 (such as the nRF5340 DK). +You need a 10-pin 2x5 socket-to-socket 1.27 mm IDC (:term:`Serial Wire Debug (SWD)`) JTAG cable to connect to the external debug probe. + +This method is supported when programming with :ref:`Visual Studio Code `, :ref:`command line `, or the `Programmer app `_ from nRF Connect for Desktop. + +See also :ref:`ug_nrf5340` for additional information. + +.. _thingy53_app_update_mcuboot: + +Firmware update using MCUboot bootloader +======================================== + +Samples and applications built for Thingy:53 include the MCUboot bootloader that you can use to update the firmware out of the box. +This method uses signed binary files :file:`app_update.bin` and :file:`net_core_app_update.bin` (or :file:`dfu_application.zip`). +You can program the precompiled firmware image in one of the following ways: + +* Use the :doc:`MCUboot` feature and the built-in serial recovery mode of Thingy:53. + In this scenario, the Thingy is connected directly to your PC through USB. + For details, refer to the :ref:`thingy53_app_mcuboot_bootloader` section. + + See `Programming Nordic Thingy:53`_ in the `Programmer app`_ for the detailed procedures on how to program the Thingy:53 using nRF Connect for Desktop. + +* Update the firmware over-the-air (OTA) using Bluetooth LE and the nRF Programmer mobile application for Android or iOS. + To use this method, the application that is currently programmed on Thingy:53 must support it. + For details, refer to the :ref:`thingy53_app_fota_smp` section. + All precompiled images support OTA using Bluetooth. + + See the :ref:`thingy53_gs_updating_ble` section for the detailed procedures on how to program a Thingy:53 using the `nRF Programmer`_ mobile app for Android or iOS. + +.. _thingy53_build_pgm_vscode: + +Building and programming using |VSC| +************************************ + +Complete the following steps to build and program using the |nRFVSC|: + +.. |sample_path_vsc| replace:: :file:`nrf/samples/bluetooth/peripheral_lbs` + +.. |vsc_sample_board_target_line| replace:: select ``thingy53/nrf5340/cpuapp`` as the board target + +.. include:: /includes/vsc_build_and_run.txt + +3. Program the sample or application: + + a. Connect the Nordic Thingy:53 to the debug out port on a 10-pin external debug probe, for example nRF5340 DK, using a 10-pin JTAG cable. + + .. figure:: ./images/thingy53_nrf5340_dk.webp + :alt: Nordic Thingy:53 connected to the debug port on a 10-pin external debug probe + + Nordic Thingy:53 connected to the debug port on a 10-pin external debug probe + + #. Connect the external debug probe to the PC using a micro-USB cable. + #. Make sure that the Thingy:53 and the external debug probe are powered on. + (On the Thingy:53, move the power switch **SW1** to the **ON** position.) + #. Click :guilabel:`Flash` in the :guilabel:`Actions View`. + +.. _thingy53_build_pgm_command_line: + +Building and programming on the command line +******************************************** + +You must :ref:`build_environment_cli` before you start building an |NCS| project on the command line. + +To build and program the source code from the command line, complete the following steps: + +1. |open_terminal_window_with_environment| +#. Go to the specific directory for the sample or application. + + For example, the directory path is :file:`ncs/nrf/applications/machine_learning` when building the source code for the :ref:`nrf_machine_learning_app` application. + +#. Make sure that you have the required version of the |NCS| repository by pulling the ``sdk-nrf`` repository on GitHub as described in :ref:`dm-wf-get-ncs` and :ref:`dm-wf-update-ncs` sections. +#. Get the rest of the dependencies using west: + + .. code-block:: console + + west update + +#. Build the sample or application code as follows: + + .. parsed-literal:: + :class: highlight + + west build -b *board_target* -d *destination_directory_name* + + The board target should be ``thingy53/nrf5340/cpuapp`` or ``thingy53/nrf5340/cpuapp/ns`` when building samples for the application core. + The proper child image for ``thingy53/nrf5340/cpunet`` will be built automatically. + See :ref:`thingy53_build_pgm_targets` for details. + +#. Program the sample or application: + + a. Connect the Nordic Thingy:53 to the debug out port on a 10-pin external debug probe, for example nRF5340 DK, using a 10-pin JTAG cable. + + .. figure:: ./images/thingy53_nrf5340_dk.webp + :alt: Nordic Thingy:53 connected to the debug port on a 10-pin external debug probe + + Nordic Thingy:53 connected to the debug port on a 10-pin external debug probe + + #. Connect the external debug probe to the PC using a micro-USB cable. + #. Make sure that the Nordic Thingy:53 and the external debug probe are powered on. + (On the Thingy:53, move the power switch **SW1** to the **ON** position.) + #. Use the following command to program the sample or application to the device: + + .. code-block:: console + + west flash + + The device resets and runs the programmed sample or application. + +.. _thingy53_gs_updating_usb: +.. _thingy53_gs_updating_external_probe: + +Programming using the Programmer app +************************************ + +You can program the Nordic Thingy:53 using the `Programmer app`_ from nRF Connect for Desktop and MCUboot's serial recovery feature. +You can use this application to also program precompiled firmware packages. + +You can program the Thingy:53 using the Programmer app with either USB-C or an external debug probe. +See the `Programming Nordic Thingy:53`_ in the tool documentation for detailed steps. + +Programming using nRF Util +************************** + +You can use the nRF Util tool to program Thingy:53, including programming precompiled firmware packages. +See `Programming application firmware using MCUboot serial recovery`_ in the tool documentation for detailed steps. + +Using the nRF Programmer mobile app +*********************************** + +You can use the `nRF Programmer`_ mobile app on your Android or iOS device to program precompiled firmware packages. +For detailed steps, see :ref:`thingy53_gs_updating_ble`. diff --git a/doc/nrf/app_dev/device_guides/nrf53/images/thingy53_antenna_connections.svg b/doc/nrf/app_dev/device_guides/thingy53/images/thingy53_antenna_connections.svg similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf53/images/thingy53_antenna_connections.svg rename to doc/nrf/app_dev/device_guides/thingy53/images/thingy53_antenna_connections.svg diff --git a/doc/nrf/gsg_guides/images/thingy53_application_info.png b/doc/nrf/app_dev/device_guides/thingy53/images/thingy53_application_info.png similarity index 100% rename from doc/nrf/gsg_guides/images/thingy53_application_info.png rename to doc/nrf/app_dev/device_guides/thingy53/images/thingy53_application_info.png diff --git a/doc/nrf/app_dev/device_guides/thingy53/images/thingy53_nrf5340_dk.webp b/doc/nrf/app_dev/device_guides/thingy53/images/thingy53_nrf5340_dk.webp new file mode 100644 index 000000000000..a63b43858891 Binary files /dev/null and b/doc/nrf/app_dev/device_guides/thingy53/images/thingy53_nrf5340_dk.webp differ diff --git a/doc/nrf/gsg_guides/images/thingy53_progress_wheel.png b/doc/nrf/app_dev/device_guides/thingy53/images/thingy53_progress_wheel.png similarity index 100% rename from doc/nrf/gsg_guides/images/thingy53_progress_wheel.png rename to doc/nrf/app_dev/device_guides/thingy53/images/thingy53_progress_wheel.png diff --git a/doc/nrf/gsg_guides/images/thingy53_sample_list.png b/doc/nrf/app_dev/device_guides/thingy53/images/thingy53_sample_list.png similarity index 100% rename from doc/nrf/gsg_guides/images/thingy53_sample_list.png rename to doc/nrf/app_dev/device_guides/thingy53/images/thingy53_sample_list.png diff --git a/doc/nrf/app_dev/device_guides/thingy53/index.rst b/doc/nrf/app_dev/device_guides/thingy53/index.rst new file mode 100644 index 000000000000..2cce8e886dad --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy53/index.rst @@ -0,0 +1,35 @@ +.. _ug_thingy53: + +Developing with Thingy:53 +######################### + +.. |nrf_series| replace:: devices of the nRF53 Series + +.. include:: /includes/guides_complementary_to_app_dev.txt + +Zephyr and the |NCS| provide support and contain board definitions for developing on the following nRF53 Series devices: + +.. list-table:: + :header-rows: 1 + + * - DK + - PCA number + - Board targets + - Documentation + * - :ref:`zephyr:thingy53_nrf5340` + - PCA20053 + - ``thingy53/nrf5340/cpuapp``, ``thingy53/nrf5340/cpuapp/ns``, ``thingy53/nrf5340/cpunet`` + - | :ref:`ug_thingy53_gs` + | `Hardware Specification `_ + +The Nordic Thingy:53 is a battery-operated prototyping platform for IoT Systems. +The Nordic Thingy:53 integrates the nRF5340 SoC that supports Bluetooth® Low Energy, IEEE 802.15.4 based protocols and Near Field Communication (NFC). +The nRF5340 is augmented with the nRF21540 RF FEM (Front-end Module) Range extender that has an integrated power amplifier (PA)/low-noise amplifier (LNA) and nPM1100 Power Management IC (PMIC) that has an integrated dual-mode buck regulator and battery charger. + +.. toctree:: + :maxdepth: 2 + :caption: Subpages: + + thingy53_precompiled + building_thingy53 + thingy53_application_guide diff --git a/doc/nrf/app_dev/device_guides/thingy53/thingy53_application_guide.rst b/doc/nrf/app_dev/device_guides/thingy53/thingy53_application_guide.rst new file mode 100644 index 000000000000..24efaff923c7 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy53/thingy53_application_guide.rst @@ -0,0 +1,154 @@ +.. _thingy53_app_guide: + +Application guide for Thingy:53 +############################### + +.. contents:: + :local: + :depth: 2 + +The Nordic Thingy:53 does not have a built-in J-Link debug IC. +Because of that, the Thingy:53 board enables MCUboot bootloader with serial recovery support and predefined static Partition Manager memory map by default. +You can also enable FOTA updates manually. +See the following sections for details of what is configured by default and what you can configure by yourself. + +.. _thingy53_serialports: + +Connecting to Thingy:53 for logs +******************************** + +Applications and samples for the Nordic Thingy:53 use a serial terminal to provide logs. +By default, the serial terminal is accessible through the USB CDC ACM class handled by application firmware. +The serial port is visible right after the Thingy:53 is connected to the host using a USB cable. +The CDC ACM baudrate is ignored, and transfer goes with USB speed. + +For more information, see :ref:`thingy53_app_usb`. + +.. _thingy53_app_partition_manager_config: + +Partition manager configuration +******************************* + +The samples and applications for Nordic Thingy:53 use the :ref:`partition_manager` by default to define memory partitions. +The memory layout must stay consistent, so that MCUboot can perform proper image updates and clean up the settings storage partition. +To ensure that the partition layout does not change between builds, the sample must use a static partition layout that is consistent between all samples in the |NCS|. +The memory partitions are defined in the :file:`pm_static_thingy53_nrf5340_cpuapp.yml` and :file:`pm_static_thingy53_nrf5340_cpuapp_ns.yml` files in the :file:`zephyr/boards/arm/thingy53_nrf5340` directory. + +The PCD SRAM partition is locked by the MCUboot bootloader to prevent the application from modifying the network core firmware. +Trying to access data on this partition results in an ARM fault. + +The MCUboot bootloader needs a flash controller overlay for the network core image update. +The overlay is applied automatically. + +.. _thingy53_app_mcuboot_bootloader: + +MCUboot bootloader +****************** + +MCUboot bootloader is enabled by default for Thingy:53 in the :file:`Kconfig.defconfig` file of the board. +This ensures that the sample includes the MCUboot bootloader and that an MCUboot-compatible image is generated when the sample is built. +When using the |NCS| to build the MCUboot bootloader for the Thingy:53, the configuration is applied automatically from the MCUboot repository. + +The MCUboot bootloader supports serial recovery and a custom command to erase the settings storage partition. +Erasing the settings partition is needed to ensure that an application is not booted with incompatible content loaded from the settings partition. + +In addition, you can set an image version, such as ``"2.3.0+0"``, using the :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` Kconfig option. + +.. _thingy53_app_usb: + +USB +*** + +The logs on the Thingy:53 board are provided by default using USB CDC ACM to allow access to them without additional hardware. + +Most of the applications and samples for Thingy:53 use only a single instance of USB CDC ACM that works as the logger's backend. +No other USB classes are used. +These samples can share a common USB product name, vendor ID, and product ID. + +If a sample supports additional USB classes or more than one instance of USB CDC ACM, it must use a dedicated product name, vendor ID, and product ID. +This sample must also enable USB composite device configuration (:kconfig:option:`CONFIG_USB_COMPOSITE_DEVICE`). + +The :kconfig:option:`CONFIG_BOARD_SERIAL_BACKEND_CDC_ACM` Kconfig option (defined in the :file:`zephyr/boards/arm/thingy53_nrf5340/Kconfig.defconfig` file) automatically sets the default values of USB product name, vendor ID and product ID of Thingy:53. +It also enables the USB device stack and initializes the USB device at boot. +The remote wakeup feature of a USB device is disabled by default as it requires extra action from the application side. +A single USB CDC ACM instance is automatically included in the default board's DTS configuration file (:file:`zephyr/boards/arm/thingy53_nrf5340/thingy53_nrf5340_common.dts`). +The USB CDC instance is used to forward application logs. + +If you do not want to use the USB CDC ACM as a backend for logging out of the box, you can disable it as follows: + +* Disable the :kconfig:option:`CONFIG_BOARD_SERIAL_BACKEND_CDC_ACM` Kconfig option. +* If USB CDC ACM is not used for anything else, you can disable it in the application's DTS overlay file: + + .. code-block:: none + + &cdc_acm_uart { + status = "disabled"; + }; + +.. _thingy53_app_antenna: + +Antenna selection +***************** + +The Nordic Thingy:53 has an RF front-end with two 2.4 GHz antennas: + +* **ANT1** is connected to the nRF5340 through the nRF21540 RF FEM and supports TX gain of up to +20 dBm. +* **ANT2** is connected to the nRF5340 through the RF switch and supports TX output power of up to +3 dBm. + +.. figure:: images/thingy53_antenna_connections.svg + :alt: Nordic Thingy:53 - Antenna connections + + Nordic Thingy:53 - Antenna connections + +The samples in the |NCS| use **ANT1** by default, with the nRF21540 gain set to +10 dBm. +You can configure the TX gain with the :kconfig:option:`CONFIG_MPSL_FEM_NRF21540_TX_GAIN_DB` Kconfig option to select between +10 dBm or +20 dBm gain. +To use the **ANT2** antenna, disable the :kconfig:option:`CONFIG_MPSL_FEM` Kconfig option in the network core's child image configuration. + +.. note:: + Transmitting with TX output power above +10 dBM is not permitted in some regions. + See the `Nordic Thingy:53 Regulatory notices`_ in the `Nordic Thingy:53 Hardware`_ documentation for the applicable regulations in your region before changing the configuration. + +.. _thingy53_app_fota_smp: + +FOTA over Bluetooth Low Energy +****************************** + +.. include:: /app_dev/device_guides/nrf52/fota_update.rst + :start-after: fota_upgrades_over_ble_intro_start + :end-before: fota_upgrades_over_ble_intro_end + +Bluetooth buffers configuration introduced by the :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP` Kconfig option is also automatically applied to the network core child image by the dedicated overlay file. +Thingy:53 supports network core upgrade out of the box. + +.. include:: /app_dev/device_guides/nrf52/fota_update.rst + :start-after: fota_upgrades_over_ble_additional_information_start + :end-before: fota_upgrades_over_ble_additional_information_end + +.. _thingy53_app_external_flash: + +External flash +************** + +During a FOTA update, there might not be enough space available in internal flash storage to store the existing application and network core images as well as the incoming images, so the incoming images must be stored in external flash storage. +The Thingy:53 board automatically configures external flash storage and QSPI driver when FOTA updates are implied with the :kconfig:option:`CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU` Kconfig option. + +.. _thingy53_compatible_applications: + +Samples and applications for Thingy:53 with FOTA out of the box +*************************************************************** + +The following samples and applications in the |NCS| enable FOTA for Thingy:53 by default: + +* Applications: + + * :ref:`matter_weather_station_app` + * :ref:`nrf_machine_learning_app` + +* Samples: + + * :ref:`peripheral_lbs` + * :ref:`peripheral_uart` + * :ref:`bluetooth_mesh_light` + * :ref:`bluetooth_mesh_light_lc` + * :ref:`bluetooth_mesh_light_switch` + * :ref:`bluetooth_mesh_sensor_server` diff --git a/doc/nrf/app_dev/device_guides/thingy53/thingy53_precompiled.rst b/doc/nrf/app_dev/device_guides/thingy53/thingy53_precompiled.rst new file mode 100644 index 000000000000..450dc17bcf64 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy53/thingy53_precompiled.rst @@ -0,0 +1,113 @@ +.. _thingy53_precompiled: +.. _thingy53_gs_updating_firmware: + +Preloaded and precompiled Thingy:53 firmware +############################################ + +.. contents:: + :local: + :depth: 2 + +The Nordic Thingy:53 comes preloaded with the following firmware: + +* `Edge Impulse`_ application firmware +* MCUboot bootloader +* SoftDevice controller on the network core + +This page describes how to connect with Edge Impulse Studio or update Nordic Thingy:53 with precompiled firmware provided by Nordic Semiconductor. + +.. _thingy53_gs_machine_learning: + +Connecting with Edge Impulse Studio +*********************************** + +The Nordic Thingy:53 is preprogrammed with Edge Impulse firmware. +The Edge Impulse firmware enables data collection from all the sensors on the Nordic Thingy:53. +You can use the collected data to train and test machine learning models. +Deploy the trained machine learning model to the Nordic Thingy:53 over Bluetooth® LE or USB. + +Complete the following steps to get started with Edge Impulse: + +1. Go to the `Edge Impulse`_ website. +#. Create a free Edge Impulse account. +#. Download the `nRF Edge Impulse mobile app`_. +#. Follow the instructions in the `Nordic Semi Thingy:53 page`_. + +Precompiled Thingy:53 firmware +****************************** + +If you want to program your Nordic Thingy:53 with other precompiled firmware, you can download the latest precompiled firmware from the following sources: + +* The `Nordic Thingy:53 Downloads`_ page (the Precompiled application firmware section). + The package contains a :file:`CONTENTS.txt` file listing the locations and names of different firmware images. +* The `nRF Programmer`_ mobile application (available for Android and iOS). + The application lists the available precompiled firmware images when you open it. + +.. _thingy53_gs_updating_ble: + +Updating precompiled firmware +============================= + +You can update the precompiled firmware using any of the following methods: + +.. tabs:: + + .. tab:: nRF Programmer (Bluetooth LE) + + You can update the Nordic Thingy:53 application and network core over Bluetooth LE using the nRF Programmer mobile application for Android or iOS. + + Complete these steps to update the firmware: + + 1. Open the nRF Programmer app. + + A list of available samples appears. + + .. figure:: ./images/thingy53_sample_list.png + :alt: nRF Programmer - list of samples + + nRF Programmer - list of samples + + #. Select a sample. + + Application info appears. + + .. figure:: ./images/thingy53_application_info.png + :alt: nRF Programmer - Application Info + + nRF Programmer - Application Info + + #. Select the version of the sample from the drop-down menu. + #. Tap :guilabel:`Download`. + + When the download is complete, the name of the button changes to :guilabel:`Install`. + #. Tap :guilabel:`Install`. + + A list of nearby devices and their signal strengths appears. + #. Select your Nordic Thingy:53 from the list. + It is listed as **El Thingy:53**. + + The transfer of the firmware image starts, and a progress wheel appears. + + .. figure:: ./images/thingy53_progress_wheel.png + :alt: nRF Programmer - progress wheel + + nRF Programmer - progress wheel + + If you want to pause the update process, tap :guilabel:`Pause`. + If you want to stop the update process, tap :guilabel:`Stop`. + + The image transfer is complete when the progress wheel reaches 100%. + The Nordic Thingy:53 is reset and updated to the new firmware sample. + #. Tap :guilabel:`Done` to return to Application info. + + .. tab:: Programmer app (USB) + + See the `Programming Nordic Thingy:53`_ in the tool documentation for detailed steps. + + .. tab:: Programmer app (external debug probe) + + See the `Programming Nordic Thingy:53`_ in the tool documentation for detailed steps. + + .. tab:: nRF Util + + See `Programming application firmware using MCUboot serial recovery`_ in the tool documentation for more information. diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_add_file.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_add_file.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_add_file.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_add_file.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_add_file1.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_add_file1.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_add_file1.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_add_file1.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_add_file2.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_add_file2.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_add_file2.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_add_file2.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_com_ports.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_com_ports.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_com_ports.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_com_ports.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_enable_mcuboot.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_enable_mcuboot.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_enable_mcuboot.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_enable_mcuboot.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_ext_debug_hex_write.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_ext_debug_hex_write.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_ext_debug_hex_write.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_ext_debug_hex_write.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_ext_debug_update_modem.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_ext_debug_update_modem.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_ext_debug_update_modem.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_ext_debug_update_modem.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_hex_write.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_hex_write.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_hex_write.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_hex_write.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_hex_write1.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_hex_write1.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_hex_write1.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_hex_write1.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_modemdfu.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_modemdfu.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_modemdfu.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_modemdfu.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_select_device.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_select_device.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device1.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_select_device1.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device1.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_select_device1.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device2.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_select_device2.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_select_device2.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_select_device2.png diff --git a/doc/nrf/app_dev/device_guides/thingy91/images/programmer_thingy91_connect_dk_swd_vddio.webp b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_thingy91_connect_dk_swd_vddio.webp new file mode 100644 index 000000000000..009fba4946fe Binary files /dev/null and b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_thingy91_connect_dk_swd_vddio.webp differ diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/programmer_usb_update_modem.png b/doc/nrf/app_dev/device_guides/thingy91/images/programmer_usb_update_modem.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/programmer_usb_update_modem.png rename to doc/nrf/app_dev/device_guides/thingy91/images/programmer_usb_update_modem.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_mcuboot_dfu.png b/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_mcuboot_dfu.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/thingy91_mcuboot_dfu.png rename to doc/nrf/app_dev/device_guides/thingy91/images/thingy91_mcuboot_dfu.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_mcuboot_dfu1.png b/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_mcuboot_dfu1.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/thingy91_mcuboot_dfu1.png rename to doc/nrf/app_dev/device_guides/thingy91/images/thingy91_mcuboot_dfu1.png diff --git a/doc/nrf/app_dev/device_guides/nrf91/images/thingy91_modemdfu_mcuboot.png b/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_modemdfu_mcuboot.png similarity index 100% rename from doc/nrf/app_dev/device_guides/nrf91/images/thingy91_modemdfu_mcuboot.png rename to doc/nrf/app_dev/device_guides/thingy91/images/thingy91_modemdfu_mcuboot.png diff --git a/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_sw1_sw3.webp b/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_sw1_sw3.webp new file mode 100644 index 000000000000..46ee3ed8f766 Binary files /dev/null and b/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_sw1_sw3.webp differ diff --git a/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_sw1_sw4.webp b/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_sw1_sw4.webp new file mode 100644 index 000000000000..d3506664117b Binary files /dev/null and b/doc/nrf/app_dev/device_guides/thingy91/images/thingy91_sw1_sw4.webp differ diff --git a/doc/nrf/app_dev/device_guides/thingy91/index.rst b/doc/nrf/app_dev/device_guides/thingy91/index.rst new file mode 100644 index 000000000000..5940502fe484 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91/index.rst @@ -0,0 +1,42 @@ +.. _ug_thingy91: +.. _thingy91_ug_intro: + +Developing with Thingy:91 +######################### + +.. |nrf_series| replace:: devices of Thingy:91 + +.. include:: /includes/guides_complementary_to_app_dev.txt + +The |NCS| provide support for developing cellular applications using the Thingy:91 along with the nRF91 Series devices. + +.. list-table:: + :header-rows: 1 + + * - DK or Prototype platform + - PCA number + - Board targets + - Documentation + - Product pages + * - Thingy:91 + - PCA20035 + - ``thingy91/nrf9160``, ``thingy91/nrf9160/ns`` + - | :ref:`Getting started ` + | `User Guide `_ + - | `Thingy\:91 product page`_ + | `nRF9160 System in Package (SiP) `_ + +The |NCS| also offers :ref:`samples ` dedicated to this device, as well as compatible :ref:`drivers` and :ref:`libraries`. + +If you want to go through a hands-on online training to familiarize yourself with cellular IoT technologies and development of cellular applications, enroll in the `Cellular IoT Fundamentals course`_ in the `Nordic Developer Academy`_. + +See the subpages for information on the various aspects of Thingy:91. + +.. toctree:: + :maxdepth: 2 + :caption: Subpages: + + thingy91_features + thingy91_connecting + thingy91_updating_fw_programmer + thingy91_building_programming diff --git a/doc/nrf/app_dev/device_guides/thingy91/thingy91_building_programming.rst b/doc/nrf/app_dev/device_guides/thingy91/thingy91_building_programming.rst new file mode 100644 index 000000000000..f1e76605276d --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91/thingy91_building_programming.rst @@ -0,0 +1,99 @@ +.. _building_pgming: + +Building and programming with Thingy:91 +####################################### + +.. contents:: + :local: + :depth: 2 + +You can also program the Thingy:91 with the images obtained by building the code in an |NCS| environment. + +To set up your system to be able to build a compatible firmware image, follow the processes described in the :ref:`building` section. +The build targets of interest for Thingy:91 in |NCS| are as follows: + ++---------------+---------------------------------------------------+ +|Component | Build target | ++===============+===================================================+ +|nRF9160 SiP |``thingy91/nrf9160/ns`` | ++---------------+---------------------------------------------------+ +|nRF52840 SoC |``thingy91/nrf52840`` | ++---------------+---------------------------------------------------+ + +You must use the build target ``thingy91/nrf9160/ns`` when building the application code for the nRF9160 SiP and the build target ``thingy91/nrf52840`` when building the application code for the onboard nRF52840 SoC. + +.. note:: + + * In |NCS| releases before v1.3.0, these build targets were named ``nrf9160_pca20035``, ``nrf9160_pca20035ns``, and ``nrf52840_pca20035``. + * In |NCS| releases ranging from v1.3.0 to v1.6.1, the build target ``thingy91/nrf9160/ns`` was named ``thingy91_nrf9160/ns``. + + LTE/GNSS features can only be used with :ref:`Cortex-M Security Extensions enabled ` (``_ns`` build target). + +The following table shows the different types of build files that are generated and the different scenarios in which they are used: + ++--------------------------+----------------------------------------+----------------------------------------------------------------+ +| File | File format | Programming scenario | ++==========================+========================================+================================================================+ +|:file:`merged.hex` | Full image, HEX format | Using an external debug probe and the `Programmer app`_. | ++--------------------------+----------------------------------------+----------------------------------------------------------------+ +|:file:`zephyr.signed.hex` | MCUboot compatible image, HEX format | Using the built-in bootloader and the `Programmer app`_. | ++--------------------------+----------------------------------------+----------------------------------------------------------------+ +|:file:`app_update.bin` | MCUboot compatible image, binary format|* Using the built-in bootloader and mcumgr command line tool. | +| | |* For FOTA updates. | ++--------------------------+----------------------------------------+----------------------------------------------------------------+ + +For an overview of different types of build files in the |NCS|, see :ref:`app_build_output_files`. + +There are multiple methods of programming a sample or application onto a Thingy:91. +It is recommended to use an external debug probe to program the Thingy:91. + +.. note:: + + If you do not have an external debug probe available to program the Thingy:91, you can directly program by :ref:`using the USB (MCUboot) method and the Programmer app `. + In this scenario, use the :file:`app_signed.hex` firmware image file. + +.. note:: + + While building applications for Thingy:91, the build system changes the signing algorithm of MCUboot so that it uses the default RSA keys. + This is to ensure backward compatibility with the MCUboot versions that precede the |NCS| v1.4.0. + Use the default RSA keys only for development. + In a final product, you must use your own secret keys. + See :ref:`ug_fw_update_development_keys` for more information. + +Programming onto Thingy:91 +************************** + +Complete the following steps to program firmware onto Thingy:91: + +1. Set the Thingy:91 SWD selection switch (**SW2**) to **nRF91** or **nRF52** depending on whether you want to program the nRF9160 SiP or the nRF52840 SoC component. +#. Connect the Thingy:91 to the debug out port on a 10-pin external debug probe, for example, nRF9160 DK, using a 10-pin JTAG cable. + + .. note:: + + If you are using nRF9160 DK as the debug probe, make sure that **VDD_IO (SW11)** is set to 1.8 V. + +#. Connect the external debug probe to the PC using a USB cable. +#. Make sure that the Thingy:91 and the external debug probe are powered on. + +.. thingy91_building_pgmin_start + +.. tabs:: + + .. group-tab:: nRF Connect for VS Code + + 5. In the |nRFVSC|, click the :guilabel:`Flash` option in the **Actions View**. + + If you have multiple boards connected, you are prompted to pick a device at the top of the screen. + + A small notification banner appears in the bottom-right corner of |VSC| to display the progress and confirm when the flash is complete. + + .. group-tab:: Command line + + 5. |open_terminal_window_with_environment| + 6. Program the sample or application to the device using the following command:: + + west flash + + The device resets and runs the programmed sample or application. + +.. thingy91_building_pgmin_end diff --git a/doc/nrf/app_dev/device_guides/thingy91/thingy91_connecting.rst b/doc/nrf/app_dev/device_guides/thingy91/thingy91_connecting.rst new file mode 100644 index 000000000000..a2dc2458ace8 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91/thingy91_connecting.rst @@ -0,0 +1,46 @@ +.. _thingy91_serialports: + +Connecting to Thingy:91 +####################### + +.. contents:: + :local: + :depth: 2 + +You can connect to Thingy:91 wirelessly (using the `nRF Toolbox`_ app) or over a serial connection (using the `Serial Terminal app`_, the `Cellular Monitor app`_, or a serial terminal). + +Using nRF Toolbox +***************** + +To connect to your Thingy:91 wirelessly, you need to meet the following prerequisites: + +* The :ref:`connectivity_bridge` installed on your Thingy:91. +* The :ref:`nus_service_readme` enabled. + + .. note:: + By default, the Bluetooth LE interface is off, as the connection is not encrypted or authenticated. + To turn it on at runtime, set the appropriate option in the :file:`Config.txt` file located on the USB Mass storage Device. + +Using a serial terminal +*********************** + +If you prefer to use a standard serial terminal, you need to specify the baud rate manually. + +Thingy:91 uses the following UART baud rate configuration: + +.. list-table:: + :header-rows: 1 + :align: center + + * - UART Interface + - Baud Rate + * - UART_0 + - 115200 + * - UART_1 + - 1000000 + +Using the Serial Terminal app +***************************** + +You can use the `Serial Terminal app`_ to get debug output and send AT commands to the Thingy:91. +In the case of the Serial Terminal or the Cellular Monitor apps, the baud rate for the communication is set automatically. diff --git a/doc/nrf/app_dev/device_guides/thingy91/thingy91_features.rst b/doc/nrf/app_dev/device_guides/thingy91/thingy91_features.rst new file mode 100644 index 000000000000..70bf7c4c0a5d --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91/thingy91_features.rst @@ -0,0 +1,17 @@ +.. _thingy91_features: + +Features of Thingy:91 +##################### + +.. contents:: + :local: + :depth: 2 + +Nordic Thingy:91 is a battery-operated prototyping platform for cellular IoT systems, suitable for prototyping asset tracking, environmental monitoring and more. +Thingy:91 integrates an nRF9160 SiP that supports LTE-M, NB-IoT, and Global Navigation Satellite System (GNSS) and an nRF52840 SoC that supports Bluetooth® Low Energy, Near Field Communication (NFC) and USB. + +.. |thingy| replace:: Thingy:91 + +.. |band_lock| replace:: `band lock section in the nRF9160 AT Commands Reference Guide`_ + +.. include:: /includes/Thingy91_91x_features.txt diff --git a/doc/nrf/app_dev/device_guides/nrf91/thingy91_updating_fw_programmer.rst b/doc/nrf/app_dev/device_guides/thingy91/thingy91_updating_fw_programmer.rst similarity index 98% rename from doc/nrf/app_dev/device_guides/nrf91/thingy91_updating_fw_programmer.rst rename to doc/nrf/app_dev/device_guides/thingy91/thingy91_updating_fw_programmer.rst index 78d9f3c90c20..6a86df8dfe75 100644 --- a/doc/nrf/app_dev/device_guides/nrf91/thingy91_updating_fw_programmer.rst +++ b/doc/nrf/app_dev/device_guides/thingy91/thingy91_updating_fw_programmer.rst @@ -81,8 +81,9 @@ Updating the firmware in the nRF52840 SoC #. Switch off the Thingy:91. #. Press **SW4** while switching **SW1** to the **ON** position. - .. figure:: images/thingy91_sw1_sw4.svg + .. figure:: images/thingy91_sw1_sw4.webp :alt: thingy91_sw1_sw4 + :width: 515px Thingy:91 - SW1 SW4 switch @@ -146,8 +147,9 @@ Updating the firmware in the nRF52840 SoC a. Connect the Thingy:91 to the debug out port on a 10-pin external debug probe using a JTAG cable. - .. figure:: images/programmer_thingy91_connect_dk_swd_vddio.svg + .. figure:: images/programmer_thingy91_connect_dk_swd_vddio.webp :alt: Thingy:91 - Connecting the external debug probe + :width: 626px Thingy:91 - Connecting the external debug probe @@ -222,8 +224,9 @@ Update the modem firmware on the nRF9160 SiP #. Switch off the Thingy:91. #. Press **SW3** while switching **SW1** to the **ON** position. - .. figure:: images/thingy91_sw1_sw3.svg + .. figure:: images/thingy91_sw1_sw3.webp :alt: Thingy:91 - SW1 SW3 switch + :width: 483px Thingy:91 - SW1 SW3 switch @@ -319,8 +322,9 @@ Program the nRF9160 SiP application #. Switch off the Thingy:91. #. Press **SW3** while switching **SW1** to the **ON** position. - .. figure:: images/thingy91_sw1_sw3.svg + .. figure:: images/thingy91_sw1_sw3.webp :alt: Thingy:91 - SW1 SW3 switch + :width: 483px Thingy:91 - SW1 SW3 switch diff --git a/doc/nrf/app_dev/device_guides/thingy91x/index.rst b/doc/nrf/app_dev/device_guides/thingy91x/index.rst new file mode 100644 index 000000000000..752db4eeb70f --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91x/index.rst @@ -0,0 +1,40 @@ +.. _ug_thingy91x: + +Developing with Thingy:91 X +########################### + +.. |nrf_series| replace:: devices of Thingy:91 X + +.. include:: /includes/guides_complementary_to_app_dev.txt + +The |NCS| provide support for developing cellular applications using the Thingy:91 X along with the nRF91 Series devices. + +.. list-table:: + :header-rows: 1 + + * - DK or Prototype platform + - PCA number + - Board targets + - Documentation + - Product pages + * - Thingy:91 X + - PCA20065 + - ``thingy91x/nrf9151``, ``thingy91x/nrf9151/ns`` + - | `Quick Start app`_ + | `User Guide `_ + - | `Thingy\:91 X product page`_ + | `nRF9151 System in Package (SiP) `_ + +The |NCS| also offers :ref:`samples ` dedicated to this device, as well as compatible :ref:`drivers` and :ref:`libraries`. + +If you want to go through a hands-on online training to familiarize yourself with cellular IoT technologies and development of cellular applications, enroll in the `Cellular IoT Fundamentals course`_ in the `Nordic Developer Academy`_. + +See the subpages for information on the various aspects of Thingy:91 X. + +.. toctree:: + :maxdepth: 2 + :caption: Subpages: + + thingy91x_features + thingy91x_updating_fw_programmer + thingy91x_building_programming diff --git a/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_building_programming.rst b/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_building_programming.rst new file mode 100644 index 000000000000..b3bbb8d97548 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_building_programming.rst @@ -0,0 +1,55 @@ +.. _building_pgming_thingy91x: + +Building and programming with Thingy:91 X +######################################### + +.. contents:: + :local: + :depth: 2 + +You can also program the Thingy:91 X with the images obtained by building the code in an |NCS| environment and the west tool. + +To set up your system to be able to build a compatible firmware image, follow the processes described in the :ref:`building` section. +The build targets of interest for Thingy:91 X in the |NCS| are as follows: + ++----------------------------------+---------------------------------+ +| Component | Build target | ++==================================+=================================+ +| nRF9151 SiP | ``thingy91x/nrf9151`` | +| | ``thingy91x/nrf9151/ns`` | ++----------------------------------+---------------------------------+ +| nRF5340 SoC - Application core | ``thingy91x/nrf5340/cpuapp`` | +| | ``thingy91x/nrf5340/cpuapp/ns`` | ++----------------------------------+---------------------------------+ +| nRF5340 SoC - Network core | ``thingy91x/nrf5340/cpunet`` | ++----------------------------------+---------------------------------+ + +.. note:: + LTE/GNSS features can only be used with :ref:`Cortex-M Security Extensions enabled ` (nRF9151 ``ns`` build target). + +The following table shows the different types of build files that are generated and the different scenarios in which they are used: + ++--------------------------+----------------------------------------+----------------------------------------------------------------+ +| File | File format | Programming scenario | ++==========================+========================================+================================================================+ +|:file:`merged.hex` | Full image, HEX format | Using an external debug probe and nrfutil device. | ++--------------------------+----------------------------------------+----------------------------------------------------------------+ +|:file:`zephyr.signed.hex` | MCUboot compatible image, HEX format | Using the built-in bootloader and nrfutil device. | ++--------------------------+----------------------------------------+----------------------------------------------------------------+ +|:file:`app_update.bin` | MCUboot compatible image, binary format|* Using the built-in bootloader and mcumgr command-line tool. | +| | |* For FOTA updates. | ++--------------------------+----------------------------------------+----------------------------------------------------------------+ + +Programming onto Thingy:91 X +**************************** + +Complete the following steps to program firmware onto Thingy:91 X: + +1. Set the Thingy:91 X SWD selection switch (**SW2**) to **nRF91** or **nRF53** depending on whether you want to program the nRF9151 SiP or the nRF5340 SoC component. +#. Connect the Thingy:91 X to the debug out port on a 10-pin external debug probe, for example, nRF9151 DK, using a 10-pin SWD cable. +#. Connect the external debug probe to the PC using a USB cable. +#. Make sure that the Thingy:91 X and the external debug probe are powered on. + +.. include:: /app_dev/device_guides/thingy91/thingy91_building_programming.rst + :start-after: thingy91_building_pgmin_start + :end-before: thingy91_building_pgmin_end diff --git a/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_features.rst b/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_features.rst new file mode 100644 index 000000000000..f3000359a869 --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_features.rst @@ -0,0 +1,21 @@ +.. _thingy91x_features: + +Features of Thingy:91 X +####################### + +.. contents:: + :local: + :depth: 2 + +Nordic Thingy:91 X is a battery-operated prototyping platform for cellular IoT. +Thingy:91 X integrates the following components: + +* An nRF9151 SiP with LTE-M, NB-IoT, and Global Navigation Satellite System (GNSS) support. +* The nRF7002 companion IC that adds support for low power Wi-Fi®. +* An nRF5340 SoC that supports Bluetooth® Low Energy, 802.15.4 protocols, and USB. + +.. |thingy| replace:: Thingy:91 X + +.. |band_lock| replace:: `band lock section in the nRF91x1 AT Commands Reference Guide`_ + +.. include:: /includes/Thingy91_91x_features.txt diff --git a/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_updating_fw_programmer.rst b/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_updating_fw_programmer.rst new file mode 100644 index 000000000000..53e7bb0a548f --- /dev/null +++ b/doc/nrf/app_dev/device_guides/thingy91x/thingy91x_updating_fw_programmer.rst @@ -0,0 +1,169 @@ +.. _programming_thingy91x: + +Updating the Thingy:91 X firmware using nRF Util +################################################ + +.. contents:: + :local: + :depth: 2 + +You can use the ``nrfutil device`` command for the following: + +* :ref:`Update the firmware on the nRF5340 SoC `. +* :ref:`Update the application firmware on the nRF9151 SiP `. +* :ref:`Update the modem firmware on the nRF9151 SiP `. + +You can perform these operations through USB using MCUboot, or through an external debug probe. +When developing with your Thingy:91 X, it is recommended to use an external debug probe. + +.. note:: + The external debug probe must support Arm Cortex-M33, such as the nRF9151 DK. + You need a 10-pin 2x5 socket-socket 1.27 mm IDC (:term:`Serial Wire Debug (SWD)`) JTAG cable to connect to the external debug probe. + +See `Installing nRF Util`_ and `Installing and upgrading nRF Util commands`_ for instructions on how to install the nrfutil device utility. + +.. _updating_firmware_nRF5340: + +Updating the firmware on the nRF5340 SoC +**************************************** + +This section describes how you can update the firmware of the nRF5340 SoC on the Nordic Thingy:91 X through USB or with an external debug probe. + +.. tabs:: + + .. group-tab:: Through USB and MCUboot + + To update the nRF5340 SoC firmware over USB, complete the following steps: + + 1. Install the ``nrfutil device`` command package by completing the steps in the `Installing and upgrading nRF Util commands`_ documentation. + #. Connect the Thingy:91 X to your computer with a USB-C cable. + #. Power on the device by switching **SW1** to the **ON** position. + #. Open a terminal window. + #. Enter the following command to list the connected devices and their traits:: + + nrfutil device list + + The Nordic Thingy\:91 X will be listed as a Thingy\:91 X UART product and have the following details: + + * A 21-character serial number, for example, ``THINGY91X_C2E0AC7F599``. + * ``mcuboot``, ``nordicUsb``, ``serialPorts``, and ``usb`` traits. + + + #. Enter the following command to update both the application and network core of the nRF5340 application core with a multi-image :file:`dfu_application.zip` file: + + .. code-block:: console + + nrfutil device program --firmware dfu_application.zip --serial-number --traits mcuboot --x-family nrf53 + + .. group-tab:: Through external debug probe + + To update the nRF5340 firmware using an external debug probe, complete the following steps: + + 1. Install the ``nrfutil device`` command package by completing the steps in the `Installing and upgrading nRF Util commands`_ documentation. + #. Connect the Thingy:91 X to your computer with a USB-C cable. + #. Connect the 10-pin :term:`Serial Wire Debug (SWD)` programming cable from the external debug probe to the programming connector (**P8**) on the Thingy:91 X. + #. Connect the external debug probe to your computer. + #. Power on the device by switching **SW1** to the **ON** position. + #. Set the programming target select switch **SW2** to **nRF53** on the Thingy:91 X. + #. Open a terminal window. + #. Enter the following command to list the connected devices and their traits:: + + nrfutil device list + + The external debug probe will be listed as a J-Link product with the ``jlink`` trait and will have a 9 or 10 digit J-Link serial number depending on the J-Link probe used. + + #. Enter the following command to program the application binary to the nRF5340 application core: + + .. code-block:: console + + nrfutil device program --firmware --serial-number --traits jlink --x-family nrf53 --core Application + + #. Enter the following command to program the application binary to the nRF5340 network core: + + .. code-block:: console + + nrfutil device program --firmware --serial-number --traits jlink --x-family nrf53 --core Network + +.. _update_nRF9151_application: + +Updating the application firmware on the nRF9151 SiP +**************************************************** + +This section describes how you can update the application firmware of the nRF9151 SiP on the Nordic Thingy:91 X through USB or with an external debug probe. + +.. tabs:: + + .. group-tab:: Through USB and MCUboot + + To update the nRF9151 SiP application firmware over USB, complete the following steps: + + 1. Install the ``nrfutil device`` command package by completing the steps in the `Installing and upgrading nRF Util commands`_ documentation. + #. Connect the Thingy:91 X to your computer with a USB-C cable. + #. Power on the device by switching **SW1** to the **ON** position. + #. Open a terminal window. + #. Enter the following command to list the connected devices and their traits:: + + nrfutil device list + + The Nordic Thingy\:91 X will be listed as a Thingy\:91 X UART product and have the following details: + + * A 21-character serial number, for example, ``THINGY91X_C2E0AC7F599``. + * ``mcuboot``, ``nordicUsb``, ``serialPorts``, and ``usb`` traits. + + #. Enter the following command to program the application binary to the nRF9151 application core: + + .. code-block:: console + + nrfutil device program --firmware dfu_application.zip --serial-number --traits mcuboot --x-family nrf91 --core Application + + .. group-tab:: Through external debug probe + + To update the nRF9151 SiP application firmware using an external debug probe, complete the following steps: + + 1. Install the ``nrfutil device`` command package by completing the steps in the `Installing and upgrading nRF Util commands`_ documentation. + #. Connect the Thingy:91 X to your computer with a USB-C cable. + #. Connect the 10-pin :term:`Serial Wire Debug (SWD)` programming cable from the external debug probe to the programming connector (**P8**) on the Thingy:91 X. + #. Connect the external debug probe to your computer. + #. Power on the device by switching **SW1** to the **ON** position. + #. Set the programming target select switch **SW2** to **nRF91** on the Thingy:91 X. + #. Open a terminal window. + #. Enter the following command to list the connected devices and their traits:: + + nrfutil device list + + The external debug probe will be listed as a J-Link product with the ``jlink`` trait and will have a 9 or 10 digit J-Link serial number depending on the J-Link probe used. + + #. Enter the following command to program the application binary to the nRF9151 application core: + + .. code-block:: console + + nrfutil device program --firmware --serial-number --traits jlink --x-family nrf91 --core Application + +.. _update_modem_fw_nRF9151: + +Updating the modem firmware on the nRF9151 SiP +********************************************** + +.. note:: + Modem firmware update through USB and MCUboot is currently not supported. + +To update the nRF9151 modem firmware using an external debug probe, complete the following steps: + +1. Install the ``nrfutil device`` command package by completing the steps in the `Installing and upgrading nRF Util commands`_ documentation. +#. Connect the Thingy:91 X to your computer with a USB-C cable. +#. Connect the 10-pin :term:`Serial Wire Debug (SWD)` programming cable from the external debug probe to the programming connector (**P8**) on the Thingy:91 X. +#. Connect the external debug probe to your computer. +#. Power on the device by switching **SW1** to the **ON** position. +#. Set the programming target select switch **SW2** to **nRF91** on the Thingy:91 X. +#. Open a terminal window. +#. Enter the following command to list the connected devices and their traits:: + + nrfutil device list + + The external debug probe will be listed as a J-Link product with the ``jlink`` trait and will have a 9 or 10 digit J-Link serial number depending on the J-Link probe used. + +#. Enter the following command to program the modem firmware on the nRF9151 SiP: + + .. code-block:: console + + nrfutil device program --firmware --serial-number --traits jlink modem --x-family nrf91 diff --git a/doc/nrf/app_dev/device_guides/wifi_coex.rst b/doc/nrf/app_dev/device_guides/wifi_coex.rst index ab53de495e5a..060149ff54d6 100644 --- a/doc/nrf/app_dev/device_guides/wifi_coex.rst +++ b/doc/nrf/app_dev/device_guides/wifi_coex.rst @@ -9,7 +9,7 @@ Coexistence of short-range radio and other radios This guide describes how to add short-range radio and other radio coexistence support to your application in |NCS|. -Short-range RF technologies (here referred to as SR), such as Bluetooth LE or 802.15.4, use a different radio than other technologies like Wi-Fi or LTE (here referred to as *the other radios*). +Short-range RF technologies (here referred to as SR), such as Bluetooth® LE or 802.15.4, use a different radio than other technologies like Wi-Fi® or LTE (here referred to as *the other radios*). However, if both SR and the other radio attempt to transmit simultaneously, the radio frequency (RF) waves interfere with each other, causing decreased performance and higher power consumption. Also, in cases like receiving an acknowledgment (ACK), radios should not transmit to ensure correct reception. @@ -320,6 +320,6 @@ To add a custom coexistence implementation, complete following steps: * The implementation of the functions required by the interface structure :c:struct:`mpsl_cx_interface_t`. Refer to :ref:`MPSL CX API ` for details. * The initialization code initializing the required hardware resources, based on devicetree information. - * A call to the function :c:func:`mpsl_cx_interface_set()` during the system initialization. + * A call to the function :c:func:`mpsl_cx_interface_set` during the system initialization. #. Add the necessary CMakeLists.txt entries to get your code compiled when the new Kconfig choice option you added is selected. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_clockman.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_clockman.rst deleted file mode 100644 index 4509e7fe059c..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_clockman.rst +++ /dev/null @@ -1,114 +0,0 @@ -.. _ug_nrf54h20_architecture_clockman: - -nRF54H20 clock management -######################### - -.. contents:: - :local: - :depth: 2 - -The nRF54H20 SoC consists of multiple asynchronous clock domains and requires clock sources for correct operation. -Each of the clock sources needs proper management for the following reasons: - -* To start and stop the clock at the appropriate time. -* To select the proper clock source. -* To calibrate or synchronize the clock to a more accurate source. - -Some clock management operations are performed solely by hardware circuits, while others require software intervention. -Most clocks can be locked to more accurate ones to improve their accuracy. - - -Clock domains -************* - -The nRF54H20 SoC consists of the following clock domains: - -* Low frequency clock (LFCLK) -* High-frequency oscillator (HFXO) -* FLL16M -* Application Core HSFLL -* Radio Core HSFLL -* Secure Domain HSFLL -* Global HSFLL - -Each clock domain is enabled independently of others, and it is automatically enabled when at least one sink is active. -The firmware can choose to keep each clock domains enabled even when all its sinks are inactive. - -Clock domain sources are selected by ``clock_control`` drivers based on the clock parameter requirements reported by the software modules using the ``clock_control`` functions. -These requirements can include clock frequency, accuracy, or precision. -Some clock domains are configured by ``clock_control`` drivers using ``LRCCONF`` peripherals, while others are configured with the assistance of the System Controller Firmware. - -The application-facing APIs expose only the domain that directly clocks the component used by the application. -The management of the clocks on which this domain depends is handled internally by the associated clock driver. - -For example, a firmware module might request better timing accuracy for a fast UART instance. -In this case, the firmware module requests the accuracy from the global HSFLL device driver, which directly clocks the UART. -The dependencies, such as FLL16M and LFXO, are managed internally by the global HSFLL driver, not directly by the firmware module. - -LFCLK -===== - -The Low-Frequency Clock domain is responsible for generating a 32768 Hz clock signal for ultra-low-power peripherals like ``GRTC`` or ``RTC``. - -HFXO -==== - -The high-frequency crystal oscillator domain is responsible for clocking peripherals requiring high accuracy and MHz range frequency. -The drawback of this clock source is relatively high power consumption so it is enabled only when needed. - -Hardware capabilities ---------------------- - -The HFXO, like any other clock domain, can be connected in hardware to one of the available sources. -Additionally, it provides the clock signal to all of its sinks. - -FLL16M -====== - -The FLL16M clock domain clocks most of the peripherals in the system (*slow*, 16 MHz). -Its accuracy results in the timing accuracy of slow ``UART``, ``SPI``, ``TWI``, ``PWM``, ``SAADC``, among others. - -Local HSFLLs -============ - -Local HSFLLs are clocking CPUs in local domains, fast peripherals around them, and local RAM. - -Global HSFLL -============ - -Global HSFLL clocks *fast* peripherals, FLPR, RAM, and MRAM blocks. - -Zephyr clock control API -************************ - -Zephyr RTOS contains a ``clock_control`` device driver class for managing clocks. -The ``clock_control`` API is designed to support multiple requestors. -Moreover, the ``clock_control`` API supports blocking or asynchronous operations based on notifications when the requested clock settings are applied. - -The ``clock_control`` subsystem exposes portable parameters in its functions, which include: - -* Accuracy requests in ppm values for all the clock domains. -* Precision requests in enumerated high- and low-precision modes. -* Frequency requests (clock rate) for the Application core HSFLL (all the other clock domains have fixed frequencies). - -When multiple modules request conflicting parameters from the same clock, the system prioritizes selecting the mode with minimal power consumption that satisfies all requests. -For example, if a UART driver requests 100 ppm accuracy and a SPI driver requests 200 ppm accuracy, the system will choose a mode with 100 ppm accuracy or better, as it meets both requirements (100 ppm accuracy is better than 200 ppm) while optimizing power usage. -This policy applies to all clock parameters, including frequency and precision, following these criteria: - -* The applied precision is at least as good as requested. -* The applied frequency is at least as fast as requested. -* All parameters are optimized for power consumption. - -For more details, see the following links: - -* :ref:`zephyr:clock_control_api`. -* The following calls in the `Zephyr's nRF clock control API extensions`_ (:file:`include/zephyr/drivers/clock_control/nrf_clock_control.h`): - - * ``nrf_clock_control_request()``: Requests a reservation to use a given clock with specified attributes. - * ``nrf_clock_control_release()``: Releases a reserved use of a clock. - * ``nrf_clock_control_cancel_or_release()``: Safely cancels a reservation request. - -* The following calls in the `clocks devicetree macro API`_ (:file:`include/zephyr/devicetree/clocks.h`): - - * ``DT_CLOCKS_CTLR_BY_IDX()``: Gets the node identifier for the controller phandle from a *clocks* phandle-array property at an index. - * ``DT_CLOCKS_CTLR()``: It is equivalent to ``DT_CLOCKS_CTLR_BY_IDX()`` with index (idx) set to 0. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_reset.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_reset.rst deleted file mode 100644 index b930eb04861b..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_architecture_reset.rst +++ /dev/null @@ -1,85 +0,0 @@ -.. _ug_nrf54h20_architecture_reset: - -nRF54H20 reset behavior -####################### - -.. contents:: - :local: - :depth: 2 - -The reset behavior of the nRF54H20 SoC depends on the core that triggers the reset: - -+--------------------------+--------------------------------------------------------------+ -| CPU Triggering Reset | Reset Behavior | -+==========================+==============================================================+ -| Secure Domain | Resets the entire SoC | -+--------------------------+--------------------------------------------------------------+ -| System Controller | Resets the entire SoC | -+--------------------------+--------------------------------------------------------------+ -| Application domain | - Resets all peripherals and VPRs owned by the Application | -| | domain | -| | - Resets the Radio domain | -| | - Resets all peripherals and VPRs owned by the Radio domain | -+--------------------------+--------------------------------------------------------------+ -| Radio domain | - Resets all peripherals and VPRs owned by the Radio domain | -| | - Resets the Application domain | -| | - Resets all peripherals and VPRs owned by the Application | -| | domain | -+--------------------------+--------------------------------------------------------------+ - -nRF Util allows for different types of reset behavior on the various cores of the nRF54H20 SoC, based on the current lifecycle state of the device. - -Reset types in LCS EMPTY ------------------------- - -The following is the reset behavior when the LCS of the nRF54H20 SoC is in the ``EMPTY`` state: - -.. list-table:: Reset behavior based on LCS ``EMPTY`` - :header-rows: 1 - - * - Reset kind in LCS ``EMPTY`` - - Reset behavior - * - ``RESET_SYSTEM`` - - Mapped to the ``SYS_RESET_REQUEST`` bit as described in the ARM specification for the *Application Interrupt and Register Controller*. - This reset triggers a reset of the Secure Domain, which subsequently resets the entire system. - It is available only to the Secure Domain. - * - ``RESET_HARD`` - - Initiates a reset using the CTRL-AP through the On-Board Debugger (OBD). - The register used is ``RESET`` (address offset: ``0x00``). - * - ``RESET_PIN`` - - J-Link toggles the **RESET** pin via OBD. - -Reset types in LCS ROT or DEPLOYED ------------------------------------ - -The following is the reset behavior when the LCS of the nRF54H20 SoC is either in the ``ROT`` or ``DEPLOYED`` state: - -.. list-table:: Reset behavior based on LCS ``ROT`` or ``DEPLOYED`` - :header-rows: 1 - - * - Reset kind in LCS ``ROT`` or ``DEPLOYED`` - - Reset behavior - * - ``RESET_SYSTEM`` - - In the Secure Domain, this reset is mapped to the ``SYS_RESET_REQUEST`` bit, as described in the ARM specification for the *Application Interrupt and Register Controller*. - This reset triggers a reset of the Secure Domain, which subsequently resets the entire system. - - In the local domains, this reset is available only if the other domains have a valid configuration in the ``CPUCONF`` register and their access port is unprotected. - The PC tool uses the CTRL-AP mailbox to send a local domain reset request to the Secure Domain Firmware (SDFW). - * - ``RESET_HARD`` - - Initiates a reset using the CTRL-AP through the On-Board Debugger (OBD). - The register used is ``RESET`` (address offset: ``0x00``). - * - ``RESET_PIN`` - - J-Link toggles the ``RESET`` pin via OBD. - -Reset your device using nRF Util -================================ - -To trigger a specific reset type on your nRF54H20 SoC-based device, use the ``nrfutil device reset`` command:: - - nrfutil device reset --serial-number --reset-kind - -For a detailed list of commands for each reset type, run the following:: - - nrfutil device reset --help - -For more information on ``nrfutil device reset``, see `nRF Util documentation pages `_. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb.rst deleted file mode 100644 index c0afcb1428fe..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_custom_pcb.rst +++ /dev/null @@ -1,269 +0,0 @@ -.. _ug_nrf54h20_custom_pcb: - -Configuring your application for a custom PCB -############################################# - -.. contents:: - :local: - :depth: 2 - -This guide demonstrates how to create your custom board files for your PCB for the nRF54H20 SoC. - -Prepare your PCB -**************** - -First, you need to create your PCB for the nRF54H20 SoC. - -We highly recommend using the PCB layouts and component values provided by Nordic Semiconductor, especially for clock and power sources, considering the following limitations: - -* The DC/DC inductor must be present on the PCB, and the ``inductor-present;`` node must be configured either in the :file:`zephyr/boards/your_board/nrf54h20dk_bicr.dtsi` file or in the section where ``bicr: bicr@fff87b0`` is present in the devicetree. -* For the lowest sleep power consumption, use a 32 KHz crystal. -* The **P9** port cannot be used with internal or external pull-down resistors. -* For optimal performance, the output impedance of the **P6** and **P7** ports should match the PCB and external device pin impedance. -* Use one of the following power supply options: - - * VDDH higher than 2.05V. - * VDDH shorted to VDD at 1.8V - -Prepare the configuration files for your custom board in the |NCS| -****************************************************************** - -The nRF54H20 DK uses multiple board files for its configuration. -You can use these files as a starting point for configuring your own custom board. -When creating a :ref:`Zephyr repository application `, copy the files from :file:`sdk-zephyr/boards/nordic/nrf54h20dk` to the :file:`sdk-zephyr/boards//` file. - -You must edit the :file:`.dts` and :file:`.overlay` files for your project to match your board configuration, similarly to any new board added to the |NCS| or Zephyr. - -See the following documentation pages for more information: - -* The :ref:`zephyr:devicetree` documentation to familiarize yourself with the devicetree language and syntax. -* The :ref:`ug_nrf54h20_configuration` page for more information on how to configure your DTS files for the nRF54H20 SoC. -* The :ref:`zephyr:zephyr-repo-app` page for more information on Zephyr application types. -* The :ref:`dm_adding_code` documentation for details on the best user workflows to add your own code to the |NCS|. - -.. note:: - The configuration of board files is based on the nRF54H20 common SoC files located in :file:`sdk-zephyr/dts/common/nordic/`. - Each new |NCS| revision might change these files, breaking the compatibility with your custom board files created for previous revisions. - Ensure the compatibility of your custom board files when migrating to a new |NCS| release. - - See :ref:`zephyr:board_porting_guide` for more information. - -Configure, generate, and flash BICR -*********************************** - -The Board Information Configuration Registers (BICR) are non-volatile memory (NVM) registers that contain information on how the nRF54H20 SoC must interact with other board elements, including the information about the power and clock delivery to the SoC. -The power and clock control firmware uses this information to apply the proper regulator and oscillator configurations. - -.. caution:: - You must ensure that the configuration is correct. - An incorrect configuration can damage your device. - -BICR allows for the configuration of various components on your custom board, like the following: - -* Power rails -* Low-frequency oscillator -* High-frequency oscillator (HFXO) -* GPIO ports power and drive control -* Tamper switches -* Active shield channels - -You can find the details in the DTS specification for the BICR in :file:`sdk-zephyr/dts/bindings/misc/nordic,nrf-bicr.yaml` - -When not set, the registers' default value is ``0xFFFFFFFF``. - -The ``LFOSC.LFXOCAL`` register is used by the device to store the calibration of the LFXO. - -When ``LFOSC.LFXOCAL`` is ``0xFFFFFFFF`` at device boot, the firmware recalibrates the LFXO oscillator and writes the calibration data to the ``LFOSC.LFXOCAL`` register. -This is useful when making a change on the PCB (for example, when changing the crystal). -This initial calibration is only performed once. -Each subsequent start will use this initial calibration as the starting point. - -BICR configuration -================== - -The nRF54H20 DK BICR configuration can be found in the board configuration directory as :file:`sdk-zephyr/boards/nordic/nrf54h20dk/nrf54h20dk_bicr.dtsi`. -This file is used by the |NCS| build system to generate a corresponding HEX file. -You can start from this file when editing the values of the devicetree properties inside your custom board folder (:file:`boards/nordic/your_custom_board`), according to your board configuration. - -.. caution:: - A mismatch between the board and the configuration values in BICR can damage the device or set it in an unrecoverable state. - -Generating the BICR binary -========================== - -To generate the BICR binary, you must first set the Kconfig option :kconfig:option:`CONFIG_NRF_REGTOOL_GENERATE_BICR` to ``y``. -When running ``west build``, the build system then creates the relevant HEX file (:file:`bicr.hex`) at build time. -Based on the peripheral definition extracted from the nRF54H20 SVD file, the modified registers from the configuration are mapped into their relevant position in memory. - -.. note:: - If the build system cannot locate the ``bicr`` node inside your custom board's devicetree, or if you did not create a custom :file:`.dtsi` file for it, the BICR generation cannot progress, and the build system will skip it. - -You can find the generated :file:`bicr.hex` file in the :file:`build_dir/zephyr/`. -The presence of a ``bicr`` node in the application devicetree will automatically trigger a build of the BICR binary, and will place this file alongside the other binary outputs such as ``zephyr.hex`` and ``uicr.hex``. - -Flashing the BICR binary -======================== - -After the |NCS| build system generates the BICR binary, you must flash this binary manually. -The content of BICR should be loaded to the SoC only once and should not be erased nor modified unless the PCB layout changes. -To manually program the generated :file:`bicr.hex` file to the SoC, use nRF Util as follows:: - - nrfutil device program --options chip_erase_mode=ERASE_NONE --firmware bicr.hex --core Application --serial-number - -You only need to follow this programming process once, assuming the PCB configuration applied through the BICR is correct the first time. -However, it is also possible to reprogram the BICR while in the LCS ``RoT``. -This can be useful, for example, when adjusting the configuration as the PCB design gets refined or modified, requiring the process to be repeated. - -Validate the BICR binary ------------------------- - -After programming the BICR binary onto the device, validate whether the BICR works with your device as follows: - -1. Reset the device:: - - nrfutil device reset --reset-kind RESET_PIN --serial-number - -2. When in LCS ``EMPTY``, use ``nrfutil`` to validate the BICR status by reading the memory:: - - nrfutil device x-read --address 0x2F88FF1C --serial-number 1051164514 --core Secure - - nrfutil returns the BICR loading status using one of the following values: - - * ``0x289CFB73``: BICR applied without error. - This indicates that the power configuration of the BICR is valid and you can proceed to the next step. - * ``0xD78213DF``: BICR application was skipped. - This indicates that no BICR was programmed to the device. - Revisit the previous step to ensure the programming command was executed, and that the BICR was correctly generated. - * ``0xCE68C97C``: BICR application failed. - This indicates that there is an issue with the BICR, but in most cases this can be recovered by programming the correct BICR for your board. - * ``Error``: This indicates that the device is likely suffering from severe power issues after applying the BICR. - This state is likely unrecoverable. - -Programming the SDFW and SCFW -============================= - -After programming the BICR, the nRF54H20 SoC requires the provisioning of a bundle ( :file:`nrf54h20_soc_binaries_v0.6.5.zip`) containing the precompiled firmware for the Secure Domain and System Controller. -To program the nRF54H20 SoC binaries to the nRF54H20 DK, do the following: - -1. Download the `nRF54H20 SoC binaries v0.6.5`_. -#. Move the :file:`ZIP` bundle to a folder of your choice. -#. |open_terminal_window_with_environment| -#. Run nRF Util to program the binaries using the following command:: - - nrfutil device x-provision-nrf54h --firmware --serial-number - -You can run the following command to confirm that the Secure Domain Firmware has loaded correctly: - - nrfutil device x-adac-lcs-change - -If issues occur during bundle programming, the system will return an ``ADAC_FAILURE`` error. - -Verify the LCS and transition to RoT -************************************ - -To successfully run your custom application on your custom board, the SoC must have its Lifecycle State (LCS) set to ``RoT`` (meaning Root of Trust). -If the LCS is set to ``EMPTY``, you must transition it to ``RoT``. - -.. note:: - The forward transition to LCS ``RoT`` is permanent. - After the transition, it is not possible to transition backward to LCS ``EMPTY``. - -To transition the LCS to ``RoT``, do the following: - -1. |open_terminal_window_with_environment| -#. Verify the current lifecycle state of the nRF54H20:: - - nrfutil device x-adac-discovery --serial-number - - The output will look similar to the following:: - - *serial_number* - adac_auth_version 1.0 - vendor_id Nordic VLSI ASA - soc_class 0x00005420 - soc_id [e6, 6f, 21, b6, dc, be, 11, ee, e5, 03, 6f, fe, 4d, 7b, 2e, 07] - hw_permissions_fixed [00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - hw_permissions_mask [01, 00, 00, 00, 87, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - psa_lifecycle LIFECYCLE_EMPTY (0x1000) - sda_id 0x01 - secrom_revision 0xad3b3cd0 - sysrom_revision 0xebc8f190 - token_formats [TokenAdac] - cert_formats [CertAdac] - cryptosystems [Ed25519Sha512] - Additional TLVs: - TargetIdentity: [ff, ff, ff, ff, ff, ff, ff, ff] - -#. If the lifecycle state (``psa_lifecycle``) shown is ``RoT`` (``LIFECYCLE_ROT (0x2000)``), no LCS transition is required. - If the lifecycle state (``psa_lifecycle``) shown is not ``RoT`` (``LIFECYCLE_EMPTY (0x1000)`` means the LCS is set to ``EMPTY``), set it to Root of Trust using the following command:: - - nrfutil device x-adac-lcs-change --life-cycle rot --serial-number - -#. Verify again the current lifecycle state of the nRF54H20:: - - nrfutil device x-adac-discovery --serial-number - - The output will look similar to the following:: - - *serial_number* - adac_auth_version 1.0 - vendor_id Nordic VLSI ASA - soc_class 0x00005420 - soc_id [e6, 6f, 21, b6, dc, be, 11, ee, e5, 03, 6f, fe, 4d, 7b, 2e, 07] - hw_permissions_fixed [00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - hw_permissions_mask [01, 00, 00, 00, 87, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - psa_lifecycle LIFECYCLE_ROT (0x2000) - sda_id 0x01 - secrom_revision 0xad3b3cd0 - sysrom_revision 0xebc8f190 - token_formats [TokenAdac] - cert_formats [CertAdac] - cryptosystems [Ed25519Sha512] - Additional TLVs: - TargetIdentity: [ff, ff, ff, ff, ff, ff, ff, ff] - - The lifecycle state (``psa_lifecycle``) is now correctly set to *Root of Trust* (``LIFECYCLE_ROT (0x2000)``) - -#. After the LCS transition, reset the device:: - - nrfutil device reset --reset-kind RESET_PIN --serial-number - -Create or modify your application for your custom board -******************************************************* - -You can now create or modify your application for your custom board. -When doing so, consider the following: - -* When reusing the |NCS| applications and samples, you must provide board-specific overlay files when such files are needed. - For general information on configuration overlays, see :ref:`configure_application`. - - However, you must consider the following nRF54H20-specific difference: - - * The application might require board overlays for multiple cores. - In this case, ensure that these overlays are consistent with each other. - -* When creating a new application specific to your new board, DTS board files can contain all necessary configurations, and no overlay file is needed. - However, the same limitations regarding the consistency and UICR configuration apply, but should be kept on the board files level. - -* You must manually program the BICR if it has been modified. - -Update the SDFW and SCFW -************************ - -When a new version of the nRF54H20 firmware bundle is released, you can update it as follows: - -1. Download the new version of the nRF54H20 firmware bundle (:file:`nrf54h20_soc_binaries_v.zip`). -#. Move the :file:`ZIP` bundle to a folder of your choice and unzip it. -#. |open_terminal_window_with_environment| -#. Verify the current version of the nRF54H20 SoC binaries by running the following command:: - - nrfutil device x-sdfw-version-get --firmware-slot uslot --serial-number - - If the nRF54H20 SoC binaries version is 0.5.0 or higher, continue to the next step. -#. Run nRF Util to update the binaries using the following SUIT command:: - - nrfutil device x-suit-dfu --serial-number --firmware nordic_top.suit - -#. Run again the following command to verify the new SDFW version:: - - nrfutil device x-sdfw-version-get --firmware-slot uslot --serial-number diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_debugging.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_debugging.rst deleted file mode 100644 index dc51d72a5f1f..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_debugging.rst +++ /dev/null @@ -1,124 +0,0 @@ -.. _ug_nrf54h20_debugging: - -nRF54H20 debugging -################## - -.. contents:: - :local: - :depth: 2 - -The main recommended tool for debugging in the |NCS| for the limited sampling of the nRF54H20 DK is the `GNU Project Debugger`_ (GDB tool). - -When working from the command line, you can use west with the GDB tool. -For details, read the :ref:`Debugging with west debug ` section on the :ref:`zephyr:west-build-flash-debug` page in the Zephyr documentation. - -A useful tool for debugging the communication over Bluetooth® is the `nRF Sniffer for Bluetooth LE`_. -The nRF Sniffer allows you to look into data exchanged over-the-air between devices. - -Debug configuration -******************* - -Set the following Kconfig options to ``y`` for the images running on the cores you want to debug: - -* :kconfig:option:`CONFIG_DEBUG_OPTIMIZATIONS` - This option limits the optimizations made by the compiler to only those that do not impact debugging. -* :kconfig:option:`CONFIG_DEBUG_THREAD_INFO` - This option adds additional information to the thread object so that the debugger can discover the threads. - This will work for any debugger. - -Debug configurations -******************** - -Some applications and samples provide a specific configuration that enables additional debug functionalities. -You can select custom configurations when you are :ref:`configuring the build settings `. - - -Debugging single-core applications -********************************** - -To debug single-core applications, you can use the ``west debug`` command to start a single debug session with GDB. - -Debugging multi-core applications -********************************* - -To debug the firmware running also on cores other than the application core, you need to set up a separate debug session for each one of the cores you want to debug. -When debugging another core, the application core debug session runs in the background and you can debug both cores if needed. - -If you want to reset the other cores while debugging, make sure to first reset the application core and execute the code. - -Using GDB as an external debugger -********************************* - -An external debugger can access the device using the Debug Access Port (DAP). -The DAP is a standard Arm® CoreSight™ serial wire debug port (SWJ-DP) that implements the serial wire debug (SWD) protocol with a two-pin serial interface. - -There are several access ports that connect to different parts of the system: - - * AHB-AP 0: application core access port ID - * AHB-AP 1: radio core access port ID - * AHB-AP 2: Secure Domain access port ID - * AHB-AP 3: Auxiliary access port ID - * CTRL-AP 4: Device level control access port ID - * APB-AP 5: CoreSight™ subsystem access port ID - -The following sections describe how to debug the nRF54H20 using GDB as the external debugger with J-link. - -Selecting the core -================== - -To debug a specific core using ``JLinkExe`` do the following: - -1. Run J-Link on the application core:: - - JLinkExe -USB -if SWD -Device Cortex-M33 - - You can use this command to run J-Link also on other Arm cores. - You can find the ``SEGGER-ID`` as follows: - - * Check the ``SEGGER ID`` printed on the label on the bottom side of the DK. - * Run the ``nrfjprog --ids`` command. - - If just one DK is connected to the machine, defining ``SEGGER-ID`` is not necessary. - If more than one DK is connected to the machine and ``SEGGER-ID`` is undefined, a pop up window will appear where you can manually select the ID of the DK you want to run J-Link on. - - .. note:: - PPR core debugging is not functional in the initial limited sampling. - -#. Connect to the application core:: - - exec CORESIGHT_SetIndexAHBAPToUse = - connect - - ```` is the ID of the access port. - -J-Link script files -=================== - -You can also create J-Link script files in your local directory and add them to a GDB server call for a remote debugging session. - -1. Create a script file with the following content:: - - void ConfigTargetSettings(void) { - J-Link_CORESIGHT_AddAP(, CORESIGHT_AHB_AP); - CORESIGHT_IndexAHBAPToUse = ; - } - -2. Add the script file to the GDB server call:: - - -scriptfile [*full_path/to/script_file_name*] - -Debug logging -************* - -You can use the logging system to get more information about the state of your application. -Logs are integrated into various modules and subsystems in the |NCS| and Zephyr. -These logs are visible once you configure the logger for your application. - -You can also configure log level per logger module to, for example, get more information about a given subsystem. -See :ref:`ug_nrf54h20_logging` for details on how to enable and configure logs on the nRF54H20 DK. - -Debugging stack overflows -************************* - -One of the potential root causes of fatal errors in an application are stack overflows. -Read the Stack Overflows section on the :ref:`zephyr:fatal` page in the Zephyr documentation to learn about stack overflows and how to debug them. - -You can also use a separate module, such as Zephyr's :ref:`zephyr:thread_analyzer`, to make sure that the stack sizes used by your application are big enough to avoid stack overflows. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_gs.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_gs.rst deleted file mode 100644 index d29da9935141..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_gs.rst +++ /dev/null @@ -1,370 +0,0 @@ -.. _ug_nrf54h20_gs: - -Getting started with the nRF54H20 DK -#################################### - -.. contents:: - :local: - :depth: 2 - -This document gets you started with your nRF54H20 Development Kit (DK) using the |NCS|. -It tells you how to install the :zephyr:code-sample:`sysbuild_hello_world` sample and perform a quick test of your DK. - -.. _ug_nrf54h20_gs_requirements: - -Minimum requirements -******************** - -Make sure you have all the required hardware and that your computer has one of the supported operating systems. - -Hardware -======== - -* nRF54H20 DK, version PCA10175 v0.8.0 (ES4) or later revisions. - This is the only version of the nRF54H20 DK compatible with the |NCS| v2.7.99-cs2. - Check the version number on your DK's sticker to verify its compatibility with the |NCS| version v2.7.99-cs2. -* USB-C cable. - -Software -======== - -On your computer, one of the following operating systems: - -.. include:: ../../../../../nrf/installation/recommended_versions.rst - :start-after: os_table_start - :end-before: os_table_end - -See :ref:`supported_OS` for more information. - -|supported OS| - -You also need the following: - -* `Git`_ or `Git for Windows`_ (on Linux and Mac, or Windows, respectively). -* `curl`_. -* The latest version of the `nRF Command Line Tools`_ package. - After downloading and installing the tools, add the nrfjprog executable to the system path, on Linux and MacOS, or to the environment variables, on Windows. - This allows you to run it from anywhere on the system. - - .. note:: - Before running the initial J-Link installation from the `nRF Command Line Tools`_ package, ensure not to have any other J-Link executables on your system. - If you have other J-Link installations, uninstall them before proceeding. - -* On Windows, SEGGER USB Driver for J-Link from `SEGGER J-Link`_ |jlink_ver|. - - .. note:: - To install the SEGGER USB Driver for J-Link on Windows, you must manually reinstall J-Link |jlink_ver| from the command line using the ``-InstUSBDriver=1`` parameter, updating the installation previously run by the `nRF Command Line Tools`_: - - 1. Navigate to the download location of the J-Link executable and run one of the following commands: - - * From the Command Prompt:: - - JLink_Windows_V794i_x86_64.exe -InstUSBDriver=1 - - * From PowerShell:: - - .\JLink_Windows_V794i_x86_64.exe -InstUSBDriver=1 - - #. In the :guilabel:`Choose optional components` window, select :guilabel:`update existing installation`. - #. Add the J-Link executable to the system path on Linux and MacOS, or to the environment variables on Windows, to run it from anywhere on the system. - -* The latest version of |VSC| for your operating system from the `Visual Studio Code download page`_. -* In |VSC|, the latest version of the `nRF Connect for VS Code Extension Pack`_. -* On Linux, the `nrf-udev`_ module with udev rules required to access USB ports on Nordic Semiconductor devices and program the firmware. - -.. _ug_nrf54h20_gs_installing_software: - -Installing the required software -******************************** - -To work with the nRF54H20 DK, follow the instructions in the next sections to install the required tools. - -.. _ug_nrf54h20_install_toolchain: - -Installing the |NCS| v2.7.99-cs2 and its toolchain -************************************************** - -You can install the |NCS| v2.7.99-cs2 and its toolchain by using Toolchain Manager. - -Toolchain Manager is a tool available from `nRF Connect for Desktop`_, a cross-platform tool that provides different applications that simplify installing the |NCS|. -Both the tool and the application are available for Windows, Linux, and MacOS. - -To install the toolchain and the SDK using the Toolchain Manager app, complete the following steps: - -1. Install Toolchain Manager: - - a. `Download nRF Connect for Desktop`_ for your operating system. - #. Install and run the tool on your machine. - #. In the **APPS** section, click :guilabel:`Install` next to Toolchain Manager. - - The app is installed on your machine, and the :guilabel:`Install` button changes to :guilabel:`Open`. - -#. Install the |NCS| source code: - - a. Open Toolchain Manager in nRF Connect for Desktop. - - .. figure:: ../../../../../nrf/installation/images/gs-assistant_tm.png - :alt: The Toolchain Manager window - - The Toolchain Manager window - - #. Click :guilabel:`SETTINGS` in the navigation bar to specify where you want to install the |NCS|. - #. In :guilabel:`SDK ENVIRONMENTS`, click the :guilabel:`Install` button next to the |NCS| version 2.7.99-cs2. - - The |NCS| version 2.7.99-cs2 is installed on your machine. - The :guilabel:`Install` button changes to :guilabel:`Open VS Code`. - -#. Set up the preferred building method: - - .. tabs:: - - .. tab:: nRF Connect for Visual Studio Code - - To build on the |nRFVSC|, complete the following steps: - - a. In Toolchain Manager, click the :guilabel:`Open VS Code` button. - - A notification appears with a list of missing extensions that you need to install, including those from the `nRF Connect for Visual Studio Code`_ extension pack. - #. Click **Install missing extensions**, then close VS Code. - #. Once the extensions are installed, click **Open VS Code** button again. - - You can then follow the instructions in :ref:`creating_vsc`. - - .. tab:: Command line - - To build on the command line, complete the following steps: - - 1. With admin permissions enabled, download and install the `nRF Command Line Tools`_. - #. Restart the Toolchain Manager application. - #. Click the dropdown menu for the installed nRF Connect SDK version. - - .. figure:: ../../../../../nrf/installation/images/gs-assistant_tm_dropdown.png - :alt: The Toolchain Manager dropdown menu for the installed nRF Connect SDK version, cropped - - The Toolchain Manager dropdown menu options - - #. Select :guilabel:`Open command prompt`. - - You can then follow the instructions in :ref:`creating_cmd`. - -Installing the Terminal application -*********************************** - -On your computer, install `nRF Connect for Desktop`_. -You must also install a terminal emulator, such as `nRF Connect Serial Terminal`_ (from the nRF Connect for Desktop application) or the nRF Terminal (part of the `nRF Connect for Visual Studio Code`_ extension). -Both of these terminal emulators start the required :ref:`toolchain environment `. - -Installing nRF Util and its commands -************************************ - -Using the nRF54H20 DK with the |NCS| v2.7.99-cs2 requires the following: - -* nRF Util version 7.11.1 or above -* nRF Util ``device`` version 2.5.4 - -1. Download the nrfutil executable file from the `nRF Util development tool`_ product page. -#. Add nRF Util to the system path on Linux and MacOS, or environment variables on Windows, to run it from anywhere on the system. - On Linux and MacOS, use one of the following options: - - * Add nRF Util's directory to the system path. - * Move the file to a directory in the system path. - -#. On MacOS and Linux, give ``nrfutil`` execute permissions by typing ``chmod +x nrfutil`` in a terminal or using a file browser. - This is typically a checkbox found under file properties. -#. On MacOS, to run the nrfutil executable you need to allow it in the system settings. -#. Verify the version of the nRF Util installation on your machine by running the following command:: - - nrfutil --version - -#. If your version is below 7.11.1, run the following command to update nRF Util:: - - nrfutil self-upgrade - -#. Install the nRF Util ``device`` command version 2.5.4 as follows:: - - nrfutil install device=2.5.4 --force - -For more information, consult the `nRF Util`_ documentation. - -.. _ug_nrf54h20_gs_bringup: - -nRF54H20 DK bring-up -******************** - -The following sections describe the steps required for the nRF54H20 bring-up. - -.. rst-class:: numbered-step - -Programming the BICR -==================== - -The Board Information Configuration Registers (BICR) are non-volatile memory (NVM) registers that contain information on how the nRF54H20 SoC must interact with other board elements, including the information about the power and clock delivery to the SoC. -To prepare the nRF54H20 DK for first use, you must manually program the values of the BICR using a precompiled BICR binary file (:file:`bicr.hex`). - -1. Download the `BICR new binary file`_. -#. Connect the nRF54H20 DK to your computer using the **DEBUGGER** port on the DK. - -.. note:: - On MacOS, connecting the DK might cause a popup containing the message ``“Disk Not Ejected Properly`` to repeatedly appear on screen. - To disable this, run ``JLinkExe``, then run ``MSDDisable`` in the J-Link Commander interface. - -#. List all the connected development kits to see their serial number (matching the one on the DK's sticker):: - - nrfutil device list - -#. Move the BICR HEX file to a folder of your choice, then program the BICR by running nRF Util from that folder using the following command:: - - nrfutil device program --options chip_erase_mode=ERASE_NONE --firmware build/zephyr/bicr.hex --core Application --serial-number - -.. rst-class:: numbered-step - -Programming the nRF54H20 SoC binaries -===================================== - -After programming the BICR, the nRF54H20 SoC requires the provisioning of the nRF54H20 SoC binaries, a bundle ( :file:`nrf54h20_soc_binaries_v0.6.5.zip`) containing the precompiled firmware for the Secure Domain and System Controller. -To program the nRF54H20 SoC binaries to the nRF54H20 DK, do the following: - -1. Download the `nRF54H20 SoC binaries v0.6.5`_. - - .. note:: - On MacOS, ensure that the ZIP file is not unpacked automatically upon download. - -#. Move the :file:`.zip` bundle to a folder of your choice, then run nRF Util to program the binaries using the following command:: - - nrfutil device x-provision-nrf54h --firmware --serial-number - -.. rst-class:: numbered-step - -Transitioning the nRF54H20 SoC to RoT -===================================== - -The current nRF54H20 DK is delivered with its lifecycle state (LCS) set to ``EMPTY``. -To correctly operate, its lifecycle state must be transitioned to Root of Trust (``RoT``). - -.. note:: - The forward transition to LCS ``RoT`` is permanent. - After the transition, it is not possible to transition backward to LCS ``EMPTY``. - -To transition the LCS to ``RoT``, do the following: - -1. Verify the current lifecycle state of the nRF54H20:: - - nrfutil device x-adac-discovery --serial-number - - The output will look similar to the following:: - - *serial_number* - adac_auth_version 1.0 - vendor_id Nordic VLSI ASA - soc_class 0x00005420 - soc_id [e6, 6f, 21, b6, dc, be, 11, ee, e5, 03, 6f, fe, 4d, 7b, 2e, 07] - hw_permissions_fixed [00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - hw_permissions_mask [01, 00, 00, 00, 87, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - psa_lifecycle LIFECYCLE_EMPTY (0x1000) - sda_id 0x01 - secrom_revision 0xad3b3cd0 - sysrom_revision 0xebc8f190 - token_formats [TokenAdac] - cert_formats [CertAdac] - cryptosystems [Ed25519Sha512] - Additional TLVs: - TargetIdentity: [ff, ff, ff, ff, ff, ff, ff, ff] - -#. If the lifecycle state (``psa_lifecycle``) shown is ``RoT`` (``LIFECYCLE_ROT (0x2000)``), no LCS transition is required. - If the lifecycle state (``psa_lifecycle``) shown is not ``RoT`` (``LIFECYCLE_EMPTY (0x1000)`` means the LCS is set to ``EMPTY``), set it to Root of Trust using the following command:: - - nrfutil device x-adac-lcs-change --life-cycle rot --serial-number - -#. Verify again the current lifecycle state of the nRF54H20:: - - nrfutil device x-adac-discovery --serial-number - - The output will look similar to the following:: - - *serial_number* - adac_auth_version 1.0 - vendor_id Nordic VLSI ASA - soc_class 0x00005420 - soc_id [e6, 6f, 21, b6, dc, be, 11, ee, e5, 03, 6f, fe, 4d, 7b, 2e, 07] - hw_permissions_fixed [00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - hw_permissions_mask [01, 00, 00, 00, 87, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00] - psa_lifecycle LIFECYCLE_ROT (0x2000) - sda_id 0x01 - secrom_revision 0xad3b3cd0 - sysrom_revision 0xebc8f190 - token_formats [TokenAdac] - cert_formats [CertAdac] - cryptosystems [Ed25519Sha512] - Additional TLVs: - TargetIdentity: [ff, ff, ff, ff, ff, ff, ff, ff] - - The lifecycle state (``psa_lifecycle``) is now correctly set to *Root of Trust* (``LIFECYCLE_ROT (0x2000)``) - -#. After the LCS transition, reset the device:: - - nrfutil device reset --reset-kind RESET_PIN --serial-number - -.. _ug_nrf54h20_gs_sample: - -Building and programming the sample -*********************************** - -The :zephyr:code-sample:`sysbuild_hello_world` sample is a multicore sample running on both the application core (``cpuapp``) and the Peripheral Processor (PPR, ``cpuppr``). -It uses the ``nrf54h20dk/nrf54h20/cpuapp`` board target. - -To build and program the sample to the nRF54H20 DK, complete the following steps: - -1. Connect the nRF54H20 DK to your computer using the **DEBUGGER** port on the DK. -#. Open nRF Connect for Desktop, navigate to the Toolchain Manager, select the v2.7.99-cs2 toolchain, and click the :guilabel:`Open terminal` button. -#. In the terminal window, navigate to the :file:`zephyr/samples/sysbuild/hello_world` folder containing the sample. -#. Build the sample for application and radio cores by running the following command:: - - west build -p -b nrf54h20dk/nrf54h20/cpuapp -T sample.sysbuild.hello_world.nrf54h20dk_cpuapp_cpurad . - -You can now program the sample. -If you have multiple Nordic Semiconductor devices, make sure that only the nRF54H20 DK you want to program is connected. - -.. code-block:: console - - west flash - -The sample will be automatically built and programmed on both the application core and the Peripheral Processor (PPR) of the nRF54H20. - -.. include:: /includes/nRF54H20_erase_UICR.txt - -.. _ug_nrf54h20_sample_reading_logs: - -Reading the logs -**************** - -With the :zephyr:code-sample:`sysbuild_hello_world` sample programmed, the nRF54H20 DK outputs logs for the application core and the configured remote processor. -The logs are output over UART. - -To read the logs from the :zephyr:code-sample:`sysbuild_hello_world` sample programmed to the nRF54H20 DK, complete the following steps: - -1. Connect to the DK with a terminal emulator (for example, `nRF Connect Serial Terminal`_) using the :ref:`default serial port connection settings `. -#. Press the **Reset** button on the PCB to reset the DK. -#. Observe the console output for the application core: - - .. code-block:: console - - *** Booting nRF Connect SDK zephyr-v3.5.0-3517-g9458a1aaf744 *** - Hello world from nrf54h20dk/nrf54h20/cpuapp - -.. note:: - If no output is shown when using nRF Serial Terminal, select a different serial port in the terminal application. - -For more information on how logging works in the |NCS|, consult the :ref:`ug_logging` and :ref:`zephyr:logging_api` documentation pages. - -Next steps -********** - -You are now all set to use the nRF54H20 DK. -See the following links for where to go next: - -* :ref:`ug_nrf54h20_architecture` for information about the multicore System on Chip, such as the responsibilities of the cores and their interprocessor interactions, the memory mapping, and the boot sequence. -* The :ref:`introductory documentation ` for more information on the |NCS| and the development environment. -* :ref:`configuration_and_build` documentation to learn more about the |NCS| development environment. -* :ref:`ug_nrf54h` documentation for more advanced topics related to the nRF54H20. - -If you want to go through an online training course to familiarize yourself with Bluetooth® Low Energy and the development of Bluetooth LE applications, enroll in the `Bluetooth LE Fundamentals course`_ in the `Nordic Developer Academy`_. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_external_memory.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_external_memory.rst deleted file mode 100644 index 76255941e5e0..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_external_memory.rst +++ /dev/null @@ -1,245 +0,0 @@ -.. _ug_nrf54h20_suit_external_memory: - -Firmware upgrade with external memory -##################################### - -.. contents:: - :local: - :depth: 2 - -The Secure Domain firmware is unable to access the external memory by itself. -However, the application domain can implement an IPC service, which allows the Secure Domain firmware to access the external memory through application domain serving as a proxy. -This guide explains how to prepare the application domain firmware and the SUIT envelope to perform SUIT firmware upgrade using external memory. - -.. note:: - To use external memory with SUIT, you can either use the push model-based or the fetch model-based firmware upgrade. - See :ref:`ug_nrf54h20_suit_push` for details about the push model and :ref:`ug_nrf54h20_suit_fetch` for details on how to migrate from the push to fetch model. - -The following terms are used in this guide: - -* External memory (extmem) service - IPC service allowing the Secure Domain to use the application domain as a proxy when accessing external memory. - -* Companion image - Application domain firmware implementing the extmem service and external memory driver. - The IPC service allows the Secure Domain to access the external memory. - -Overview of external memory in SUIT firmware updates -**************************************************** - -The SUIT envelope must always be stored in the non-volatile memory in the MCU. -The SUIT manifests stored in the envelope contain instructions that the device must perform to fetch other required payloads. -To store payloads in the external memory, a Device Firmware Update (DFU) cache partition must be defined in the external memory's devicetree node. -The push model-based update and the fetch model-based update differ in the way the cache partition is filled with the images. - -When the Secure Domain processes the ``suit-install`` sequence, issuing ``suit-directive-fetch`` on any non-integrated payload will instruct the Secure Domain firmware to search for a given URI in all cache partitions in the system. -However, when such a cache partition is located in the external memory, the Secure Domain is unable to access the data directly. -Before any ``suit-directive-fetch`` directive is issued that accesses a payload stored on the external memory, a companion image that implements an external memory device driver must be booted. - -The companion image consists of two main parts: - -* Device driver adequate for the external memory device - -* IPC service exposed towards the Secure Domain - -When the companion image is booted and a directive that accesses the data on the external memory is issued, such as the ``suit-directive-fetch`` or ``suit-directive-copy`` directives, the Secure Domain firmware uses the IPC service provided by the companion image to access the contents of the external memory. -Apart from booting the companion image, the update process does not differ from regular push model-based or fetch model-based updates. - -Difference between push and fetch models -======================================== - -Push model ----------- - -In the push model, the cache partition contents are created on the building machine and pushed to the device without modifications. -The images are extracted to the cache partition files using the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE` Kconfig option. - -No additional sequences are required in the SUIT manifest. - -For more details, see :ref:`ug_nrf54h20_suit_push`. - -Fetch model ------------ - -In the fetch model, the SUIT processor runs on the application core. - -In the SUIT manifest, you can define a component that represents the cache partition in the external memory. -Within the ``suit-payload-fetch`` sequence, you can then store fetched payloads into a ``CACHE_POOL`` component. -The device then pulls the images from external sources and manages their storage in the cache partitions. - -For more details, see :ref:`ug_nrf54h20_suit_fetch`. - -Enabling external flash support in SUIT DFU -******************************************* - -The :ref:`nrf54h_suit_sample` sample contains several example configurations that enable the external memory for SUIT DFU. - -The configurations using the push model are the following: - -* ``sample.suit.smp_transfer.cache_push.extflash`` -* ``sample.suit.smp_transfer.cache_push.extflash.bt`` - -The configurations using the fetch model are following: - -* ``sample.suit.smp_transfer.full_processing.extflash`` -* ``sample.suit.smp_transfer.full_processing.extflash.bt`` - -You can find these configurations defined in the :file:`samples/suit/smp_transfer/sample.yaml` file. -This file specifies which options need to be enabled. - -Alternatively, you can follow the following steps to manually enable external memory in SUIT DFU. - -Common steps for both push and fetch models -=========================================== - -1. Turn on the external flash chip on the nRF54H20 DK using the `nRF Connect Board Configurator`_ app within `nRF Connect for Desktop`_ . - - .. note:: - This step is needed only on nRF54H20 DK. Skip this step if you are using different hardware. - -#. Enable the ``SB_CONFIG_SUIT_BUILD_FLASH_COMPANION`` sysbuild Kconfig option, which enables the build of the reference companion image. - See the :ref:`suit_flash_companion` user guide for instructions on how to configure the companion image using sysbuild. - -#. Define a new DFU cache partition in the external memory in the DTS file: - - .. code-block:: devicetree - - &mx25uw63 { - ... - status = "okay"; - partitions { - compatible = "fixed-partitions"; - #address-cells = <1>; - #size-cells = <1>; - - dfu_cache_partition_1: partition@0 { - reg = <0x0 DT_SIZE_K(1024)>; - }; - }; - }; - - Note that the name of the partition must follow the following format: ``dfu_cache_partition_``. - The number at the end determines the ``CACHE_POOL`` ID, which will be used later in the SUIT manifest. - This number must be greater than 0 and less than the value of :kconfig:option:`CONFIG_SUIT_CACHE_MAX_CACHES`. - The Secure Domain firmware supports up to eight DFU cache partitions. - -#. Modify the application manifest file :file:`app_envelope.yaml.jinja2` by completing the following steps: - - a. Append the ``MEM`` type component that represents the companion image in the same SUIT manifest file: - - .. code-block:: yaml - - suit-components: - ... - - - MEM - - {{ flash_companion['dt'].label2node['cpu'].unit_addr }} - - {{ get_absolute_address(flash_companion['dt'].chosen_nodes['zephyr,code-partition']) }} - - {{ flash_companion['dt'].chosen_nodes['zephyr,code-partition'].regs[0].size }} - - In this example, the component index is ``3``. - In the following steps, the companion image component is selected with ``suit-directive-set-component-index: 3``. - - #. Modify the ``suit-install`` sequence in the application manifest file (:file:`app_envelope.yaml.jinja2`) to boot the companion image before accessing the candidate images stored in the external memory: - - .. code-block:: yaml - - suit-install: - - suit-directive-set-component-index: 3 - - suit-directive-invoke: - - suit-send-record-failure - - The companion image can be optionally upgraded and have its integrity checked. - -Steps specific for the push model -================================= - -1. Enable the :kconfig:option:`CONFIG_SUIT_DFU_CANDIDATE_PROCESSING_PUSH_TO_CACHE` option to allow the application core to modify cache partitions. - -#. Enable the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE` Kconfig option for every image that needs to be updated from external memory. - -#. Modify the manifest files for all domains by completing the following steps: - - a. Ensure that the URI used by the ``suit-payload-fetch`` sequence to fetch a given image matches the :kconfig:option:`CONFIG_SUIT_DFU_CACHE_EXTRACT_IMAGE_URI` Kconfig option. - - #. Ensure that the envelope integrates the specified image within the envelope integrated payloads section. - This is ensured by default if you use the provided SUIT envelope templates. - -Steps specific for the fetch model -================================== - -1. Enable the :kconfig:option:`CONFIG_SUIT_DFU_CANDIDATE_PROCESSING_FULL` Kconfig option to allow the application core to process SUIT manifests. - -#. Enable the :kconfig:option:`CONFIG_SUIT_STREAM_SOURCE_FLASH` Kconfig option, which allows the SUIT processor on the application core to read and parse DFU cache partitions. - -#. Modify the application manifest file :file:`app_envelope.yaml.jinja2` by completing the following steps: - - a. Modify the ``CACHE_POOL`` identifier in the SUIT manifest: - - .. code-block:: yaml - - suit-components: - ... - - - CACHE_POOL - - 1 - - The ``CACHE_POOL`` identifier must match the identifier of the cache partition defined in the DTS file. - - #. Add the ``suit-payload-fetch`` sequence: - - .. code-block:: yaml - - suit-payload-fetch: - - suit-directive-set-component-index: 2 - - suit-directive-override-parameters: - suit-parameter-uri: 'file://{{ app['binary'] }}' - - suit-directive-fetch: - - suit-send-record-failure - - This snippet assumes that ``CACHE_POOL`` is the third component on the manifest's components list (so its component index is 2) - -Testing the application with external flash support -=================================================== - -1. |open_terminal_window_with_environment| - -#. Build and flash the application by completing the following commands: - - .. code-block:: console - - west build ./ -b nrf54h20dk/nrf54h20/cpuapp -T - west flash - - The build system will automatically use :ref:`configuration_system_overview_sysbuild` and generate a :file:`build/zephyr/dfu_suit.zip` archive, which contains the SUIT envelope and candidate images. - -#. Build a new version of the application with the incremented ``CONFIG_N_BLINKS`` value. - -#. Download the new :file:`dfu_suit.zip` archive to your mobile device. - -#. Use the `nRF Connect Device Manager`_ mobile app to update your device with the new firmware by completing the following steps: - - a. Ensure that you can access the :file:`dfu_suit.zip` archive from your phone or tablet. - - #. In the mobile app, scan and select the device to update. - - #. Switch to the :guilabel:`Image` tab. - - #. Press the :guilabel:`SELECT FILE` button and select the :file:`dfu_suit.zip` archive. - - #. Press the :guilabel:`START` button. - This initiates the DFU process of transferring the image to the device. - - The Device Manager mobile application will unpack the file and upload the SUIT envelope to the device. - The firmware images will be uploaded separately by the mobile application to the device, if the device requests it. - - #. Wait for the DFU to finish and then verify that the application works properly. - -Create custom companion images -****************************** - -Nordic Semiconductor provides a reference companion image in the :file:`samples/suit/flash_companion` directory, which can serve as a base for developing a customized companion image. - -Limitations -*********** - -* The Secure Domain, System Controller and companion image update candidates must always be stored in the MRAM. - Trying to store those candidates in external memory will result in a failure during the installation process. - -* The companion image needs a dedicated area in the executable region of the MRAM that is assigned to the application domain. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_recovery.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_recovery.rst deleted file mode 100644 index 0df8acd51bee..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_recovery.rst +++ /dev/null @@ -1,238 +0,0 @@ -.. _ug_nrf54h20_suit_recovery: - -Configuring and programming the SUIT manufacturer application recovery firmware -############################################################################### - -.. contents:: - :local: - :depth: 2 - -During the device lifetime, the device can encounter various issues that lead to boot failure. -In such cases, the device must have a mechanism to recover from the failure and continue operating. - -In SUIT, this requirement is addressed by running a specially prepared recovery firmware. -While the recovery firmware requires some additional space on the device, it is a highly recommended feature for all devices utilizing SUIT. - -This document describes scenarios in which an nRF54H20 device using SUIT can enter recovery mode, as well as the recovery process. - -Entering recovery mode -********************** - -When booting the device, the Secure Domain verifies the currently installed manifests and firmware images. -If the verification fails, the device enters recovery mode. -The reasons for validation failure can include, but are not limited to, the following: - -* An invalid manifest signature. -* A mismatch between the digest of the installed firmware image and the digest in the manifest. -* The manifest attempting to perform unauthorized operations. - -These issues can occur in the following scenarios: - -* Tampering by an attacker. -* Bitflips in the MRAM memory caused by radiation or other external conditions. -* Hardware failures in advanced cases where an in-place update is performed, resulting in a partially overwritten firmware image. -* An incorrectly constructed manifest, leading to a successful update but a failure during boot. - -.. caution:: - The last case must never occur in a production environment, but it is possible during development. - The manufacturer must always ensure that the manifest is correctly constructed and that all images managed by SUIT are compatible with each other after the update. - If any bugs are overlooked during the development phase, this could result in inconsistencies in the firmware. - -Recovery Mode and Recovery Manifests -************************************************* - -The recovery manifests form a separate hierarchy from the normal manifests. -In this hierarchy, the application recovery (``APP_RECOVERY``) manifest is responsible for managing both the application core image and other manifests, such as the radio recovery manifest. - -The following image shows the recovery manifest topology for the nRF54H20 SoC: - -.. figure:: images/nrf54h20_suit_recovery_manifest_topology.png - :alt: Recovery manifest topology for the nRF54H20 SoC - -If a failure during a boot process occurred, the Secure Domain sets the recovery flag and reboots the device. -Upon each boot the Secure Domain checks if the recovery flag is set. -If it is set, the device enters recovery mode. -If it isn't booting proceeds normally by running the root manifest. - -After entering the recovery mode it is verified if MPI configuration for the APP_RECOVERY is present. -If it is, the APP_RECOVERY manifest is processed. -It no MPI configuration is found the Secure Domain performs an attempt to process the normal manufacturer root manifest. -This is needed, as the device might enter recovery mode if it is empty. -The recovery flag is not cleared after flashing the firmware, but the device should proceed as if it would boot normally. - -This flow is shown in the following diagram: - -.. figure:: images/nrf54h20_suit_recovery_boot_path .png - :alt: Booting in recovery mode - -The role of the recovery application is to perform an update of the main application firmware, which does not differ from the normal SUIT update process. -As soon as the update finishes successfully, the recovery flag is cleared and the device proceeds with normal operation. - -.. note:: - The recovery application itself can only be updated from the main application - not when running the recovery application. - -.. _ug_nrf54h20_suit_recovery_default_fw: - -Using the default recovery firmware -*********************************** - -Nordic provides a default recovery firmware that can be used in the recovery process. -This firmware uses Bluetooth LE and SMP as a transport. -It is optimized for memory usage, currently using around 164 kB of MRAM (72 kB of application core and 92 kB radio core). - -.. caution:: - The default recovery firmware does not support :ref:`updating from external flash memory `. - This also means that the recovery firmware is not compatible with a main application that uses external flash for updates. - -To use the firmware: - -1. Create :file:`recovery.overlay` and :file:`recovery_hci_ipc.ovelay` files in the main application's :ref:`configuration_system_overview_sysbuild` directory. - These files must define the ``cpuapp_recovery_partition`` and ``cpurad_recovery_partition`` nodes respectively. - These partitions specify where the images for the recovery firmware are stored and cannot overlap with the main application partitions. - For reference, see the files in the :ref:`SUIT DFU on the nRF54H20 SoC ` sample located in :file:`samples/suit/smp_transfer`. - -#. Set the :kconfig:option:`SB_CONFIG_SUIT_BUILD_RECOVERY` sysbuild configuration option in the main application. - This will cause the recovery firmware to be built automatically as part of the main application build. - -#. :ref:`Program the main application firmware to the device `. -This will automatically program both the main application and the recovery firmware to the device. - -#. To update the recovery firmware perform an update in the same way as described in :ref:`nrf54h_suit_sample`, however using the recovery firmware envelope. - The envelopes needed for the update are located in the build directory of the main application, by default found in :file:`build/DFU/app_recovery.suit` and :file:`build/DFU/rad_recovery.suit`. - -Further information about the default recovery firmware can be found in :ref:`suit_recovery`. -The code for the default recovery firmware can be found in the :file:`samples/suit/recovery` directory. - -.. _ug_nrf54h20_suit_recovery_update_fw: - -Updating the recovery firmware -****************************** - -To update the recovery firmware you can either use: - -* The APP_RECOVERY envelope, found in :file:`/build/DFU/app_recovery.suit` -* The zip file, found in :file:`/build/zephyr/dfu_suit_recovery.zip`` - -These can be used to update the recovery application the same as :file:`root.suit` or :file:`dfu_suit.zip` are used to update the main application - see :ref:`nrf54h_suit_sample` as an example. - -.. note:: - The recovery application can only be updated from the main application - not when running the recovery application itself. - -.. _ug_nrf54h20_suit_recovery_create_images: - -Creating custom recovery images -******************************* - -To turn an application into a recovery application, the following steps have to be performed: - -1. For each of the images defined by the custom recovery application, ensure the following configuration is present: - - * :kconfig:option:`CONFIG_SUIT_RECOVERY` set to ``y`` - * :kconfig:option:`CONFIG_SUIT_MPI_GENERATE` set to ``n`` - * :kconfig:option:`CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE` set to ``n`` - * :kconfig:option:`CONFIG_NRF_REGTOOL_GENERATE_UICR` set to ``n`` - * :kconfig:option:`CONFIG_NRF_REGTOOL_GENERATE_BICR` set to ``n`` - - To do that you can simply paste the following code snippet into your configuration files: - - .. code-block:: cfg - - CONFIG_SUIT_RECOVERY=y - CONFIG_SUIT_MPI_GENERATE=n - CONFIG_SUIT_ENVELOPE_OUTPUT_MPI_MERGE=n - CONFIG_NRF_REGTOOL_GENERATE_UICR=n - CONFIG_NRF_REGTOOL_GENERATE_BICR=n - -#. Create the overlay files to be used by the recovery application. - In this guide it is assumed that for the application core they are placed in the custom recovery application directory in the :file:`boards/nrf54h20dk_nrf54h20_cpuapp.overlay` file. - - The application core recovery image overlay should contain the following code: - - .. code-block:: dts - - / { - chosen { - zephyr,code-partition = &cpuapp_recovery_partition; - nrf,tz-secure-image = &cpuapp_recovery_partition; - }; - }; - - &cpusec_cpuapp_ipc { - status = "okay"; - }; - - &cpusec_bellboard { - status = "okay"; - }; - - Optionally, if using the radio core recovery image, the radio core recovery image overlay should contain the following code: - - .. code-block:: dts - - / { - chosen { - zephyr,code-partition = &cpurad_recovery_partition; - nrf,tz-secure-image = &cpurad_recovery_partition; - }; - }; - -#. Add :file:`sysbuild.cmake` to the custom recovery application directory. - In this file add the following code: - - .. code-block:: cmake - - add_overlay_dts(recovery ${CMAKE_CURRENT_LIST_DIR}/boards/nrf54h20dk_nrf54h20_cpuapp.overlay) - - This will ensure that when building from the main application directory the overlay file is attached to and not overwritten by the configuration coming from the main application. - -#. If you want to add additional images to the recovery image, you can add it with code similar to the one from the default recovery firmware image: - - .. code-block:: cmake - - ExternalZephyrProject_Add( - APPLICATION recovery_hci_ipc - SOURCE_DIR "${ZEPHYR_BASE}/samples/bluetooth/hci_ipc" - BOARD ${BOARD}/${SB_CONFIG_SOC}/${SB_CONFIG_NETCORE_REMOTE_BOARD_TARGET_CPUCLUSTER} - BOARD_REVISION ${BOARD_REVISION} - ) - - add_overlay_config(recovery_hci_ipc ${CMAKE_CURRENT_LIST_DIR}/sysbuild/hci_ipc.conf) - add_overlay_dts(recovery_hci_ipc ${CMAKE_CURRENT_LIST_DIR}/sysbuild/hci_ipc.overlay) - - Replace recovery_hci_ipc, hci_ipc and ``SOURCE_DIR`` with the appropriate values for your application. - - -#. Optionally - you can modify the recovery manifest templates. - The manifest template defined by the ``CONFIG_SUIT_ENVELOPE_TEMPLATE_FILENAME`` is first searched for in :file:`suit/` in the main application directory. - If it is not found, :file:`suit/` in the recovery app is checked. - If the manifest template is still not found, the default template directory in NCS is checked (:file:`config/suit/templates`). - -#. Extend the ``SUIT_RECOVERY_APPLICATION`` choice with an option for attaching the custom recovery application. - Then, make the ``SB_CONFIG_SUIT_RECOVERY_APPLICATION_PATH`` point to the custom application path. - This is done by adding the following code to a sysbuild Kconfig file visible by the build system - this can be the :file:`Kconfig.sysbuild` file in the main application directory: - - .. code-block:: kconfig - - if SUIT_BUILD_RECOVERY - - choice SUIT_RECOVERY_APPLICATION - prompt "Select SUIT recovery application" - - config SUIT_RECOVERY_APPLICATION_CUSTOM - bool "Use the custom recovery application" - - endchoice - - config SUIT_RECOVERY_APPLICATION_PATH - string - default "" if SUIT_RECOVERY_APPLICATION_CUSTOM - - endif # SUIT_BUILD_RECOVERY - -.. note:: - ``SUIT_RECOVERY_APPLICATION_CUSTOM`` can be changed to any name that is appropriate for the given application. - -.. note:: - The value of ``SUIT_RECOVERY_APPLICATION_PATH`` can contain variables like ``${ZEPHYR_NRF_MODULE_DIR}`` - -#. When building the main application, set ``SB_CONFIG_SUIT_RECOVERY_APPLICATION_CUSTOM`` (or the Kconfig option name if a different one was chosen) to ``y``. diff --git a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_soc_binaries.rst b/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_soc_binaries.rst deleted file mode 100644 index 301c81cd8154..000000000000 --- a/doc/nrf/app_dev/device_guides/working_with_nrf/nrf54h/ug_nrf54h20_suit_soc_binaries.rst +++ /dev/null @@ -1,73 +0,0 @@ -.. _ug_nrf54h20_suit_soc_binaries: - -Upgrade the nRF54h20 SOC binaries with SUIT -########################################### - -The nRF54H20 SoC includes the *nRF54h20 SOC binaries*, precompiled firmware components provided by Nordic Semiconductor that provide basic functionality and security features. - -To see which version of the nRF54h20 SOC binaries to use with the given version of the nRF Connect SDK, see :ref:`abi_compatibility`. - -Updating the nRF54h20 SOC binaries -********************************** - -You can update the nRF54h20 SoC binaries in two ways. -Both methods require using the :file:`nordic_top.suit` envelope, which can be found inside the nRF54h20 SOC binaries ZIP file. - -The two methods for updating are the following: - -* Updating separately from the manufacturer application. - -* Updating along with the manufacturer application, by attaching the :file:`nordic_top.suit` envelope to the manufacturer root manifest, updating both the SoC binaries and the manufacturer's application simultaneously. - - -Updating the nRF54h20 SOC binaries separately from the manufacturer application -=============================================================================== - -When using this method, two separate updates are performed: - -1. An update using a manufacturer envelope that contains the update candidate. -2. A second update, provided by the :file:`nordic_top.suit` envelope from the SoC binaries bundle. - -Each envelope contains all the necessary information, allowing the device to differentiate between the two updates. - -This approach was chosen for the following benefits: - -* A smaller partition is required for storing the update candidate. -* There is no need to integrate the process of downloading Nordic artifacts into the manufacturer application build process. -* There is no need to update the version and sequence number of the manufacturer root manifest, if only SoC binaries updates are required. - -However, there are the following limitations: - -* Two separate updates are required, which is not supported by all protocols. -* The manufacturer envelope cannot ensure the compatibility of SoC binaries with the manufacturer application. - - -Attaching the nordic_top.suit envelope to the manufacturer root manifest -======================================================================== - -When building an application, you can configure the build system to include the Nordic components inside the SUIT root envelope used for updates. - -This approach has the following benefits: - -* The entire update can be performed by pushing a single image to the device, which may be required by some protocols. -* The manufacturer root manifest can be used to manage dependencies between the manufacturer application and the SoC binaries. - -This approach has the following drawbacks: - -* A larger partition is required to store the update candidate, as both the manufacturer and the SoC binaries must fit within it. -* The manufacturer must integrate the process of downloading Nordic artifacts into the update package creation process. - -To build and perform an update using this method, do the following: - -1. Unpack the SoC binaries ZIP file to a directory of your choice. - One of the extracted files will be the :file:`nordic_top.suit` envelope. - -2. Build the application, pointing to the directory containing the :file:`nordic_top.suit` envelope. - To do this, set the ``SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY`` sysbuild configuration option. - For example:: - - west build -b nrf54h20dk/nrf54h20/cpuapp -- -DSB_CONFIG_SUIT_ENVELOPE_NORDIC_TOP_DIRECTORY="\"\"" - - Replace ```` with the path to the directory containing the extracted :file:`nordic_top.suit` file. - -3. Use the :file:`build/DFU/root.suit` file generated by the build system to update both the manufacturer application and the SoC binaries. diff --git a/doc/nrf/app_dev/programming.rst b/doc/nrf/app_dev/programming.rst index 24f48bb9e1dc..3bc3653ef89a 100644 --- a/doc/nrf/app_dev/programming.rst +++ b/doc/nrf/app_dev/programming.rst @@ -33,7 +33,7 @@ For example, if you are working with an nRF9160 DK, you need to select the corre Programming to Thingy:91 also requires a :ref:`similar step `, but using a different switch (**SW2**). Programming the nRF52840 Dongle - To program the nRF52840 Dongle instead of a development kit, follow the programming instructions in :ref:`zephyr:nrf52840dongle_nrf52840` or use the `nRF Connect Programmer app `_. + To program the nRF52840 Dongle instead of a development kit, follow the programming instructions in :ref:`zephyr:nrf52840dongle_nrf52840` or use the `Programmer app `_. .. _programming_params: diff --git a/doc/nrf/applications.rst b/doc/nrf/applications.rst index b3c8d972c8bc..89ac6d3b3174 100644 --- a/doc/nrf/applications.rst +++ b/doc/nrf/applications.rst @@ -24,6 +24,7 @@ If you want to list applications available for one or more specific boards, `use ../../applications/nrf5340_audio/index ../../applications/nrf_desktop/README ../../applications/machine_learning/README + ../../applications/sdp/gpio/README ../../applications/serial_lte_modem/README ../../applications/matter_weather_station/README ../../applications/zigbee_weather_station/README diff --git a/doc/nrf/conf.py b/doc/nrf/conf.py index f5a6eb2e6073..a054e2c25687 100644 --- a/doc/nrf/conf.py +++ b/doc/nrf/conf.py @@ -48,6 +48,7 @@ "zephyr.link-roles", "zephyr.dtcompatible-role", "zephyr.domain", + "zephyr.gh_utils", "sphinx_tabs.tabs", "software_maturity_table", "sphinx_togglebutton", @@ -58,8 +59,8 @@ ] linkcheck_ignore = [ - # intersphinx links - r"(\.\.(\\|/))+(zephyr|kconfig|nrfxlib|mcuboot)", + # relative links (intersphinx, doxygen) + r"\.\.(\\|/)", # redirecting and used in release notes "https://github.com/nrfconnect/nrfxlib", # link to access local documentation @@ -133,7 +134,7 @@ } # create mbedtls config header (needed for Doxygen) -doxyrunner_outdir.mkdir(exist_ok=True) +doxyrunner_outdir.mkdir(exist_ok=True, parents=True) fin_path = NRF_BASE / "subsys" / "nrf_security" / "configs" / "legacy_crypto_config.h.template" fout_path = doxyrunner_outdir / "mbedtls_doxygen_config.h" @@ -214,6 +215,19 @@ "latest" if version.endswith("99") else version ) +# -- Options for zephyr.gh_utils ----------------------------------------------- + +gh_link_version = "main" if version.endswith("99") else f"v{version}" +gh_link_base_url = f"https://github.com/nrfconnect/sdk-nrf" +gh_link_prefixes = { + "applications/.*": "", + "samples/.*": "", + "scripts/.*": "", + "tests/.*": "", + ".*": "doc/nrf", +} + + def setup(app): app.add_css_file("css/nrf.css") diff --git a/doc/nrf/dev_model_and_contributions/adding_code.rst b/doc/nrf/dev_model_and_contributions/adding_code.rst index 0c0d61fc966f..867bf6b94a31 100644 --- a/doc/nrf/dev_model_and_contributions/adding_code.rst +++ b/doc/nrf/dev_model_and_contributions/adding_code.rst @@ -162,7 +162,7 @@ This is demonstrated by the following code, that would be placed somewhere in yo - name: nrf repo-path: sdk-nrf remote: ncs - revision: 2.7.0 + revision: 2.9.0-nRF54H20-rc1 import: true self: path: application @@ -189,7 +189,7 @@ For example: projects: - name: nrf remote: ncs - revision: 2.7.0 + revision: 2.9.0-nRF54H20-rc1 import: true # Example for how to override a repository in the nRF Connect SDK with your own: - name: mcuboot diff --git a/doc/nrf/drivers/bme68x_iaq.rst b/doc/nrf/drivers/bme68x_iaq.rst index 4e5dabc71e9e..522d6d81f6a4 100644 --- a/doc/nrf/drivers/bme68x_iaq.rst +++ b/doc/nrf/drivers/bme68x_iaq.rst @@ -10,7 +10,7 @@ BME68X IAQ driver You can use the BME68X IAQ driver to run the Bosch Sensor Environmental Cluster (BSEC) library in order to get Indoor Air Quality (IAQ) readings. The BSEC library is distributed with a Bosch proprietary license (`BSEC license`_) that prevents it from being part of |NCS|. -To start using it, you have to accept the license and enable the download with the following commands: +To start using it, you have to accept the license and enable the download by running the following commands in the :file:`nrf` folder: .. code-block:: diff --git a/doc/nrf/drivers/wifi.rst b/doc/nrf/drivers/wifi.rst new file mode 100644 index 000000000000..5f51bb0bd21d --- /dev/null +++ b/doc/nrf/drivers/wifi.rst @@ -0,0 +1,10 @@ +.. _wifi_drivers: + +Wi-Fi drivers +############# + +.. toctree:: + :maxdepth: 2 + + wifi/nrf70_native + wifi/nrf70_portable diff --git a/doc/nrf/drivers/wifi/nrf70_native.rst b/doc/nrf/drivers/wifi/nrf70_native.rst new file mode 100644 index 000000000000..16d57beaf671 --- /dev/null +++ b/doc/nrf/drivers/wifi/nrf70_native.rst @@ -0,0 +1,148 @@ +.. _nrf70_wifi: + +nRF Wi-Fi driver +################ + +.. contents:: + :local: + :depth: 2 + +The nRF Wi-Fi driver implements the Wi-Fi® protocol for the nRF70 FullMAC Series of devices. +FullMAC devices implement the Wi-Fi protocol in the chipset. +The driver configures the chipset and transfers the frames to and from the device to the networking stack. + +The nRF70 Series device is a companion IC and can be used with any Nordic Semiconductor System-on-Chips (SoCs), such as the nRF53 and nRF91 Series SoCs. + +You can enable the driver by using the following Kconfig options: + + * When using :ref:`zephyr:sysbuild` to build your application, set the :kconfig:option:`SB_CONFIG_WIFI_NRF70` Kconfig option to ``y`` in your :file:`sysbuild.conf` file.` + * When not using :ref:`zephyr:sysbuild`, set the :kconfig:option:`CONFIG_WIFI_NRF70` Kconfig option to ``y`` in your application's :file:`prj.conf` file. + +Architecture +************* + +The following figure illustrates the architecture of the nRF Wi-Fi driver. + +.. figure:: /images/nrf700x_wifi_driver.svg + :alt: nRF Wi-Fi driver block diagram + :align: center + :figclass: align-center + + nRF Wi-Fi driver architecture overview + +Design overview +*************** + +The nRF Wi-Fi driver follows an OS-agnostic design, and the driver implementation is split into OS-agnostic and OS (Zephyr)-specific code. +The OS-agnostic code is located in the :file:`${ZEPHYR_BASE}/../modules/nrf_wifi/` folder, and the Zephyr OS port is located in the :file:`${ZEPHYR_BASE}/drivers/wifi/nrf_wifi/` folder. + +The driver supports two modes of operation: + +Wi-Fi mode +========== + +In this mode, the driver is designed to be used with the Zephyr networking stack. +It is implemented as a network interface driver. + +The driver supports the following IEEE 802.11 features: + +* Wi-Fi 6 (802.11ax) support +* WPA3™/WPA2™ personal security +* IEEE 802.11 Power Save modes +* Scan-only mode +* IEEE 802.11 :term:`Station mode (STA)` +* :term:`Software-enabled Access Point (SoftAP or SAP)` mode + +The Wi-Fi Direct® mode feature is in the driver code but is not yet supported. + +Except for scan-only mode, the driver uses the host access point daemon (hostapd) to implement AP Media Access Control (MAC) Sublayer Management Entity (AP MLME) and wpa_supplicant to implement 802.1X supplicant. + +Radio Test mode +=============== + +The nRF Wi-Fi driver supports Radio Test mode, which you can use to test the RF performance of the nRF70 Series device. +This is a build time option that you can enable using the :kconfig:option:`CONFIG_NRF70_RADIO_TEST` Kconfig option. + +For more details about using this driver in Radio Test mode, see :ref:`wifi_radio_test`. + +Driver to nRF70 Series device communication +******************************************* + +The driver communicates with the nRF70 Series device using the QSPI/SPI interface. +The driver uses the QSPI/SPI interface to send commands to the nRF70 Series device, and to transfer data to and from the device. +The nRF7002 DK uses QSPI, whereas the nRF7002 EK uses SPI. + +To connect the nRF7002 EK to the SoC, the ``nrf7002ek`` shield is required. + +Configuration +************* + +The nRF Wi-Fi driver has the following configuration options: + +Kconfig configuration +===================== + +.. options-from-kconfig:: /../../../../../zephyr/drivers/wifi/nrf_wifi/Kconfig.nrfwifi + :show-type: + +Devicetree specification configuration +====================================== + +The maximum transmit power achieved on an nRF70 Series device-based product depends on the frequency band and operating channel. +This varies across different :term:`Printed Circuit Board (PCB)` designs. + +Multiple calibrations and checks are implemented to ensure consistency across channels and devices. +However, these values depend on PCB design, which may result in Error Vector Magnitude (EVM) and spectral mask failures. +To avoid this problem, you can specify the power ceiling at which the EVM and spectral mask are met for a given PCB design. +Additionally, build-time parameters are made available to drivers through the DTS overlay file. + +The following code snippet shows an example of the DTS overlay file. +Note that the numbers used in this following example do not represent any particular PCB design or package type. + +You must replace these values with measurements obtained from transmitter testing on your own PCB designs. +The values are represented in 1 dB increments. +To configure 15 dBm, use the value ``15``. + +.. code-block:: devicetree + + &nrf70 { + wifi-max-tx-pwr-2g-dsss = <21>; + wifi-max-tx-pwr-2g-mcs0 = <16>; + wifi-max-tx-pwr-2g-mcs7 = <16>; + wifi-max-tx-pwr-5g-low-mcs0 = <14>; + wifi-max-tx-pwr-5g-low-mcs7 = <14>; + wifi-max-tx-pwr-5g-mid-mcs0 = <14>; + wifi-max-tx-pwr-5g-mid-mcs7 = <14>; + wifi-max-tx-pwr-5g-high-mcs0 = <14>; + wifi-max-tx-pwr-5g-high-mcs7 = <14>; + }; + +See the DTS binding documentation for more information. + +.. _nrf70_wifi_tx_power_calculation: + +TX power calculation +******************** + +This section describes how to determine the accurate transmit (TX) power on the nRF70 Series development platforms. +The driver will always attempt to set the TX power to the maximum supported level, while ensuring the following constraints are met: + +* EVM and Spectral Emission Mask (SEM) for the modulation type or data rate (IEEE 802.11 requirement). +* In-band regulatory power limits (FCC and CE certification requirements). +* Out-of-band regulatory power limits (FCC and CE certification requirements). + +You can calculate the TX power by using the following formula: + +.. math:: + \begin{aligned} + \text{TX power} = \min \left( (P_{\text{reg}} - \text{AntGain}), P_{\text{max}} \right) - \text{EdgeBackoff} + \end{aligned} + +where the following parameters are used: + +* :math:`P_\text{reg}` is the applicable regulatory power limit, as described in :ref:`ug_nrf70_developing_regulatory_support`. +* ``AntGain`` is the compensation for the antenna gain in the TX direction, as described in `Antenna gain compensation`_. +* ``EdgeBackoff`` is the backoff applied to band edge channels, as described in `Band edge compensation`_. +* :math:`P_\text{max} = min (P_\text{ps} , P_\text{max-tx-pwr})` +* :math:`P_\text{ps}` is the maximum power level for the package type, modulation, and band as described in `Electrical specification for nRF7002`_. +* :math:`P_\text{max-tx-pwr}` is the sub-band power limit, dependent on the PCB design. diff --git a/doc/nrf/drivers/wifi/nrf70_portable.rst b/doc/nrf/drivers/wifi/nrf70_portable.rst new file mode 100644 index 000000000000..bd6c0a0ca7b9 --- /dev/null +++ b/doc/nrf/drivers/wifi/nrf70_portable.rst @@ -0,0 +1,19 @@ +.. nrf70_portable_wifi: + +nRF Wi-Fi portable driver +######################### + +.. contents:: + :local: + :depth: 2 + +The nRF Wi-Fi portable driver implements OS-agnostic code for the nRF70 FullMAC Series of devices. +This code can be used to implement OS-native drivers for the nRF70 Series devices. + +The Zephyr native driver implementation is located in the :file:`${ZEPHYR_BASE}/drivers/wifi/nrf_wifi/` folder. + +API documentation +***************** + +Once the nRF Wi-Fi driver is initialized, the application recognizes it as an Ethernet interface. +To use the Ethernet interface, the application can use the `Zephyr Network APIs`_. diff --git a/doc/nrf/external_comp/avsystem.rst b/doc/nrf/external_comp/avsystem.rst index aa65dd9513da..8f4980eea31d 100644 --- a/doc/nrf/external_comp/avsystem.rst +++ b/doc/nrf/external_comp/avsystem.rst @@ -124,7 +124,7 @@ The integration supports the following location services: * Cell-based location assistance * A-GNSS location assistance * :ref:`P-GPS location assistance ` -* :ref:`Wi-Fi based location assistance ` +* :ref:`Wi-Fi® based location assistance ` Cell-based location =================== diff --git a/doc/nrf/external_comp/bt_fast_pair.rst b/doc/nrf/external_comp/bt_fast_pair.rst index fa80dbc4b38f..7ec2114bc1cd 100644 --- a/doc/nrf/external_comp/bt_fast_pair.rst +++ b/doc/nrf/external_comp/bt_fast_pair.rst @@ -180,13 +180,33 @@ Provisioning registration data onto device The Fast Pair standard requires provisioning the device with Model ID and Anti-Spoofing Private Key obtained during device model registration. In the |NCS|, the provisioning data is generated as a hexadecimal file using the :ref:`bt_fast_pair_provision_script`. -When building the Fast Pair in the |NCS|, the build system automatically calls the Fast Pair provision script and includes the resulting hexadecimal file in the firmware (the :file:`merged.hex` file). +When building Fast Pair in the |NCS|, the build system automatically calls the Fast Pair provision script. +It then includes the resulting hexadecimal file in the final firmware that you can flash onto the device. +The Fast Pair provisioning data is stored on the dedicated Fast Pair partition, which has to be defined. + +Partition definition using the Partition Manager (PM) +----------------------------------------------------- + +For devices that support :ref:`partition_manager`, the system also automatically creates the ``bt_fast_pair`` partition. +The partition is defined in the :file:`subsys/partition_manager/pm.yml.bt_fast_pair` file. +The :ref:`fast_pair_input_device` sample follows this approach. +Alternatively, the Fast Pair partition can be defined manually in the application's configuration file. +To see how to do this, refer to the example in the :file:`samples/bluetooth/fast_pair/locator_tag/configuration/pm_static_nrf52840dk_nrf52840.yml` file which is a part of the :ref:`fast_pair_locator_tag` sample. +For more information about defining Partition Manager partitions, see the :ref:`Configuration ` section of the :ref:`partition_manager` page. + +Partition definition using the Devicetree (DTS) +----------------------------------------------- + +For devices that do not support :ref:`partition_manager`, you must declare the ``bt_fast_pair_partition`` partition manually in the devicetree. +Currently, the :ref:`zephyr:nrf54h20dk_nrf54h20` is the only device that requires manual partition definition. +To see how to do this, refer to the example in the :file:`samples/bluetooth/fast_pair/input_device/boards/nrf54h20dk_nrf54h20_cpuapp.overlay` file. + To build an application with the Fast Pair support, include the following additional CMake options: * ``FP_MODEL_ID`` - Fast Pair Model ID in format ``0xXXXXXX``, * ``FP_ANTI_SPOOFING_KEY`` - base64-encoded Fast Pair Anti-Spoofing Private Key. -The ``bt_fast_pair`` partition address is provided automatically by the build system. +The Fast Pair partition address is provided automatically by the build system. For example, when building an application with the |nRFVSC|, you need to add the following parameters in the **Extra CMake arguments** field on the **Add Build Configuration view**: ``-DFP_MODEL_ID=0xFFFFFF -DFP_ANTI_SPOOFING_KEY=AbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbA=``. Make sure to replace ``0xFFFFFF`` and ``AbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbAbA=`` with values obtained for your device. @@ -284,6 +304,7 @@ You can use the following API functions only in the *unready* state of the FMDN * The :c:func:`bt_fast_pair_fmdn_info_cb_register` function (optional) * The :c:func:`bt_fast_pair_fmdn_ring_cb_register` function (mandatory with the Kconfig configuration for at least one ringing component) * The :c:func:`bt_fast_pair_fmdn_read_mode_cb_register` function (optional) + * The :c:func:`bt_fast_pair_fmdn_motion_detector_cb_register` function (mandatory if the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_MOTION_DETECTOR` Kconfig option is enabled) * The :c:func:`bt_fast_pair_fmdn_id_set` API function used for assigning Bluetooth identity to FMDN activities (like advertising and connections) * The :c:func:`bt_fast_pair_factory_reset` API function used for performing factory reset of all Fast Pair data @@ -303,7 +324,7 @@ The clock drift is the difference between the beacon clock value as measured by The beacon clock is used to calculate the Ephemeral Identifier (EID), which is a part of the FMDN advertising payload. Seekers identify and track the provisioned Provider by analyzing the broadcasted EIDs in the advertising frames. Performing frequent system reboots or staying in the turned off state (for example, System OFF) may cause the clock drift to accumulate overtime. -If the clock drift is too high, the Provider EID encoded in the FMDN advertising payload becomes unidentifable to Seeker devices. +If the clock drift is too high, the Provider EID encoded in the FMDN advertising payload becomes unidentifiable to Seeker devices. When you disable the FMDN extension using the :c:func:`bt_fast_pair_disable` function, the beacon clock service also gets terminated. As a result, the clock information is no longer updated in the non-volatile memory. @@ -462,12 +483,12 @@ To comply with the requirements of the FMDN extension, you must manage the Fast When creating the Fast Pair advertising set with the :c:func:`bt_le_ext_adv_create` function, register the :c:struct:`bt_le_ext_adv_cb` structure with the following callbacks: * The :c:member:`bt_le_ext_adv_cb.connected` callback to track connections that are part of the application's connection pool (and were not created from the FMDN advertising set). -* The ``bt_le_ext_adv_cb.rpa_expired`` callback to synchronize the update of the application's advertising sets' payloads together with their respective Resolvable Private Addresses (RPA). +* The ``bt_le_ext_adv_cb.rpa_expired()`` callback to synchronize the update of the application's advertising sets' payloads together with their respective Resolvable Private Addresses (RPA). .. Important:: You must manage application advertising sets according to the FMDN provisioning state: - * For the provisioned device, only update the Fast Pair advertising payload during the ``bt_le_ext_adv_cb.rpa_expired`` callback execution. + * For the provisioned device, only update the Fast Pair advertising payload during the ``bt_le_ext_adv_cb.rpa_expired()`` callback execution. The FMDN extension controls the RPA rotation time in this state, and no other module in your application is allowed to change the rotation time. * For the unprovisioned device, control the Fast Pair advertising rotation time using the :c:func:`bt_le_set_rpa_timeout` and :c:func:`bt_le_oob_get_local` functions. You must still comply with the requirements of the Fast Pair protocol. @@ -504,7 +525,7 @@ Battery level indication ------------------------ To specify the battery level broadcasted in the FMDN advertising payload, use the :c:func:`bt_fast_pair_fmdn_battery_level_set` function. -You can update the battery level asynchronously without having to wait on the ``bt_le_ext_adv_cb.rpa_expired`` callback. +You can update the battery level asynchronously without having to wait on the ``bt_le_ext_adv_cb.rpa_expired()`` callback. The current API accepts the battery level as a percentage value, and ranges from 0% to 100%. This percentage value is first translated according to the quantified battery states defined in the FMDN Accessory specification and then encoded in the FMDN advertising set according to the following rules: @@ -632,6 +653,25 @@ In the Fast Pair not discoverable advertising mode, the Provider informs the lis You can also use the :c:func:`bt_fast_pair_has_account_key` function to check whether your Provider has any Account Keys. This API is especially useful after a system reboot when some Account Keys may already be stored in non-volatile memory. +.. _ug_bt_fast_pair_gatt_service_bond_management: + +Fast Pair bond management functionality +======================================= + +To enable the Fast Pair bond management functionality, use the :kconfig:option:`CONFIG_BT_FAST_PAIR_BOND_MANAGER` Kconfig option. +When this functionality is enabled, the Fast Pair subsystem tracks the Bluetooth bonds created through the Fast Pair Procedure and unpairs them if the procedure is incomplete or the Account Key associated with the bonds is removed. +It also unpairs the Fast Pair Bluetooth bonds on Fast Pair factory reset, because the factory reset removes all Account Keys stored on device. +Enabling the functionality imposes additional limitations related to enabling Fast Pair in runtime (:c:func:`bt_fast_pair_enable`). +See the :kconfig:option:`CONFIG_BT_FAST_PAIR_BOND_MANAGER` Kconfig option help for more details about using the functionality. + +The Fast Pair bond management functionality is disabled by default. +Make sure that it is enabled for the following use cases of the Google Fast Pair application as it is highly recommended: + +* Input device +* Mouse + +See :ref:`ug_bt_fast_pair_use_case` for more details about the use cases of the Google Fast Pair application. + FMDN extension ============== @@ -749,6 +789,8 @@ The following sources of ringing activity are supported: * :c:enum:`BT_FAST_PAIR_FMDN_RING_SRC_FMDN_BT_GATT` - This ringing source originates from the Bluetooth Fast Pair service and its Beacon Actions characteristic that is defined in the FMDN Accessory specification. * :c:enum:`BT_FAST_PAIR_FMDN_RING_SRC_DULT_BT_GATT` - This ringing source originates from the Bluetooth Accessory Non-owner service and its characteristic that are defined in the DULT specification. This source is available only when the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT` Kconfig option is enabled. +* :c:enum:`BT_FAST_PAIR_FMDN_RING_SRC_DULT_MOTION_DETECTOR` - This ringing source originates from the DULT motion detector module. + This source is available only when the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_MOTION_DETECTOR` Kconfig option is enabled. The following callbacks are defined in the :c:struct:`bt_fast_pair_fmdn_ring_cb` structure: @@ -761,6 +803,8 @@ The following callbacks are defined in the :c:struct:`bt_fast_pair_fmdn_ring_cb` * Ringing timeout in deciseconds. The timeout value of the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_RING_REQ_TIMEOUT_DULT_BT_GATT` Kconfig option is used for the :c:enum:`BT_FAST_PAIR_FMDN_RING_SRC_DULT_BT_GATT` DULT source. The default value of this Kconfig is in line with the `Fast Pair Unwanted Tracking Prevention Guidelines`_ documentation. + The timeout value of the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_RING_REQ_TIMEOUT_DULT_MOTION_DETECTOR` Kconfig option is used for the :c:enum:`BT_FAST_PAIR_FMDN_RING_SRC_DULT_MOTION_DETECTOR` DULT source. + There are no specific requirements for this Kconfig value in neither the FMDN nor the DULT specification. * Ringing volume level. The :c:member:`bt_fast_pair_fmdn_ring_cb.start_request` callback can be called again when the ringing action has already started. @@ -785,7 +829,7 @@ A call to the :c:func:`bt_fast_pair_fmdn_ring_state_update` function sends a mes The message is sent over the ringing source that is used by the connected peer. You must select the ringing source that is passed to the :c:func:`bt_fast_pair_fmdn_ring_state_update` function as a first parameter. -Typically, you pass the ringing source that is used in the last ringing callback that triggerred the ringing state update. +Typically, you pass the ringing source that is used in the last ringing callback that triggered the ringing state update. In certain edge cases, you can get two simultaneous requests to start ringing with two different sources before you are able to indicate the start of ringing with the :c:func:`bt_fast_pair_fmdn_ring_state_update` function. In this situation, you need to select the preferred ringing source. @@ -816,6 +860,38 @@ This update policy applies to all listed stop trigger types. To satisfy the requirements from the DULT specification when the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT` Kconfig option is enabled, the FMDN extension communicates with the DULT module to receive ringing requests from the DULT peers and to send updates regarding the ringing state. For more details on the ringing mechanism in the DULT module, see the :ref:`ug_dult_sound` documentation. +.. _ug_bt_fast_pair_gatt_service_fmdn_dult_motion_detector: + +Interacting with the motion detector from DULT +---------------------------------------------- + +The motion detector is an optional feature of the DULT subsystem that can be integrated into the FMDN extension. +For more details about the feature, see the `DULT motion detector`_ section of the DULT specification. +To activate the DULT motion detector functionality in the FMDN extension, enable the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_MOTION_DETECTOR` Kconfig option. +The FMDN extension implementation acts as a thin wrapper for the DULT motion detector module callbacks. +It passes callbacks from the DULT motion detector module to the user application. + +To register the motion detector callbacks, use the :c:func:`bt_fast_pair_fmdn_motion_detector_cb_register` function. +You must register all motion detector callbacks defined in the :c:struct:`bt_fast_pair_fmdn_motion_detector_cb` structure: + +* The motion detector start request is indicated by the :c:member:`bt_fast_pair_fmdn_motion_detector_cb.start` callback. + After this callback is called, the motion detector events are polled periodically with the :c:member:`bt_fast_pair_fmdn_motion_detector_cb.period_expired` callback. + A typical action after the motion detector start request is to power up the accelerometer and start collecting motion data. +* The motion detector period expired event is indicated by the :c:member:`bt_fast_pair_fmdn_motion_detector_cb.period_expired` callback. + This callback is called at the end of each motion detector period. + The :c:member:`bt_fast_pair_fmdn_motion_detector_cb.start` callback indicates the beginning of the first motion detector period. + The next period is started as soon as the previous period expires. + You need to notify the DULT module if motion was detected in the previous period. + The return value of this callback is used to pass this information. + The motion must be considered as detected if it fulfills the requirements defined in the `DULT motion detector`_ section of the DULT documentation. +* The motion detector stop request is indicated by the :c:member:`bt_fast_pair_fmdn_motion_detector_cb.stop` callback. + It concludes the motion detector activity that was started by the :c:member:`bt_fast_pair_fmdn_motion_detector_cb.start` callback. + A typical action after the motion detector stop request is to power down the accelerometer. + +The motion detector is started by the DULT subsystem when the accessory is in the separated state for an amount of time controlled by the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MIN` and :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MAX` Kconfig options. +When the motion is detected during the motion detector active period, the :c:member:`bt_fast_pair_fmdn_ring_cb.start_request` callback is called to request the ringing action with the :c:enum:`BT_FAST_PAIR_FMDN_RING_SRC_DULT_MOTION_DETECTOR` parameter as the ringing source. +Emitted sounds help to alert the non-owner that they are carrying an accessory that does not belong to them and might be used by the original owner to track their location. + .. _ug_bt_fast_pair_gatt_service_fmdn_battery_dult: Battery information with DULT @@ -849,7 +925,7 @@ Custom user reset action ======================== Use the :kconfig:option:`CONFIG_BT_FAST_PAIR_STORAGE_USER_RESET_ACTION` Kconfig option to enable a custom user reset action that executes together with the factory reset operation. -To define the custom user reset action, you need to implement the ``bt_fast_pair_factory_reset_user_action_perform`` function in your application code. +To define the custom user reset action, you need to implement the ``bt_fast_pair_factory_reset_user_action_perform()`` function in your application code. The function is defined as a weak, no-op function. Ensure that your reset action implementation executes correctly in the following execution contexts: @@ -1014,5 +1090,5 @@ The following are the required dependencies for the Fast Pair integration: * :ref:`nrfxlib:crypto` * :ref:`zephyr:bluetooth` * :ref:`zephyr:settings_api` -* :ref:`partition_manager` +* :ref:`partition_manager` (only for supported board targets) * :ref:`dult_readme` diff --git a/doc/nrf/external_comp/dult.rst b/doc/nrf/external_comp/dult.rst index f03b840df79d..98408648bb1e 100644 --- a/doc/nrf/external_comp/dult.rst +++ b/doc/nrf/external_comp/dult.rst @@ -46,6 +46,7 @@ The DULT integration in the |NCS| consists of the following steps: #. :ref:`Managing the near-owner state ` #. :ref:`Managing the identification process ` #. :ref:`Using the sound callbacks and managing the sound state ` +#. :ref:`Interacting with the motion detector ` #. :ref:`Managing the battery information ` These steps are described in the following sections. @@ -128,6 +129,7 @@ Use the following functions to register callbacks: * :c:func:`dult_id_read_state_cb_register` (mandatory) * :c:func:`dult_sound_cb_register` (mandatory) + * :c:func:`dult_motion_detector_cb_register` (mandatory if the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR` Kconfig option is enabled) Preset configuration ==================== @@ -213,6 +215,9 @@ There are following sound sources available: * Bluetooth GATT (:c:enum:`DULT_SOUND_SRC_BT_GATT`) - Sound source type originating from the Bluetooth ANOS. The non-owner device can trigger the sound callbacks by sending the relevant request message over the DULT GATT service. +* Motion detector (:c:enum:`DULT_SOUND_SRC_MOTION_DETECTOR`) - Sound source type originating from the motion detector. + The motion detector may trigger the sound callbacks if the accessory separated from the owner for an amount of time controlled by the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MIN` and :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MAX` Kconfig options is moving. + Used only when the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR` Kconfig option is enabled. * External (:c:enum:`DULT_SOUND_SRC_EXTERNAL`) - Sound source type originating from the location unknown to the DULT module. The accessory-locating network often provides a native mechanism for playing sounds. The :c:enum:`DULT_SOUND_SRC_EXTERNAL` sound source is used to notify the DULT module that externally defined sound action is in progress. @@ -221,12 +226,12 @@ To register the sound callbacks, use the :c:func:`dult_sound_cb_register` functi All sound callbacks defined in the :c:struct:`dult_sound_cb` structure are mandatory to register: * The sound start request is indicated by the :c:member:`dult_sound_cb.sound_start` callback. - The minimum duration for the DULT sound action is defined by the :c:macro:`DULT_SOUND_DURATION_MIN_MS`. - The upper layer determines the sound duration, and the duration must be greater than the value set in the :c:macro:`DULT_SOUND_DURATION_MIN_MS` macro. + The minimum duration for the DULT sound action originating from the Bluetooth ANOS is defined by the :c:macro:`DULT_SOUND_DURATION_BT_GATT_MIN_MS`. + The upper layer determines the sound duration, and for the sound action originating from the Bluetooth ANOS, the duration must exceed the value set in the :c:macro:`DULT_SOUND_DURATION_BT_GATT_MIN_MS` macro. + In case of the sound action originating from the motion detector, the minimum duration is not defined. * The sound stop request is indicated by the :c:member:`dult_sound_cb.sound_stop` callback. -All callbacks pass the sound source as a first parameter and only report the internal sound sources. -Currently, callbacks always use the :c:enum:`DULT_SOUND_SRC_BT_GATT` (internal) sound source. +All callbacks pass the sound source as a first parameter and only report the internal sound sources (:c:enum:`DULT_SOUND_SRC_BT_GATT` or :c:enum:`DULT_SOUND_SRC_MOTION_DETECTOR`). The :c:enum:`DULT_SOUND_SRC_EXTERNAL` never appears as the callback parameter as the external sound source cannot originate from the DULT module. You must treat all callbacks from the :c:struct:`dult_sound_cb` structure as requests. The internal sound state of the DULT subsystem is not automatically changed on any callback event. @@ -244,6 +249,41 @@ Asynchronous support is also necessary to report sound state changes that are tr .. rst-class:: numbered-step +.. _ug_dult_motion_detector: + +Interacting with the motion detector +************************************ + +DULT motion detector is an optional feature of the DULT subsystem. +For more details, see the `DULT motion detector`_ section of the DULT documentation. +To support the DULT motion detector feature in your project, enable the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR` Kconfig option. + +To integrate the motion detector feature, set the motion detector unwanted tracking accessory capability bit (:c:enum:`DULT_ACCESSORY_CAPABILITY_MOTION_DETECTOR_UT_BIT_POS`) in the accessory capabilities bitmask. +You must do this when registering the DULT user to indicate support for this feature. + +To register the motion detector callbacks, use the :c:func:`dult_motion_detector_cb_register` function. +You must register all motion detector callbacks defined in the :c:struct:`dult_motion_detector_cb` structure: + +* The motion detector start request is indicated by the :c:member:`dult_motion_detector_cb.start` callback. + After this callback is called, the motion detector events are polled periodically with the :c:member:`dult_motion_detector_cb.period_expired` callback. + A typical action after the motion detector start request is to power up the accelerometer and start collecting motion data. +* The motion detector period expired event is indicated by the :c:member:`dult_motion_detector_cb.period_expired` callback. + This callback is called at the end of each motion detector period. + The :c:member:`dult_motion_detector_cb.start` callback indicates the beginning of the first motion detector period. + The next period is started as soon as the previous period expires. + The user should notify the DULT module if motion was detected in the previous period. + The return value of this callback is used to pass this information. + The motion must be considered as detected if it fulfills the requirements defined in the `DULT motion detector`_ section of the DULT documentation. +* The motion detector stop request is indicated by the :c:member:`dult_motion_detector_cb.stop` callback. + It concludes the motion detector activity that was started by the :c:member:`dult_motion_detector_cb.start` callback. + A typical action after the motion detector stop request is to power down the accelerometer. + +The motion detector is started by the DULT subsystem when the accessory is in the separated state for an amount of time controlled by the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MIN` and :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MAX` Kconfig options. +When the motion is detected during the motion detector active period, the DULT subsystem calls the :c:member:`dult_sound_cb.sound_start` callback to request the sound action with the :c:enum:`DULT_SOUND_SRC_MOTION_DETECTOR` parameter as the sound source. +Emitted sounds help to alert the non-owner that they are carrying an accessory that does not belong to them and might be used by the original owner to track their location. + +.. rst-class:: numbered-step + .. _ug_dult_battery: Managing the battery information diff --git a/doc/nrf/external_comp/memfault.rst b/doc/nrf/external_comp/memfault.rst index 6730988603b8..868162d1f6ac 100644 --- a/doc/nrf/external_comp/memfault.rst +++ b/doc/nrf/external_comp/memfault.rst @@ -202,7 +202,7 @@ The following samples demonstrate the Memfault integration in |NCS|: * :ref:`peripheral_mds` - This sample has an implementation of the Memfault Diagnostic Service (MDS). It sends data to the Memfault cloud through a Bluetooth gateway. -* :ref:`memfault_sample` - This sample connects to an LTE network using an nRF91 Series DK or Thingy:91, or to Wi-Fi using the nRF7002 DK, and sends the collected data to Memfault's cloud using HTTPS. +* :ref:`memfault_sample` - This sample connects to an LTE network using an nRF91 Series DK, Thingy:91, or Thingy:91 X, or to Wi-Fi® using the nRF7002 DK, and sends the collected data to Memfault's cloud using HTTPS. Library support *************** diff --git a/doc/nrf/external_comp/nrf_cloud.rst b/doc/nrf/external_comp/nrf_cloud.rst index 10563d273cdc..84a75bb52d20 100644 --- a/doc/nrf/external_comp/nrf_cloud.rst +++ b/doc/nrf/external_comp/nrf_cloud.rst @@ -19,7 +19,7 @@ If the device has sufficiently large external flash storage, the modem can be en nRF Cloud also helps your devices determine their locations using GNSS. It uses both assisted GNSS (A-GNSS) and predicted GPS (P-GPS). -It can determine device location from cellular and Wi-Fi network information sent by the device. +It can determine device location from cellular and Wi-Fi® network information sent by the device. Additionally, nRF Cloud allows devices to report data to the cloud for collection and analysis later. To read more about nRF Cloud, see the `nRF Cloud`_ website and the `nRF Cloud documentation`_. @@ -73,10 +73,10 @@ nRF Cloud supports a variety of device ID formats: Nordic development kits such as the nRF9160 DK have a sticker on the back indicating the device's IMEI and PIN. They are preprovisioned with just-in-time provisioning (JITP) certificates so they can be added easily to nRF Cloud using the device ID ``nrf-IMEI`` and PIN. -Device IDs that start with ``nrf-`` are checked against a database of genuine Nordic development kits and Thingy:91s. +Device IDs that start with ``nrf-`` are checked against a database of genuine Nordic development kits, Thingy:91, and Thingy:91 X. If the device ID (and the accompanying PIN or Hardware ID) is not found in the database, the device cannot connect. This means that customers using custom hardware cannot use the ``nrf-`` prefix for their device IDs. -Choose your own PIN when creating creating JITP credentials for a custom device. +Choose your own PIN when creating JITP credentials for a custom device. The `device_credentials_installer.py`_ script uses the device UUID format by default. See these command line options to use other device ID formats: @@ -97,7 +97,7 @@ Your firmware's device ID configuration must align with the options used when ex See the :ref:`configuration_device_id` section of the :ref:`lib_nrf_cloud` library documentation for more information. The :file:`device_credentials_installer.py` script automatically connects over USB or RTT to your device and installs the certificates in the modem. -Before running the script, you must install and run firmware on the device that allows it to accept AT commands over USB or RTT, such as the :ref:AT Client ` sample. +Before running the script, you must install and run firmware on the device that allows it to accept AT commands over USB or RTT, such as the :ref:`AT Client ` sample. If the device already contains certificates, delete the old certificates from the device by adding the ``--delete`` option. @@ -194,7 +194,7 @@ A device can successfully connect to `nRF Cloud`_ using MQTT if the following re Alternatively, use the nRF Cloud REST API to do this. - #. Program the credentials in the JSON file into the device using the `Cellular Monitor`_ app. + #. Program the credentials in the JSON file into the device using the `Cellular Monitor app`_. The private key is exposed during these steps, and therefore, this is the less secure option. See :ref:`nrf9160_ug_updating_cloud_certificate` for details. @@ -253,7 +253,7 @@ The following samples demonstrate nRF Cloud-specific functionality using REST: * :ref:`nrf_cloud_rest_fota` * :ref:`nrf_cloud_rest_device_message` -* :ref:`nrf_cloud_rest_cell_pos_sample` +* :ref:`nrf_cloud_rest_cell_location` Other related samples and applications that use nRF Cloud services: diff --git a/doc/nrf/glossary.rst b/doc/nrf/glossary.rst index 2d6d7b053252..c789baa83f54 100644 --- a/doc/nrf/glossary.rst +++ b/doc/nrf/glossary.rst @@ -102,7 +102,7 @@ Glossary Buffer Status Report (BSR) Carries the information on the amount of data available for each Logical Channel Group (LCG) from UE to eNB. - From Wi-Fi perspective, BSR indicates the amount of queued uplink data buffered in the respective STA and access categories to which the queued data belong. + From Wi-Fi® perspective, BSR indicates the amount of queued uplink data buffered in the respective STA and access categories to which the queued data belong. Build configuration A set of build scripts. @@ -603,6 +603,13 @@ Glossary It includes a public REST API that can be used for building IoT solutions. See `nRF Cloud`_. + nRF Connect SDK Add-ons + An index of publicly available supplementary components that extend the |NCS|'s functionality. + The index can be accessed from the |nRFVSC|, and can also be browsed on `add-on webpage `_. + Add-ons in the index follow specific contribution guidelines and are maintained by their respective owners. + The workspace applications listed there can be used to create out-of-tree :ref:`workspace applications `. + For more information, including how to contribute your own add-on to the index, read :file:`README.md` and :file:`CONTRIBUTING.md` in the `ncs-app-index repository `_. + nRF repository An |NCS| repository, hosted in the `nrfconnect GitHub organization`_, that does not have an externally maintained, open-source upstream. It is exclusive to Nordic development. diff --git a/doc/nrf/gsg_guides.rst b/doc/nrf/gsg_guides.rst index a9273b0acb60..4d4199eaefe3 100644 --- a/doc/nrf/gsg_guides.rst +++ b/doc/nrf/gsg_guides.rst @@ -1,50 +1,53 @@ .. _gsg_guides: .. _ug_nrf52_gs: .. _ug_nrf5340_gs: +.. _ug_thingy53_gs: Quick Start ########### .. quick_start_table_start -Use the `Quick Start`_ app, available from `nRF Connect for Desktop`_, to familiarize yourself with the |NCS| tools and components for some of the devices supported by the |NCS|. +Use the `Quick Start app`_, available from `nRF Connect for Desktop`_, to familiarize yourself with the |NCS| tools and components for some of the devices supported by the |NCS|. The application uses Nordic Semiconductor tools and precompiled binaries and does not require installing the |NCS|. .. important:: The following table does not list all devices supported in the |NCS|. For the full list, see the :ref:`board support pages `. -+----------------------+----------------------------------------------------------------+--------------------------------+ -| Device | Getting started method | Device user guide | -+======================+================================================================+================================+ -| nRF9161 DK | | `nRF9161 DK Hardware`_ | -+----------------------+ +--------------------------------+ -| nRF9160 DK | | `nRF9160 DK Hardware`_ | -+----------------------+ +--------------------------------+ -| nRF9151 DK | | `nRF9151 DK Hardware`_ | -+----------------------+ +--------------------------------+ -| nRF54L15 DK | `Quick Start`_ app | *Not yet available* | -+----------------------+ +--------------------------------+ -| nRF5340 DK | | `nRF5340 DK User Guide`_ | -+----------------------+ +--------------------------------+ -| nRF52840 DK | | `nRF52840 DK User Guide`_ | -+----------------------+ +--------------------------------+ -| nRF52833 DK | | `nRF52833 DK User Guide`_ | -+----------------------+ +--------------------------------+ -| nRF52 DK | | `nRF52 DK User Guide`_ | -+----------------------+----------------------------------------------------------------+--------------------------------+ -| nRF54H20 DK | :ref:`ug_nrf54h20_gs` - *Quick Start support coming soon* | *Not yet available* | -+----------------------+----------------------------------------------------------------+--------------------------------+ -| nRF7002 DK | :ref:`ug_nrf7002_gs` | `nRF7002 DK Hardware`_ | -+----------------------+----------------------------------------------------------------+--------------------------------+ -| nRF7002 EB | `Get started `_ on the product page | `nRF7002 EB User Guide`_ | -+----------------------+----------------------------------------------------------------+--------------------------------+ -| Thingy:91 | :ref:`ug_thingy91_gsg` | `Nordic Thingy:91 User Guide`_ | -+----------------------+----------------------------------------------------------------+--------------------------------+ -| Thingy:53 | :ref:`ug_thingy53_gs` | `Nordic Thingy:53 Hardware`_ | -+----------------------+----------------------------------------------------------------+--------------------------------+ -| nPM1300 EK | `Get started `_ on the product page | `nPM1300 EK User Guide`_ | -+----------------------+----------------------------------------------------------------+--------------------------------+ ++----------------------+--------------------------------------------------------------------+---------------------------------------+ +| Device | Getting started method | Device user guide | ++======================+====================================================================+=======================================+ +| Nordic Thingy:91 X | | `Nordic Thingy:91 X User Guide`_ | ++----------------------+ +---------------------------------------+ +| nRF9161 DK | | `nRF9161 DK Hardware`_ | ++----------------------+ +---------------------------------------+ +| nRF9160 DK | | `nRF9160 DK Hardware`_ | ++----------------------+ +---------------------------------------+ +| nRF9151 DK | | `nRF9151 DK Hardware`_ | ++----------------------+ +---------------------------------------+ +| nRF54L15 DK | `Quick Start app`_ | `nRF54L15 DK User Guide`_ | ++----------------------+ +---------------------------------------+ +| nRF5340 DK | | `nRF5340 DK User Guide`_ | ++----------------------+ +---------------------------------------+ +| nRF52840 DK | | `nRF52840 DK User Guide`_ | ++----------------------+ +---------------------------------------+ +| nRF52833 DK | | `nRF52833 DK User Guide`_ | ++----------------------+ +---------------------------------------+ +| nRF52 DK | | `nRF52 DK User Guide`_ | ++----------------------+--------------------------------------------------------------------+---------------------------------------+ +| nRF54H20 DK | :ref:`ug_nrf54h20_gs` - *Quick Start app support coming soon* | *Not yet available* | ++----------------------+--------------------------------------------------------------------+---------------------------------------+ +| nRF7002 DK | :ref:`ug_nrf7002_gs` | `nRF7002 DK Hardware`_ | ++----------------------+--------------------------------------------------------------------+---------------------------------------+ +| nRF7002 EB | `Get started `_ on the product page | `nRF7002 EB User Guide`_ | ++----------------------+--------------------------------------------------------------------+---------------------------------------+ +| Thingy:91 | :ref:`ug_thingy91_gsg` | `Nordic Thingy:91 User Guide`_ | ++----------------------+--------------------------------------------------------------------+---------------------------------------+ +| Thingy:53 | `Get started `_ on the product page | `Nordic Thingy:53 Hardware`_ | ++----------------------+--------------------------------------------------------------------+---------------------------------------+ +| nPM1300 EK | `Get started `_ on the product page | `nPM1300 EK User Guide`_ | ++----------------------+--------------------------------------------------------------------+---------------------------------------+ .. quick_start_table_end @@ -55,5 +58,4 @@ The application uses Nordic Semiconductor tools and precompiled binaries and doe gsg_guides/nrf9160_gs gsg_guides/thingy91_gsg gsg_guides/nrf7002_gs - gsg_guides/thingy53_gs gsg_guides/gsg_other diff --git a/doc/nrf/gsg_guides/images/programmer_thingy53_mcuboot_dfu.png b/doc/nrf/gsg_guides/images/programmer_thingy53_mcuboot_dfu.png deleted file mode 100644 index f6b730a251b5..000000000000 Binary files a/doc/nrf/gsg_guides/images/programmer_thingy53_mcuboot_dfu.png and /dev/null differ diff --git a/doc/nrf/gsg_guides/images/thingy53_nrf5340_dk.svg b/doc/nrf/gsg_guides/images/thingy53_nrf5340_dk.svg deleted file mode 100644 index 55991e0acd9d..000000000000 --- a/doc/nrf/gsg_guides/images/thingy53_nrf5340_dk.svg +++ /dev/null @@ -1,19849 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/gsg_guides/images/thingy53_sw1_sw2.svg b/doc/nrf/gsg_guides/images/thingy53_sw1_sw2.svg deleted file mode 100644 index 8cdc672ed391..000000000000 --- a/doc/nrf/gsg_guides/images/thingy53_sw1_sw2.svg +++ /dev/null @@ -1,4475 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/gsg_guides/images/thingy53_sw1_usb.svg b/doc/nrf/gsg_guides/images/thingy53_sw1_usb.svg deleted file mode 100644 index 0345d9d5e32d..000000000000 --- a/doc/nrf/gsg_guides/images/thingy53_sw1_usb.svg +++ /dev/null @@ -1,4437 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/gsg_guides/images/thingy91_insert_sim.svg b/doc/nrf/gsg_guides/images/thingy91_insert_sim.svg deleted file mode 100644 index 914240b05199..000000000000 --- a/doc/nrf/gsg_guides/images/thingy91_insert_sim.svg +++ /dev/null @@ -1,3657 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/doc/nrf/gsg_guides/images/thingy91_insert_sim.webp b/doc/nrf/gsg_guides/images/thingy91_insert_sim.webp new file mode 100644 index 000000000000..95120ef9abb0 Binary files /dev/null and b/doc/nrf/gsg_guides/images/thingy91_insert_sim.webp differ diff --git a/doc/nrf/gsg_guides/nrf7002_gs.rst b/doc/nrf/gsg_guides/nrf7002_gs.rst index 6b153d8ba083..b9ac952e42cf 100644 --- a/doc/nrf/gsg_guides/nrf7002_gs.rst +++ b/doc/nrf/gsg_guides/nrf7002_gs.rst @@ -194,8 +194,8 @@ Installing the required software On your computer, install `nRF Connect for Desktop`_. After installing and starting the application, install the Programmer app. -You must also install a terminal emulator, such as `nRF Connect Serial Terminal`_, the nRF Terminal (part of the `nRF Connect for Visual Studio Code`_ extension), or PuTTY. -nRF Connect Serial Terminal is the recommended method for :ref:`nrf70_gs_connecting`. +You must also install a terminal emulator, such as the `Serial Terminal app`_, the nRF Terminal (part of the `nRF Connect for Visual Studio Code`_ extension), or PuTTY. +The Serial Terminal app is the recommended method for :ref:`nrf70_gs_connecting`. On your mobile device, install the `nRF Connect for Mobile`_ application from the corresponding application store. @@ -329,6 +329,8 @@ Follow the instructions in the :ref:`building` page to build and the :ref:`progr .. note:: To flash and debug applications on the nRF7002 DK, you must use the `nRF Command Line Tools`_ version 10.12.0 or above. + |nrf_CLT_deprecation_note| + Debugging ========= diff --git a/doc/nrf/gsg_guides/nrf9160_gs.rst b/doc/nrf/gsg_guides/nrf9160_gs.rst index 7d56d1ac3a27..68894e31ab49 100644 --- a/doc/nrf/gsg_guides/nrf9160_gs.rst +++ b/doc/nrf/gsg_guides/nrf9160_gs.rst @@ -7,7 +7,7 @@ Getting started with nRF9160 DK :local: :depth: 2 -This guide lets you evaluate the |NCS|'s support for nRF9160 DK :term:`Development Kit (DK)` without the need of installing the SDK. +This guide lets you evaluate the |NCS|'s support for nRF9160 :term:`Development Kit (DK)` without the need of installing the SDK. You will update the firmware (both the modem firmware and the application firmware) and the nRF Cloud certificates of the DK, and conduct some initial tests. If you want to go through a hands-on online training to familiarize yourself with cellular IoT technologies and development of cellular applications, enroll in the `Cellular IoT Fundamentals course`_ in the `Nordic Developer Academy`_. @@ -40,13 +40,13 @@ On your computer, one of the following operating systems: .. _nrf9160_gs_installing_software: .. _nrf9160_gs_updating_fw: -Getting started using Quick Start -********************************* +Getting started using the Quick Start app +***************************************** To work with the nRF9160 DK firmware and certificates, complete the following steps: 1. Install `nRF Connect for Desktop`_. -#. Start nRF Connect for Desktop and install the Quick Start application, a cross-platform tool for guided setup and installation procedures. + This also automatically installs the `Quick Start app`_, a cross-platform tool for guided setup and installation procedures. #. Prepare your DK: a. Punch out the nano-SIM from the SIM card and plug it into the SIM card holder on the nRF9160 DK. diff --git a/doc/nrf/gsg_guides/thingy53_gs.rst b/doc/nrf/gsg_guides/thingy53_gs.rst deleted file mode 100644 index 95765e45f4fa..000000000000 --- a/doc/nrf/gsg_guides/thingy53_gs.rst +++ /dev/null @@ -1,273 +0,0 @@ -.. _ug_thingy53_gs: - -Getting started with Thingy:53 -############################## - -.. contents:: - :local: - :depth: 2 - -This guide lets you evaluate the |NCS|'s support for Nordic Thingy:53 without the need of installing the SDK. -It tells you how to update the firmware on the nRF5340 :term:`System on Chip (SoC)` on the Nordic Thingy:53, and how to get started with machine learning with Edge Impulse. - -If you want to go through an online training course to familiarize yourself with Bluetooth Low Energy and the development of Bluetooth LE applications, enroll in the `Bluetooth LE Fundamentals course`_ in the `Nordic Developer Academy`_. - -.. _thingy53_gs_requirements: - -Minimum requirements -******************** - -Make sure you have all the required hardware and that your computer or mobile device has one of the supported operating systems. - -Hardware -======== - -* :term:`Universal Serial Bus (USB)`-C cable -* Computer or mobile device - -Software -======== - -On your computer, one of the following operating systems: - -* Microsoft Windows -* macOS -* Ubuntu Linux - -|Supported OS| - -If you are using a mobile device, one of the following operating systems: - -* Android -* iOS - -.. _thingy53_gs_installing_software: - -Installing the required software -******************************** - -When using a computer to work with the Nordic Thingy:53 firmware, install `nRF Connect for Desktop`_. -After installing and starting the application, install the Programmer app. - -When using a mobile device to work with the Nordic Thingy:53, install the `nRF Programmer`_ mobile application from the corresponding application store. - -.. _thingy53_gs_updating_firmware: -.. _thingy53_gs_precompiled_firmware: - -Getting started with precompiled firmware samples -************************************************* - -The Nordic Thingy:53 is preloaded with Edge Impulse application firmware, MCUboot bootloader, and a SoftDevice controller on the network core of the nRF5340 SoC. -For more information on the firmware and associated features, see :ref:`ug_thingy53`. - -In addition to Edge Impulse, the |NCS| contains multiple precompiled samples that you can program to the Nordic Thingy:53. -For a non-exhaustive list, see :ref:`thingy53_compatible_applications` in :ref:`ug_thingy53`. - -To try different samples or to update the existing firmware on the Nordic Thingy:53, you can use Bluetooth® Low Energy (LE), USB (MCUboot), or an external debug probe. - -.. _thingy53_gs_updating_ble: - -Updating through Bluetooth LE -============================= - -You can update the Nordic Thingy:53 application and network core over Bluetooth LE using the nRF Programmer mobile application for Android or iOS. - -Complete these steps to update the firmware: - -1. Open the nRF Programmer app. - - A list of available samples appears. - - .. figure:: /gsg_guides/images/thingy53_sample_list.png - :alt: nRF Programmer - list of samples - - nRF Programmer - list of samples - -#. Select a sample. - - Application info appears. - - .. figure:: /gsg_guides/images/thingy53_application_info.png - :alt: nRF Programmer - Application Info - - nRF Programmer - Application Info - -#. Select the version of the sample from the drop-down menu. -#. Tap :guilabel:`Download`. - - When the download is complete, the name of the button changes to :guilabel:`Install`. -#. Tap :guilabel:`Install`. - - A list of nearby devices and their signal strengths appears. -#. Select your Nordic Thingy:53 from the list. - It is listed as **El Thingy:53**. - - The transfer of the firmware image starts, and a progress wheel appears. - - .. figure:: /gsg_guides/images/thingy53_progress_wheel.png - :alt: nRF Programmer - progress wheel - - nRF Programmer - progress wheel - - If you want to pause the update process, tap :guilabel:`Pause`. - If you want to stop the update process, tap :guilabel:`Stop`. - - The image transfer is complete when the progress wheel reaches 100%. - The Nordic Thingy:53 is reset and updated to the new firmware sample. -#. Tap :guilabel:`Done` to return to Application info. - -.. _thingy53_gs_updating_usb: - -Updating through USB -==================== - -You can update the Nordic Thingy:53 application and network core firmware over USB by using MCUboot, which is a secure bootloader that you can use to update applications without an external debugger. - -.. note:: - Do not unplug the Nordic Thingy:53 during this process. - -Complete the following steps to update the firmware: - -1. Open the `Nordic Thingy:53 Downloads`_ page. -#. Go to the **Precompiled application firmware** section, and download the latest version. -#. Extract the zip file to a location of your choice. - - The :file:`CONTENTS.txt` file in the extracted folder contains the location and names of the different firmware images. - -#. Take off the top cover of the Nordic Thingy:53 so you can access the **SW2** button in Step 7. -#. Plug the Nordic Thingy:53 into the computer using a USB-C cable. - - .. figure:: /gsg_guides/images/thingy53_sw1_usb.svg - :alt: The Nordic Thingy:53 schematic - **SW1** and USB connector cover - - The Nordic Thingy:53 schematic - **SW1** and USB connector cover - -#. Open nRF Connect for Desktop and launch the Programmer app. -#. Press **SW2** while moving the power switch **SW1** to the **ON** position. - - .. figure:: /gsg_guides/images/thingy53_sw1_sw2.svg - :alt: The Nordic Thingy:53 schematic - **SW1** and **SW2** - - The Nordic Thingy:53 schematic - **SW1** and **SW2** - -#. In the Programmer navigation bar, click :guilabel:`SELECT DEVICE`. - - A drop-down menu appears. -#. In the drop-down menu, select :guilabel:`Bootloader Thingy:53`. -#. Click :guilabel:`Add file` in the **FILE** section, and select :guilabel:`Browse`. - - A file explorer window appears. -#. Navigate to the folder where you extracted the application firmware. -#. Open the :file:`Peripheral_LBS` folder, select the update file and click :guilabel:`Open`. - - The update file is titled :file:`peripheral_lbs__thingy53_nrf5340.zip`. -#. Click the :guilabel:`Write` button in the **DEVICE** section. - - The **MCUboot DFU** window appears. - - .. figure:: /gsg_guides/images/programmer_thingy53_mcuboot_dfu.png - :alt: Programmer - MCUboot DFU window - - Programmer - MCUboot DFU window - -#. Click :guilabel:`Write` in the **MCUboot DFU** window. - - The flash slot is erased. - When the flash slot has been erased, image transfer starts and a progress bar appears. - - When the image transfer has been completed, the network core part of the image is transferred from RAM to the network core flash. - This can take up to 20 seconds. - - When the update is complete, a **Completed successfully** message appears. - -You can now disconnect the Nordic Thingy:53 from the computer and put the top cover back on. - -.. _thingy53_gs_updating_external_probe: - -Updating through external debug probe -===================================== - -You can update the Nordic Thingy:53 application and network core firmware by using an external debug probe. - -.. note:: - The external debug probe must support Arm Cortex-M33, such as the nRF5340 DK. - You need a 10-pin 2x5 socket-socket 1.27 mm IDC (:term:`Serial Wire Debug (SWD)`) JTAG cable to connect to the external debug probe. - -Complete these steps to update the firmware. -In these steps, the nRF5340 DK is used as the external debug probe. -Do no unplug or power off the devices during this process. - -1. Open the `Nordic Thingy:53 Downloads`_ page. -#. Go to the **Precompiled application firmware** section and download the latest version. -#. Extract the zip file to a location of your choice. - - The :file:`CONTENTS.txt` file in the extracted folder contains the location and names of the different firmware images. - -#. Open nRF Connect for Desktop and launch the Programmer app. -#. Prepare the hardware: - - a. Open the connector cover on the side of the Nordic Thingy:53. - #. Use a JTAG cable to connect the Nordic Thingy:53 to the debug out port on a 10-pin external debug probe. - - .. figure:: /gsg_guides/images/thingy53_nrf5340_dk.svg - :alt: Nordic Thingy:53 connected to the debug port on a 10-pin external debug probe - - Nordic Thingy:53 connected to the debug port on a 10-pin external debug probe - - #. Power on the Nordic Thingy:53; move the power switch **SW1** to the **ON** position. - #. Power on the external debug probe. - #. Connect the external debug probe to the computer with a micro-USB cable. - - In the Programmer app's navigation bar, :guilabel:`No devices available` changes to :guilabel:`SELECT DEVICE`. - - .. figure:: images/programmer_select_device1.png - :alt: Programmer - Select device - - Programmer - Select device - -#. Click :guilabel:`Select device` and select the appropriate debug probe entry from the drop-down list. - - The icon text changes to board name and the ID of the selected device, and the **Device memory layout** section indicates that the device is connected. - - You can identify the nRF5340 DK by its PCA number PCA10095 and its ID that is printed on the label sticker on the DK. - - If the nRF5340 DK does not show up in the drop-down list, press ``Ctrl+R`` in Windows or ``command+R`` in macOS to restart the Programmer application. - -#. Click :guilabel:`Add file` in the **FILE** section, and select :guilabel:`Browse`. - - A file explorer window appears. -#. Navigate to the folder where you extracted the application firmware. -#. Open the folder for the application that you want to transfer to the Nordic Thingy:53. -#. Select the corresponding HEX file to be used with the debug probe and click :guilabel:`Open`. - - The HEX file appears in the **File memory layout** section. -#. Click :guilabel:`Erase & write` in the **DEVICE** section of the side panel. - -The update is complete when the animation in the Programmer app's **Device memory layout** section ends. - -.. _thingy53_gs_machine_learning: - -Getting started with machine learning -************************************* - -The Nordic Thingy:53 is preprogrammed with Edge Impulse firmware. -To connect the Nordic Thingy:53 to the Edge Impulse Studio, use the nRF Edge Impulse mobile application to connect over Bluetooth LE, or connect the Nordic Thingy:53 to a computer to connect over USB. - -The Edge Impulse firmware enables data collection from all the sensors on the Nordic Thingy:53. -You can use the collected data to train and test machine learning models. -Deploy the trained machine learning model to the Nordic Thingy:53 over Bluetooth LE or USB. - -Complete the following steps to get started with Edge Impulse: - -1. Go to the `Edge Impulse`_ website. -#. Create a free Edge Impulse account. -#. Follow the instructions in the `Nordic Semi Thingy:53 page`_. - -Next steps -********** - -You have now completed getting started with the Nordic Thingy:53. -See the following links for where to go next: - -* :ref:`installation` and :ref:`configuration_and_build` documentation to install the |NCS| and learn more about its development environment. -* :ref:`ug_thingy53` for more advanced topics related to the Nordic Thingy:53. diff --git a/doc/nrf/gsg_guides/thingy91_gsg.rst b/doc/nrf/gsg_guides/thingy91_gsg.rst index 9e82b0014f72..fb21e39d1203 100644 --- a/doc/nrf/gsg_guides/thingy91_gsg.rst +++ b/doc/nrf/gsg_guides/thingy91_gsg.rst @@ -47,7 +47,7 @@ Before you start updating the modem firmware and application on the Thingy:91, y Complete the following steps to prepare the Thingy:91 for setup: -1. Install the `Cellular Monitor`_ app on the computer: +1. Install the `Cellular Monitor app`_ on the computer: a. Go to `nRF Connect for Desktop Downloads `_. #. Download and install nRF Connect for Desktop. @@ -60,8 +60,9 @@ Complete the following steps to prepare the Thingy:91 for setup: #. Remove the protective cover. #. Punch out the nano-SIM from the SIM card and plug it into the SIM card holder on the Thingy:91. - .. figure:: images/thingy91_insert_sim.svg + .. figure:: images/thingy91_insert_sim.webp :alt: Inserting SIM + :width: 352px Inserting SIM @@ -104,22 +105,22 @@ Before you start, make sure the Thingy:91 is connected to the computer with a mi To update the firmware on the Thingy:91, complete the following steps: -1. Open the `Cellular Monitor`_ app. +1. Open the `Cellular Monitor app`_. #. Click :guilabel:`SELECT DEVICE` and select the Thingy:91 from the drop-down list. .. figure:: images/cellularmonitor_selectdevice_thingy91.png - :alt: Cellular Monitor - Select device + :alt: Cellular Monitor app - Select device - Cellular Monitor - Select device + Cellular Monitor app - Select device The drop-down text changes to the type of the selected device, with its SEGGER ID below the name. #. Click :guilabel:`Program device` in the **ADVANCED OPTIONS** section. .. figure:: images/cellularmonitor_programdevice_thingy91.png - :alt: Cellular Monitor - Program device + :alt: Cellular Monitor app - Program device - Cellular Monitor - Program device + Cellular Monitor app - Program device The **Program sample app** window appears, displaying applications you can program to the Thingy:91. @@ -127,9 +128,9 @@ To update the firmware on the Thingy:91, complete the following steps: Asset Tracker v2 is an application that simulates sensor data and transmits it to Nordic Semiconductor's cloud solution, `nRF Cloud`_. .. figure:: images/cellularmonitor_selectassettracker.png - :alt: Cellular Monitor - Select Asset Tracker V2 + :alt: Cellular Monitor app - Select Asset Tracker V2 - Cellular Monitor - Select Asset Tracker V2 + Cellular Monitor app - Select Asset Tracker V2 The **Program Modem Firmware (Optional)** window appears. @@ -138,9 +139,9 @@ To update the firmware on the Thingy:91, complete the following steps: The **Program Mode Firmware (Optional)** window expands to display additional information. .. figure:: images/cellularmonitor_enablemcuboot.png - :alt: Cellular Monitor - Enable MCUboot + :alt: Cellular Monitor app - Enable MCUboot - Cellular Monitor - Enable MCUboot + Cellular Monitor app - Enable MCUboot #. Switch off the Thingy:91. #. Press **SW3** while switching **SW1** to the **ON** position to enable MCUboot mode. @@ -179,9 +180,9 @@ To update the firmware on the Thingy:91, complete the following steps: #. Copy the ICCID by clicking on the **ICCID** label or the displayed ICCID number in the **Sim** section. .. figure:: images/cellularmonitor_iccid.png - :alt: Cellular Monitor - ICCID + :alt: Cellular Monitor app - ICCID - Cellular Monitor - ICCID + Cellular Monitor app - ICCID .. note:: The ICCID copied here has 20 digits. diff --git a/doc/nrf/images/ps_nrf54l_connections.png b/doc/nrf/images/ps_nrf54l_connections.png deleted file mode 100644 index 96241ca17008..000000000000 Binary files a/doc/nrf/images/ps_nrf54l_connections.png and /dev/null differ diff --git a/doc/nrf/images/ps_nrf54l_connections.webp b/doc/nrf/images/ps_nrf54l_connections.webp new file mode 100644 index 000000000000..cb6787a309cb Binary files /dev/null and b/doc/nrf/images/ps_nrf54l_connections.webp differ diff --git a/doc/nrf/images/suit_smp_firmware_upload_complete.png b/doc/nrf/images/suit_smp_firmware_upload_complete.png index 9257fbe7f973..b233912dc684 100644 Binary files a/doc/nrf/images/suit_smp_firmware_upload_complete.png and b/doc/nrf/images/suit_smp_firmware_upload_complete.png differ diff --git a/doc/nrf/images/suit_smp_firmware_upload_confirm.png b/doc/nrf/images/suit_smp_firmware_upload_confirm.png new file mode 100644 index 000000000000..ad2fc6d3a2a9 Binary files /dev/null and b/doc/nrf/images/suit_smp_firmware_upload_confirm.png differ diff --git a/doc/nrf/images/suit_smp_firmware_uploading.png b/doc/nrf/images/suit_smp_firmware_uploading.png index fa5bd1d220e4..e529bc61cdac 100644 Binary files a/doc/nrf/images/suit_smp_firmware_uploading.png and b/doc/nrf/images/suit_smp_firmware_uploading.png differ diff --git a/doc/nrf/images/suit_smp_select_advanced.png b/doc/nrf/images/suit_smp_select_advanced.png index 022b5298dc37..19b6490f8bfe 100644 Binary files a/doc/nrf/images/suit_smp_select_advanced.png and b/doc/nrf/images/suit_smp_select_advanced.png differ diff --git a/doc/nrf/images/suit_smp_select_firmware_select_file.png b/doc/nrf/images/suit_smp_select_firmware_select_file.png index 6d437462ee0c..eeb34640ad70 100644 Binary files a/doc/nrf/images/suit_smp_select_firmware_select_file.png and b/doc/nrf/images/suit_smp_select_firmware_select_file.png differ diff --git a/doc/nrf/images/suit_smp_select_image_read.png b/doc/nrf/images/suit_smp_select_image_read.png index 3529ad3277f6..4485f021effb 100644 Binary files a/doc/nrf/images/suit_smp_select_image_read.png and b/doc/nrf/images/suit_smp_select_image_read.png differ diff --git a/doc/nrf/images/suit_smp_show_manifest_01.png b/doc/nrf/images/suit_smp_show_manifest_01.png new file mode 100644 index 000000000000..c36de4c195c2 Binary files /dev/null and b/doc/nrf/images/suit_smp_show_manifest_01.png differ diff --git a/doc/nrf/images/suit_smp_show_manifest_02.png b/doc/nrf/images/suit_smp_show_manifest_02.png new file mode 100644 index 000000000000..9d320f90b3b5 Binary files /dev/null and b/doc/nrf/images/suit_smp_show_manifest_02.png differ diff --git a/doc/nrf/includes/Thingy91_91x_features.txt b/doc/nrf/includes/Thingy91_91x_features.txt new file mode 100644 index 000000000000..0bfa30790f1f --- /dev/null +++ b/doc/nrf/includes/Thingy91_91x_features.txt @@ -0,0 +1,27 @@ +The following sections describe the various features of |thingy| apart from the ones on the :ref:`ug_nrf91_features` page. + +Operating modes +*************** + +|thingy| contains RGB indicator LEDs, which indicate the operating state of the device as described in the :ref:`LED indication ` section of the :ref:`asset_tracker_v2_ui_module`. + +GNSS +**** + +|thingy| has a GNSS receiver, which, if activated, allows the device to be located globally using GNSS signals. +In the :ref:`asset_tracker_v2` application, GNSS is activated by default. + +LTE Band Lock +************* + +For |thingy|, you can configure the modem to use specific LTE bands by using the band lock AT command. +See :ref:`nrf9160_ug_band_lock` and the |band_lock| for additional information. +The preprogrammed firmware configures the modem to use the bands currently certified on the |thingy| hardware. +When building the firmware, you can configure which bands must be enabled. + +LTE-M / NB-IoT switching +************************ + +|thingy| has a multimode modem that enables it to support automatic switching between LTE-M and NB-IoT. +A built-in parameter in the |thingy| firmware determines whether the modem first attempts to connect in LTE-M or NB-IoT mode. +If the modem fails to connect using this preferred mode within the default timeout period (10 minutes), it switches to the other mode. diff --git a/doc/nrf/includes/application_build_and_run_ns.txt b/doc/nrf/includes/application_build_and_run_ns.txt index d2717d041bc9..94484c9b3cd8 100644 --- a/doc/nrf/includes/application_build_and_run_ns.txt +++ b/doc/nrf/includes/application_build_and_run_ns.txt @@ -1,6 +1,7 @@ This application can be found under |application path| in the |NCS| folder structure. -When built as a firmware image for a board target with the ``*/ns`` :ref:`variant `, the application has :term:`Cortex-M Security Extensions (CMSE)` enabled and separates the firmware between the :term:`Non-Secure Processing Environment (NSPE)` and the :term:`Secure Processing Environment (SPE)`. +You can build this application as firmware image for a board target with the ``*/ns`` :ref:`variant ` (see the Requirements section above). +In such cases, the sample has Cortex-M Security Extensions (CMSE) enabled and separates the firmware between Non-Secure Processing Environment (NSPE) and Secure Processing Environment (SPE). Because of this, it automatically includes the :ref:`Trusted Firmware-M (TF-M) `. To read more about CMSE, see :ref:`app_boards_spe_nspe`. diff --git a/doc/nrf/includes/build_and_run_ns.txt b/doc/nrf/includes/build_and_run_ns.txt index 21ddbed96497..b123b861c504 100644 --- a/doc/nrf/includes/build_and_run_ns.txt +++ b/doc/nrf/includes/build_and_run_ns.txt @@ -1,6 +1,7 @@ This sample can be found under |sample path| in the |NCS| folder structure. -When built as firmware image for a board target with the ``*/ns`` :ref:`variant `, the sample has Cortex-M Security Extensions (CMSE) enabled and separates the firmware between Non-Secure Processing Environment (NSPE) and Secure Processing Environment (SPE). +You can build this sample as firmware image for a board target with the ``*/ns`` :ref:`variant ` (see the Requirements section above). +In such cases, the sample has Cortex-M Security Extensions (CMSE) enabled and separates the firmware between Non-Secure Processing Environment (NSPE) and Secure Processing Environment (SPE). Because of this, it automatically includes the :ref:`Trusted Firmware-M (TF-M) `. To read more about CMSE, see :ref:`app_boards_spe_nspe`. diff --git a/doc/nrf/includes/cert-flashing.txt b/doc/nrf/includes/cert-flashing.txt index 56f7d4f680e7..a1907cd3d041 100644 --- a/doc/nrf/includes/cert-flashing.txt +++ b/doc/nrf/includes/cert-flashing.txt @@ -3,7 +3,7 @@ To provision the certificates and the private key to the nRF91 Series modem, com 1. `Download nRF Connect for Desktop`_. #. Update the modem firmware on the onboard modem of the nRF91 Series device to the latest version by following the steps in :ref:`nrf9160_gs_updating_fw_modem`. #. Build and program the :ref:`at_client_sample` sample to the nRF91 Series device as explained in :ref:`building` and :ref:`programming`. -#. Launch the `Cellular Monitor`_ application, which is part of `nRF Connect for Desktop`_. +#. Launch the `Cellular Monitor app`_ in `nRF Connect for Desktop`_. #. Click :guilabel:`CERTIFICATE MANAGER` located at the upper right corner. #. Copy the server root certificate into the ``CA certificate`` entry. #. Copy and paste the device certificate and the private key into the respective entries (``Client certificate``, ``Private key``). diff --git a/doc/nrf/includes/sample_board_rows.txt b/doc/nrf/includes/sample_board_rows.txt index 5b0c3bc1a28e..3510cda84b57 100644 --- a/doc/nrf/includes/sample_board_rows.txt +++ b/doc/nrf/includes/sample_board_rows.txt @@ -94,15 +94,15 @@ .. thingy91x_nrf9151 -| :ref:`Thingy:91 X ` | PCA20065 | thingy91x | ``thingy91x/nrf9151`` | +| :ref:`Thingy:91 X ` | PCA20065 | thingy91x | ``thingy91x/nrf9151`` | .. thingy91x_nrf9151_ns -| :ref:`Thingy:91 X ` | PCA20065 | thingy91x | ``thingy91x/nrf9151/ns`` | +| :ref:`Thingy:91 X ` | PCA20065 | thingy91x | ``thingy91x/nrf9151/ns`` | .. thingy91x_nrf5340_cpuapp -| :ref:`Thingy:91 X ` | PCA20065 | thingy91x | ``thingy91x/nrf5340/cpuapp`` | +| :ref:`Thingy:91 X ` | PCA20065 | thingy91x | ``thingy91x/nrf5340/cpuapp`` | .. nrf52dk_nrf52810 @@ -222,13 +222,13 @@ | Native Simulator | | native_sim | ``native_sim`` | -.. nrf54l15pdk_nrf54l15_cpuapp +.. nrf54l15dk_nrf54l05_cpuapp -| :ref:`nRF54L15 PDK ` | PCA10156 | :ref:`nrf54l15pdk ` | ``nrf54l15pdk/nrf54l15/cpuapp`` | +| :ref:`nRF54L15 DK (emulating nRF54L05) ` | PCA10156 | :ref:`nrf54l15dk ` | ``nrf54l15dk/nrf54l05/cpuapp`` | -.. nrf54l15pdk@0.3.0_nrf54l15_cpuapp +.. nrf54l15dk_nrf54l10_cpuapp -| :ref:`nRF54L15 PDK ` | PCA10156 | :ref:`nrf54l15pdk ` | ``nrf54l15pdk@0.3.0/nrf54l15/cpuapp`` | +| :ref:`nRF54L15 DK (emulating nRF54L10) ` | PCA10156 | :ref:`nrf54l15dk ` | ``nrf54l15dk/nrf54l10/cpuapp`` | .. nrf54l15dk_nrf54l15_cpuapp @@ -237,3 +237,13 @@ .. nrf54l15dk_nrf54l15_cpuapp_ns | :ref:`nRF54L15 DK ` | PCA10156 | :ref:`nrf54l15dk ` | ``nrf54l15dk/nrf54l15/cpuapp/ns`` | + +.. nrf54l15dk_nrf54l15_cpuapp_and_cpuapp_ns + +| :ref:`nRF54L15 DK ` | PCA10156 | :ref:`nrf54l15dk ` | ``nrf54l15dk/nrf54l15/cpuapp`` | +| | | | | +| | | | ``nrf54l15dk/nrf54l15/cpuapp/ns`` | + +.. nrf54l15dk_nrf54l15_cpuflpr + +| :ref:`nRF54L15 DK ` | PCA10156 | :ref:`nrf54l15dk ` | ``nrf54l15dk/nrf54l15/cpuflpr`` | diff --git a/doc/nrf/includes/thingy91_prog_extdebugprobe.txt b/doc/nrf/includes/thingy91_prog_extdebugprobe.txt deleted file mode 100644 index 0d5f1fe9b89d..000000000000 --- a/doc/nrf/includes/thingy91_prog_extdebugprobe.txt +++ /dev/null @@ -1,9 +0,0 @@ -1. Set the Thingy:91 SWD selection switch (**SW2**) to **nRF91** or **nRF52** depending on whether you want to program the nRF9160 SiP or the nRF52840 SoC component. -#. Connect the Thingy:91 to the debug out port on a 10-pin external debug probe, for example, nRF9160 DK (Development Kit), using a 10-pin JTAG cable. - - .. note:: - - If you are using nRF9160 DK as the debug probe, make sure that **VDD_IO (SW11)** is set to 1.8 V on the nRF9160 DK. - -#. Connect the external debug probe to the PC using a USB cable. -#. Make sure that the Thingy:91 and the external debug probe are powered on. diff --git a/doc/nrf/includes/wifi_credentials_shell.txt b/doc/nrf/includes/wifi_credentials_shell.txt index 26f4b4e1c6a9..62b30e2edcd7 100644 --- a/doc/nrf/includes/wifi_credentials_shell.txt +++ b/doc/nrf/includes/wifi_credentials_shell.txt @@ -9,9 +9,24 @@ Once you have flashed your device with this sample, connect to your device's UAR .. parsed-literal:: :class: highlight - wifi_cred add *NetworkSSID* *SecurityMode (OPEN, WPA2-PSK, WPA2-PSK-SHA256, WPA3-SAE)* *NetworkPassword* + wifi_cred add -s *NetworkSSID* -k *SecurityMode* -p *NetworkPassword* Where *NetworkSSID* is replaced with the SSID of the Wi-Fi access point you want your device to connect to, and *NetworkPassword* is its password. +*SecurityMode* is replaced by the number as listed here: + +* 0: None +* 1: WPA2-PSK +* 2: WPA2-PSK-256 +* 3: SAE-HNP +* 4: SAE-H2E +* 5: SAE-AUTO +* 6: WAPI +* 7: EAP-TLS +* 8: WEP +* 9: WPA-PSK +* 10: WPA-Auto-Personal +* 11: DPP + If you are not sure which security mode to use, enable the :kconfig:option:`CONFIG_NET_L2_WIFI_SHELL` Kconfig option and use the ``wifi scan`` command to display a list of all accessible networks along with their corresponding security modes. Then either reboot the device or use the ``wifi_cred auto_connect`` command to manually trigger a connection attempt. diff --git a/doc/nrf/includes/zigbee_deprecation.txt b/doc/nrf/includes/zigbee_deprecation.txt new file mode 100644 index 000000000000..f3539c188c62 --- /dev/null +++ b/doc/nrf/includes/zigbee_deprecation.txt @@ -0,0 +1,4 @@ +.. note:: + Support for Zigbee R22 has been deprecated in |NCS| v2.8.0 and it will be removed in one of the future releases, following the :ref:`deprecation policy `. + As a result, the nRF52833, nRF52840, and nRF5340 SoCs are not recommended for new Zigbee designs. + Experimental support for Zigbee R23 is available for the nRF54L Series as an `nRF Connect SDK Add-on `_. diff --git a/doc/nrf/installation/install_ncs.rst b/doc/nrf/installation/install_ncs.rst index c5238fb4f1c6..88a9e9ec82dd 100644 --- a/doc/nrf/installation/install_ncs.rst +++ b/doc/nrf/installation/install_ncs.rst @@ -51,10 +51,13 @@ Depending on your preferred development environment, install the following requi Check :ref:`operating system versions that support this tool ` and download the installer from the `nRF Command Line Tools`_ page. * The |jlink_ver_vsc| of :ref:`SEGGER J-Link `. Download it from the `J-Link Software and Documentation Pack`_ page. + On Windows, `install it manually together with SEGGER USB Driver for J-Link `_. * The latest version of |VSC| for your operating system from the `Visual Studio Code download page`_. * In |VSC|, the latest version of the `nRF Connect for VS Code Extension Pack`_. - * Additionally for Linux users: the `nrf-udev`_ module with udev rules required to access USB ports on Nordic Semiconductor devices and program the firmware. + * Additionally, for Windows users: SEGGER USB Driver for J-Link, required for support of older Nordic Semiconductor devices in nRF Util. + For information on how to install the USB Driver, see the `nRF Util prerequisites`_ documentation. + * Additionally, for Linux users: the `nrf-udev`_ module with udev rules required to access USB ports on Nordic Semiconductor devices and program the firmware. .. group-tab:: Command line @@ -75,8 +78,11 @@ Depending on your preferred development environment, install the following requi * The |jlink_ver| of :ref:`SEGGER J-Link `. Download it from the `J-Link Software and Documentation Pack`_ page. + On Windows, `install it manually together with SEGGER USB Driver for J-Link `_. - * Additionally for Linux users: the `nrf-udev`_ module with udev rules required to access USB ports on Nordic Semiconductor devices and program the firmware. + * Additionally, for Windows users: SEGGER USB Driver for J-Link, required for support of older Nordic Semiconductor devices in nRF Util. + For information on how to install the USB Driver, see the `nRF Util prerequisites`_ documentation. + * Additionally, for Linux users: the `nrf-udev`_ module with udev rules required to access USB ports on Nordic Semiconductor devices and program the firmware. .. _gs_installing_toolchain: .. _gs_installing_tools: @@ -102,10 +108,15 @@ Depending on your preferred development environment, complete the following step #. In the extension's :guilabel:`Welcome View`, click on :guilabel:`Manage toolchains`. The list of actions appears in the |VSC|'s quick pick. #. Click :guilabel:`Install Toolchain`. - The list of available toolchain versions appears in the |VSC|'s quick pick. + The list of available stable toolchain versions appears in the |VSC|'s quick pick. #. Select the toolchain version to install. The toolchain version should match the |NCS| version you are going to work with. - If you have received a custom URL for installing the toolchain, you can provide it using the :guilabel:`Change Toolchain Index` button in the quick pick's header (wrench icon). + |install_latest_version| + + .. note:: + If you have received a custom URL for installing the toolchain, you can provide it using the :guilabel:`Change Toolchain Index` button in the quick pick's header (wrench icon). + If you are working with a development tag, disable the filter in the quick pick's header to list all available toolchains. + The toolchain installation starts in the background, as can be seen in the notification that appears. When you install the toolchain for the first time, the installed version is automatically selected for your project. @@ -137,13 +148,18 @@ Depending on your preferred development environment, complete the following step For example: - .. code-block:: console + .. parsed-literal:: + :class: highlight - nrfutil toolchain-manager install --ncs-version v2.0.0 + nrfutil toolchain-manager install --ncs-version |release| - This example command installs the toolchain required for the |NCS| v2.0.0. + This example command installs the toolchain required for the |NCS| |release|. + |install_latest_version| - The toolchain is installed by default at :file:`C:/ncs/toolchains` on Windows, :file:`~/ncs/toolchains` on Linux, and :file:`/opt/nordic/ncs/toolchains` on macOS. + The ``toolchain-manager`` command installs the toolchain by default at :file:`C:/ncs/toolchains` on Windows and at :file:`~/ncs/toolchains` on Linux. + These can be modified, as explained in the `Toolchain Manager command`_ documentation. + To check the current configuration setting, use the ``nrfutil toolchain-manager config --show`` command. + On macOS, :file:`/opt/nordic/ncs/toolchains` is used and no other location is allowed. If you have received a custom URL for installing the toolchain, you can use the following command to set it as default, replacing the respective parameter: @@ -159,8 +175,17 @@ Depending on your preferred development environment, complete the following step nrfutil toolchain-manager install --bundle-id *custom_bundle_ID* - To check the current configuration setting, use the ``nrfutil toolchain-manager config --show`` command. - To read more about these commands, use the ``nrfutil toolchain-manager --help`` command. + To read more about ``toolchain-manager`` commands, use the ``nrfutil toolchain-manager --help`` command. + +With the default location to install the toolchain (:file:`C:/ncs/toolchains` on Windows, :file:`~/ncs/toolchains/` on Linux, and the non-modifiable :file:`/opt/nordic/ncs/toolchains/` on macOS), your directory structure now looks similar to this: + +.. code-block:: none + + ncs + └─── toolchains + └─── + +In this simplified structure preview, ** corresponds to the version name you installed (most commonly, a SHA). You can check the versions of the required tools and Python dependencies on the :ref:`Requirements reference page `. @@ -207,7 +232,7 @@ For more information about the repository and development model, see the :ref:`d #. In the extension's :guilabel:`Welcome View`, click on :guilabel:`Manage SDKs`. The list of actions appears in the |VSC|'s quick pick. #. Click :guilabel:`Install SDK`. - The list of available SDK versions appears in the |VSC|'s quick pick. + The list of available stable SDK versions appears in the |VSC|'s quick pick. #. Select the SDK version to install. |install_latest_version| @@ -254,8 +279,11 @@ For more information about the repository and development model, see the :ref:`d .. parsed-literal:: :class: highlight - west init -m https\://github.com/nrfconnect/sdk-nrf --mr *nRFConnectSDK_revision* + west init -m https\://github.com/nrfconnect/sdk-nrf --mr *nRFConnectSDK_revision* *nRFConnectSDK_revision* + + In this command, the first *nRFConnectSDK_revision* identifies the revision of the |NCS| and the second *nRFConnectSDK_revision* is the name of the workspace directory that will be created by west. + The command creates the *nRFConnectSDK_revision* subdirectory and checks out the given revision of the |NCS| inside it. For example: * **Specific release:** To check out the |release| release, enter the following command: @@ -263,19 +291,19 @@ For more information about the repository and development model, see the :ref:`d .. parsed-literal:: :class: highlight - west init -m https\://github.com/nrfconnect/sdk-nrf --mr |release| + west init -m https\://github.com/nrfconnect/sdk-nrf --mr |release| |release| * **Development tag:** To check out the ``v1.9.2-dev1`` tag, enter the following command: .. code-block:: console - west init -m https://github.com/nrfconnect/sdk-nrf --mr v1.9.2-dev1 + west init -m https://github.com/nrfconnect/sdk-nrf --mr v1.9.2-dev1 v1.9.2-dev1 * **Branch**: To check out the ``main`` branch that includes the latest state of development, enter the following command: .. code-block:: console - west init -m https://github.com/nrfconnect/sdk-nrf --mr main + west init -m https://github.com/nrfconnect/sdk-nrf --mr main main This will clone the manifest repository `sdk-nrf`_ into :file:`nrf`. @@ -307,7 +335,7 @@ For more information about the repository and development model, see the :ref:`d .. -If you used the default locations (:file:`C:\ncs` on Windows, :file:`/ncs` on Linux and MacOS), your directory structure now looks similar to this: +With the default location to install the toolchain (see the previous step) and the default location to install the SDK (:file:`C:/ncs` on Windows, :file:`~/ncs/` on Linux, and :file:`/opt/nordic/ncs/` on macOS), your directory structure now looks similar to this: .. code-block:: none @@ -323,7 +351,7 @@ If you used the default locations (:file:`C:\ncs` on Windows, :file:`/ncs` ├─── zephyr └─── ... -In this simplified structure preview, ** corresponds to :file:`ncs/` and ** and ** correspond to the version names you installed. +In this simplified structure preview, ** corresponds to the toolchain version and ** corresponds to the SDK version name. There are also additional directories, and the structure might change over time, for example if you later :ref:`change the state of development to a different revision `. The full set of repositories and directories is defined in the :ref:`manifest file ` (`see the file in the repository `_). @@ -618,7 +646,7 @@ To install the |NCS| system-wide, complete the following steps: Installation with Toolchain Manager *********************************** -Toolchain Manager is a SDK and toolchain installer for the |NCS|. +Toolchain Manager is an SDK and toolchain installer for the |NCS|. It is available from `nRF Connect for Desktop`_, a cross-platform tool that provides different development applications for the |NCS| and Nordic Semiconductor products. Both Toolchain Manager and nRF Connect for Desktop are available for Windows, Linux, and macOS. diff --git a/doc/nrf/installation/recommended_versions.rst b/doc/nrf/installation/recommended_versions.rst index f8e192e492c0..4da8b61ec94a 100644 --- a/doc/nrf/installation/recommended_versions.rst +++ b/doc/nrf/installation/recommended_versions.rst @@ -49,7 +49,7 @@ Zephyr features only available on Linux * BlueZ integration * net-tools integration - * Native Port (native_posix) + * Native Port (native_sim) * BabbleSim .. _requirements_toolchain: @@ -287,6 +287,9 @@ Among others, this package includes the J-Link RTT Viewer, which can be used for It is recommended to use the |jlink_ver| of the package when you :ref:`installing_vsc`. +On Windows, you also need to install SEGGER USB Driver for J-Link, which is required for support of older Nordic Semiconductor devices in :ref:`requirements_nrf_util`. +For information on how to install the USB Driver, see the `nRF Util prerequisites`_ documentation. + .. _toolchain_management_tools: .. _additional_nordic_sw_tools: @@ -375,10 +378,13 @@ nRF Command Line Tools Among others, this package includes the nrfjprog executable and library, which the west command uses by default to program the development kits. For more information on nrfjprog, see `Programming SoCs with nrfjprog`_. +.. note:: + |nrf_CLT_deprecation_note| + It is recommended to use the latest version of the package when you :ref:`installing_vsc`. -|nRFVSC| -======== +nRF Connect for Visual Studio Code +================================== |vsc_extension_description| diff --git a/doc/nrf/installation/updating.rst b/doc/nrf/installation/updating.rst index cd03828bb60f..3d2119f4796a 100644 --- a/doc/nrf/installation/updating.rst +++ b/doc/nrf/installation/updating.rst @@ -67,6 +67,8 @@ Depending on your preferred development method, you can start the correct CLI to .. + See the documentation for nRF Util's `Toolchain Manager command`_ for the list of supported shells. + .. _gs_updating_repos: .. _gs_updating_repos_examples: .. _updating_repos_examples: @@ -154,8 +156,8 @@ After you updated the |NCS| repositories to the new version and you need to migr .. _vsc_update: -Updating |nRFVSC| -***************** +Updating the |nRFVSC| +********************* |VSC| checks for extension updates and automatically installs them when they are available. After an extension is updated, |VSC| prompts you to reload the application. diff --git a/doc/nrf/integrations.rst b/doc/nrf/integrations.rst index 30374245715c..ce081501d036 100644 --- a/doc/nrf/integrations.rst +++ b/doc/nrf/integrations.rst @@ -11,6 +11,10 @@ Integrations of the following third-party products are documented in their priva In the case of Find My, MFi licensees can get access to the repository by issuing a Nordic `DevZone`_ private ticket. +.. note:: + Integrations are available also through the `nRF Connect SDK Add-ons`_, a curated collection of supplementary |NCS| components. + For more information, including how to contribute your own add-on to the index, read :file:`README.md` and :file:`CONTRIBUTING.md` in the `ncs-app-index repository `_. + The following user guides describe available integrations: .. toctree:: diff --git a/doc/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.rst b/doc/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.rst index 255de3a20cdb..96566ee38bc7 100644 --- a/doc/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.rst +++ b/doc/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.rst @@ -18,6 +18,50 @@ For certification status of the released versions, see the following documents, * `nRF9161 Mobile network operator certifications`_ * `nRF9160 Mobile network operator certifications`_ +liblwm2m_carrier 3.6.0 +********************** + +Release for modem firmware versions 1.3.6, 1.3.7, 2.0.1, and 2.0.2. + +Size +==== + +See :ref:`lwm2m_lib_size` for an explanation of the library size in different scenarios. + ++-------------------------+---------------+------------+ +| | Flash (Bytes) | RAM (Bytes)| ++-------------------------+---------------+------------+ +| Library size | 79046 | 19712 | +| (binary) | | | ++-------------------------+---------------+------------+ +| Library size | 99516 | 34592 | +| (reference application) | | | ++-------------------------+---------------+------------+ + +Changes +======= + +* Removed the configuration ``disable_bootstrap_from_smartcard`` (and the corresponding Kconfig option ``CONFIG_LWM2M_CARRIER_BOOTSTRAP_SMARTCARD``). + + * Instead, the LwM2M carrier library will attempt to bootstrap from smartcard if the external :ref:`lib_uicc_lwm2m` library is included in the project (:kconfig:option:`CONFIG_UICC_LWM2M`). + +* Changed the CoAP response if an unsupported image is pushed during in-band FOTA. + + * Previous CoAP return value was ``5.00 Internal Server Error``, and is now ``4.00 Bad Request``. + +* Changed the timing of the lifetime update in order to better allow CoAP retransmissions. + + * Effectively, the updates will now trigger earlier, before the lifetime expiry. + * This can reduce the amount of overall signaling needed. + For example, in poor network conditions, the server could have de-registered the client prematurely, when the client was still retransmitting and attempting to update with the server. + +* The library no longer uses the system workqueue to schedule work. + This is because some of the issued work could block for some time, and this should be avoided on the system workqueue. + + * Removed ``lwm2m_os_timer_start()`` from the glue layer. + +* Extended the use of the modem library hooks (:c:macro:`NRF_MODEM_LIB_ON_CFUN`) to better handle changes in the modem functional states. + liblwm2m_carrier 3.5.1 ********************** diff --git a/doc/nrf/libraries/bin/lwm2m_carrier/app_integration.rst b/doc/nrf/libraries/bin/lwm2m_carrier/app_integration.rst index 3a744b10d271..ed82e52b6abf 100644 --- a/doc/nrf/libraries/bin/lwm2m_carrier/app_integration.rst +++ b/doc/nrf/libraries/bin/lwm2m_carrier/app_integration.rst @@ -31,10 +31,16 @@ It provides an abstraction of the following modules: .. lwm2m_osal_mod_list_start * :ref:`at_monitor_readme` - * :ref:`lib_download_client` + * :ref:`lib_downloader` * :ref:`sms_readme` * :ref:`pdn_readme` * :ref:`lib_dfu_target` + * :ref:`lib_uicc_lwm2m` + + The inclusion of the :ref:`lib_uicc_lwm2m` library is optional and is added using the :kconfig:option:`CONFIG_UICC_LWM2M` Kconfig option. + This module allows the LwM2M carrier library to use the bootstrap information stored on the SIM card. + If present, the configuration in the SIM will take precedence over any other configuration. + For example, if a bootstrap server URI is fetched from the SIM, the configuration set by the :kconfig:option:`CONFIG_LWM2M_CARRIER_CUSTOM_URI` Kconfig option is ignored. .. lwm2m_osal_mod_list_end @@ -68,12 +74,6 @@ General options Following are some of the general Kconfig options that you can configure: -* :kconfig:option:`CONFIG_LWM2M_CARRIER_BOOTSTRAP_SMARTCARD`: - - * This configuration allows the LwM2M carrier library to use the bootstrap information stored on the SIM card. - The configuration in the SIM will take precedence over any other configuration. - For example, if a bootstrap server URI is fetched from the SIM, the configuration set by the :kconfig:option:`CONFIG_LWM2M_CARRIER_CUSTOM_URI` Kconfig option is ignored. - * :kconfig:option:`CONFIG_LWM2M_CARRIER_SESSION_IDLE_TIMEOUT`: * This configuration specifies the session idle timeout (inactivity). @@ -408,8 +408,13 @@ Currently, the following types of firmware upgrades are supported: * MCUboot-style upgrades (:c:macro:`LWM2M_OS_DFU_IMG_TYPE_APPLICATION`) * Modem delta upgrades (:c:macro:`LWM2M_OS_DFU_IMG_TYPE_MODEM_DELTA`) +* Proprietary application upgrades over multiple files (:c:macro:`LWM2M_OS_DFU_IMG_TYPE_APPLICATION_FILE`) The type of upgrade is determined when the library calls the :c:func:`lwm2m_os_dfu_img_type` function in the abstraction layer upon receiving a new firmware image. If MCUboot-style upgrades are enabled, the LwM2M carrier library uses the function :c:func:`lwm2m_os_dfu_application_update_validate` to validate the application image update. A ``__weak`` implementation of the function is included, which checks if the currently running image is not yet confirmed as valid (which is the case after an upgrade) and marks it appropriately. + +The proprietary application upgrades over multiple files are currently only supported if the :kconfig:option:`CONFIG_LWM2M_CARRIER_SOFTBANK_DIVIDED_FOTA` Kconfig option is enabled. +This allows the library to perform the non-standard divided FOTA procedure in the SoftBank network. +The application update files required for this type of firmware upgrade can be generated during the building process by enabling the ``SB_CONFIG_LWM2M_CARRIER_DIVIDED_DFU`` sysbuild Kconfig option. diff --git a/doc/nrf/libraries/bin/lwm2m_carrier/msc.rst b/doc/nrf/libraries/bin/lwm2m_carrier/msc.rst index c8d5e1a1738e..35f7d57ba6fe 100644 --- a/doc/nrf/libraries/bin/lwm2m_carrier/msc.rst +++ b/doc/nrf/libraries/bin/lwm2m_carrier/msc.rst @@ -39,7 +39,7 @@ The following message sequence chart shows that FOTA fails at runtime if an inva FOTA CRC failure -The following message sequence chart shows the :c:func:`lwm2m_carrier_request()` API being used to deregister from the server: +The following message sequence chart shows the :c:func:`lwm2m_carrier_request` API being used to deregister from the server: .. _lwm2m_carrier_request: diff --git a/doc/nrf/libraries/bin/lwm2m_carrier/requirements.rst b/doc/nrf/libraries/bin/lwm2m_carrier/requirements.rst index b6e137e41bd1..2b3b37c172d6 100644 --- a/doc/nrf/libraries/bin/lwm2m_carrier/requirements.rst +++ b/doc/nrf/libraries/bin/lwm2m_carrier/requirements.rst @@ -35,14 +35,10 @@ Following are some of the requirements and limitations of the application while * The LwM2M carrier library uses the TLS socket for FOTA. + * The application can still use one DTLS session and one TLS session (or two DTLS sessions). * If the application is using the TLS socket, it must immediately close it when the :c:macro:`LWM2M_CARRIER_EVENT_FOTA_START` event is received. * The socket is released by the library again upon the next reboot, or in the event of a FOTA error. * If the application always needs a TLS socket, it can use `Mbed TLS`_. - -* When in the Verizon network, the LwM2M carrier library uses both the DTLS sessions made available through the modem. - Therefore, the application cannot run any DTLS or TLS sessions. - - * In other networks, the application can still use one DTLS session and one TLS session (or two DTLS sessions). * For more information, see the :c:macro:`LWM2M_CARRIER_EVENT_FOTA_START` event in :ref:`lwm2m_events`. * The LwM2M carrier library provisions the necessary security credentials to the security tags 25, 26, 27, 28. @@ -52,12 +48,48 @@ Following are some of the requirements and limitations of the application while * For example, setting :kconfig:option:`CONFIG_LWM2M_CARRIER_SERVER_SEC_TAG` to 42 uses the security tag range 43 to 46 instead of 25 to 28. * The CA certificates that are used for out-of-band FOTA must be provided by the application. - Out-of-band FOTA updates are done by the :ref:`lib_download_client`. + Out-of-band FOTA updates are done by the :ref:`lib_downloader`. Although the certificates are updated as part of the |NCS| releases, you must check the requirements from your carrier to know which certificates are applicable. * The LwM2M carrier library uses the following NVS record key range: ``0xCA00`` to ``0xCAFF``. This range must not be used by the application. +.. _lwm2m_carrier_dependent: + +Carrier-specific dependencies +***************************** + +In order for your device to comply with the carrier's specifications, the following additional requirements apply to your application to use the carrier's LwM2M device management: + +.. tabs:: + + .. group-tab:: Verizon + + * In the Verizon network, the :ref:`liblwm2m_carrier_readme` library uses both DTLS sessions made available through the modem. + Therefore, the application must expect to fail (or retry) if it attempts to establish a DTLS or TLS session. + The application should never use a DTLS session indefinitely, because this will block the LwM2M carrier library. + + .. group-tab:: SoftBank + + * The application must support application FOTA. + * The device must connect using a non-IP APN. + + The :ref:`serial_lte_modem` application and :ref:`lwm2m_carrier` sample feature an extra config file to enable the :kconfig:option:`CONFIG_LWM2M_CARRIER_SOFTBANK` dependencies. + + * The device must operate in the NB-IoT system mode. + + * If the :ref:`lte_lc_readme` library is used, you can enable the Kconfig option :kconfig:option:`CONFIG_LTE_NETWORK_MODE_NBIOT` to set the system mode. + + * If the :ref:`lte_lc_readme` library is not used, see the `system mode section in the nRF9160 AT Commands Reference Guide`_ or the `system mode section in the nRF91x1 AT Commands Reference Guide`_, depending on the SiP you are using for more information on setting the NB-IoT system mode. + + * If you are using the :ref:`serial_lte_modem` application, set the mode in the :file:`slm_auto_connect.h` file that is included with the :ref:`CONFIG_SLM_AUTO_CONNECT ` Kconfig option. + + .. group-tab:: LG U+ + + * The application must support application FOTA. + The :ref:`serial_lte_modem` application and :ref:`lwm2m_carrier` sample contain extra config files to enable the :kconfig:option:`CONFIG_LWM2M_CARRIER_LG_UPLUS` dependencies. + * The application must set the LG U+ configurations listed in the :c:struct:`lwm2m_carrier_lg_uplus_config_t` structure. + If you are unsure about which values to supply during certification, reach out to your carrier or your local Nordic Semiconductor sales representative. .. _lwm2m_lib_size: diff --git a/doc/nrf/libraries/bluetooth_services/adv_prov.rst b/doc/nrf/libraries/bluetooth/adv_prov.rst similarity index 98% rename from doc/nrf/libraries/bluetooth_services/adv_prov.rst rename to doc/nrf/libraries/bluetooth/adv_prov.rst index 742b7f330153..47b91b839837 100644 --- a/doc/nrf/libraries/bluetooth_services/adv_prov.rst +++ b/doc/nrf/libraries/bluetooth/adv_prov.rst @@ -8,7 +8,7 @@ Bluetooth LE advertising providers :depth: 2 The Bluetooth LE advertising providers library manages advertising data and scan response data. -It does not control Bluetooth LE advertising by itself. +It does not control Bluetooth® LE advertising by itself. Overview ******** diff --git a/doc/nrf/libraries/bluetooth_services/conn_ctx.rst b/doc/nrf/libraries/bluetooth/conn_ctx.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/conn_ctx.rst rename to doc/nrf/libraries/bluetooth/conn_ctx.rst diff --git a/doc/nrf/libraries/bluetooth_services/enocean.rst b/doc/nrf/libraries/bluetooth/enocean.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/enocean.rst rename to doc/nrf/libraries/bluetooth/enocean.rst diff --git a/doc/nrf/libraries/bluetooth_services/gatt_dm.rst b/doc/nrf/libraries/bluetooth/gatt_dm.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/gatt_dm.rst rename to doc/nrf/libraries/bluetooth/gatt_dm.rst diff --git a/doc/nrf/libraries/bluetooth_services/gatt_pool.rst b/doc/nrf/libraries/bluetooth/gatt_pool.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/gatt_pool.rst rename to doc/nrf/libraries/bluetooth/gatt_pool.rst diff --git a/doc/nrf/libraries/bluetooth_services/images/ConnEvtCb.svg b/doc/nrf/libraries/bluetooth/images/ConnEvtCb.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/images/ConnEvtCb.svg rename to doc/nrf/libraries/bluetooth/images/ConnEvtCb.svg diff --git a/doc/nrf/libraries/bluetooth_services/images/ConnEvtCbPeripheralLatency.svg b/doc/nrf/libraries/bluetooth/images/ConnEvtCbPeripheralLatency.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/images/ConnEvtCbPeripheralLatency.svg rename to doc/nrf/libraries/bluetooth/images/ConnEvtCbPeripheralLatency.svg diff --git a/doc/nrf/libraries/bluetooth_services/index.rst b/doc/nrf/libraries/bluetooth/index.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/index.rst rename to doc/nrf/libraries/bluetooth/index.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh.rst b/doc/nrf/libraries/bluetooth/mesh.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh.rst rename to doc/nrf/libraries/bluetooth/mesh.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/dk_prov.rst b/doc/nrf/libraries/bluetooth/mesh/dk_prov.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/dk_prov.rst rename to doc/nrf/libraries/bluetooth/mesh/dk_prov.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_battery.rst b/doc/nrf/libraries/bluetooth/mesh/gen_battery.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_battery.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_battery.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_battery_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_battery_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_battery_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_battery_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_battery_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_battery_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_battery_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_battery_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_dtt.rst b/doc/nrf/libraries/bluetooth/mesh/gen_dtt.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_dtt.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_dtt.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_dtt_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_dtt_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_dtt_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_dtt_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_dtt_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_dtt_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_dtt_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_dtt_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_loc.rst b/doc/nrf/libraries/bluetooth/mesh/gen_loc.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_loc.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_loc.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_loc_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_loc_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_loc_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_loc_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_loc_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_loc_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_loc_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_loc_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_lvl.rst b/doc/nrf/libraries/bluetooth/mesh/gen_lvl.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_lvl.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_lvl.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_lvl_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_lvl_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_lvl_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_lvl_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_lvl_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_lvl_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_lvl_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_lvl_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_onoff.rst b/doc/nrf/libraries/bluetooth/mesh/gen_onoff.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_onoff.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_onoff.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_onoff_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_onoff_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_onoff_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_onoff_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_onoff_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_onoff_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_onoff_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_onoff_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_plvl.rst b/doc/nrf/libraries/bluetooth/mesh/gen_plvl.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_plvl.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_plvl.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_plvl_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_plvl_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_plvl_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_plvl_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_plvl_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_plvl_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_plvl_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_plvl_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_ponoff.rst b/doc/nrf/libraries/bluetooth/mesh/gen_ponoff.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_ponoff.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_ponoff.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_ponoff_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_ponoff_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_ponoff_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_ponoff_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_ponoff_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_ponoff_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_ponoff_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_ponoff_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_prop.rst b/doc/nrf/libraries/bluetooth/mesh/gen_prop.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_prop.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_prop.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_prop_cli.rst b/doc/nrf/libraries/bluetooth/mesh/gen_prop_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_prop_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_prop_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/gen_prop_srv.rst b/doc/nrf/libraries/bluetooth/mesh/gen_prop_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/gen_prop_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/gen_prop_srv.rst diff --git a/doc/nrf/libraries/bluetooth/mesh/images/CIExy1931.png b/doc/nrf/libraries/bluetooth/mesh/images/CIExy1931.png new file mode 100644 index 000000000000..4e326d4f5e83 Binary files /dev/null and b/doc/nrf/libraries/bluetooth/mesh/images/CIExy1931.png differ diff --git a/doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_composition.svg b/doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_composition.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_composition.svg rename to doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_composition.svg diff --git a/doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_levels.svg b/doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_levels.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_levels.svg rename to doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_levels.svg diff --git a/doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_nodes.svg b/doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_nodes.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_nodes.svg rename to doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_nodes.svg diff --git a/doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_reg.svg b/doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_reg.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_reg.svg rename to doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_reg.svg diff --git a/doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_states.svg b/doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_states.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/images/bt_mesh_light_ctrl_states.svg rename to doc/nrf/libraries/bluetooth/mesh/images/bt_mesh_light_ctrl_states.svg diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctl.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctl.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctl.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctl.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctl_cli.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctl_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctl_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctl_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctl_srv.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctl_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctl_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctl_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctrl.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctrl.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctrl.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctrl.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_cli.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctrl_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctrl_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_reg.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctrl_reg.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_reg.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctrl_reg.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_reg_spec.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctrl_reg_spec.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_reg_spec.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctrl_reg_spec.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_srv.rst b/doc/nrf/libraries/bluetooth/mesh/light_ctrl_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_ctrl_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/light_ctrl_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_hsl.rst b/doc/nrf/libraries/bluetooth/mesh/light_hsl.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_hsl.rst rename to doc/nrf/libraries/bluetooth/mesh/light_hsl.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_hsl_cli.rst b/doc/nrf/libraries/bluetooth/mesh/light_hsl_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_hsl_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/light_hsl_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_hsl_srv.rst b/doc/nrf/libraries/bluetooth/mesh/light_hsl_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_hsl_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/light_hsl_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_hue_srv.rst b/doc/nrf/libraries/bluetooth/mesh/light_hue_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_hue_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/light_hue_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_sat_srv.rst b/doc/nrf/libraries/bluetooth/mesh/light_sat_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_sat_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/light_sat_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_temp_srv.rst b/doc/nrf/libraries/bluetooth/mesh/light_temp_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_temp_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/light_temp_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_xyl.rst b/doc/nrf/libraries/bluetooth/mesh/light_xyl.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_xyl.rst rename to doc/nrf/libraries/bluetooth/mesh/light_xyl.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_xyl_cli.rst b/doc/nrf/libraries/bluetooth/mesh/light_xyl_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_xyl_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/light_xyl_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/light_xyl_srv.rst b/doc/nrf/libraries/bluetooth/mesh/light_xyl_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/light_xyl_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/light_xyl_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/lightness.rst b/doc/nrf/libraries/bluetooth/mesh/lightness.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/lightness.rst rename to doc/nrf/libraries/bluetooth/mesh/lightness.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/lightness_cli.rst b/doc/nrf/libraries/bluetooth/mesh/lightness_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/lightness_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/lightness_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/lightness_srv.rst b/doc/nrf/libraries/bluetooth/mesh/lightness_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/lightness_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/lightness_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/model_types.rst b/doc/nrf/libraries/bluetooth/mesh/model_types.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/model_types.rst rename to doc/nrf/libraries/bluetooth/mesh/model_types.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/models.rst b/doc/nrf/libraries/bluetooth/mesh/models.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/models.rst rename to doc/nrf/libraries/bluetooth/mesh/models.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/properties.rst b/doc/nrf/libraries/bluetooth/mesh/properties.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/properties.rst rename to doc/nrf/libraries/bluetooth/mesh/properties.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/scene.rst b/doc/nrf/libraries/bluetooth/mesh/scene.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/scene.rst rename to doc/nrf/libraries/bluetooth/mesh/scene.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/scene_cli.rst b/doc/nrf/libraries/bluetooth/mesh/scene_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/scene_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/scene_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/scene_srv.rst b/doc/nrf/libraries/bluetooth/mesh/scene_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/scene_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/scene_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/scheduler.rst b/doc/nrf/libraries/bluetooth/mesh/scheduler.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/scheduler.rst rename to doc/nrf/libraries/bluetooth/mesh/scheduler.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/scheduler_cli.rst b/doc/nrf/libraries/bluetooth/mesh/scheduler_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/scheduler_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/scheduler_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/scheduler_srv.rst b/doc/nrf/libraries/bluetooth/mesh/scheduler_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/scheduler_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/scheduler_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/sensor.rst b/doc/nrf/libraries/bluetooth/mesh/sensor.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/sensor.rst rename to doc/nrf/libraries/bluetooth/mesh/sensor.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/sensor_cli.rst b/doc/nrf/libraries/bluetooth/mesh/sensor_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/sensor_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/sensor_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/sensor_models.rst b/doc/nrf/libraries/bluetooth/mesh/sensor_models.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/sensor_models.rst rename to doc/nrf/libraries/bluetooth/mesh/sensor_models.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/sensor_srv.rst b/doc/nrf/libraries/bluetooth/mesh/sensor_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/sensor_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/sensor_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/sensor_types.rst b/doc/nrf/libraries/bluetooth/mesh/sensor_types.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/sensor_types.rst rename to doc/nrf/libraries/bluetooth/mesh/sensor_types.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/time.rst b/doc/nrf/libraries/bluetooth/mesh/time.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/time.rst rename to doc/nrf/libraries/bluetooth/mesh/time.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/time_cli.rst b/doc/nrf/libraries/bluetooth/mesh/time_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/time_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/time_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/time_srv.rst b/doc/nrf/libraries/bluetooth/mesh/time_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/time_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/time_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/time_tai.rst b/doc/nrf/libraries/bluetooth/mesh/time_tai.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/time_tai.rst rename to doc/nrf/libraries/bluetooth/mesh/time_tai.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/vnd/dm.rst b/doc/nrf/libraries/bluetooth/mesh/vnd/dm.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/vnd/dm.rst rename to doc/nrf/libraries/bluetooth/mesh/vnd/dm.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/vnd/dm_cli.rst b/doc/nrf/libraries/bluetooth/mesh/vnd/dm_cli.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/vnd/dm_cli.rst rename to doc/nrf/libraries/bluetooth/mesh/vnd/dm_cli.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/vnd/dm_srv.rst b/doc/nrf/libraries/bluetooth/mesh/vnd/dm_srv.rst similarity index 97% rename from doc/nrf/libraries/bluetooth_services/mesh/vnd/dm_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/vnd/dm_srv.rst index 0a8d65efce51..c31591bfc550 100644 --- a/doc/nrf/libraries/bluetooth_services/mesh/vnd/dm_srv.rst +++ b/doc/nrf/libraries/bluetooth/mesh/vnd/dm_srv.rst @@ -18,7 +18,7 @@ The results can be queried by a :ref:`bt_mesh_dm_cli_readme`. .. note:: The current implementation is classified with :ref:`experimental ` software maturity. -.. figure:: ../../../../../nrf/libraries/bluetooth_services/mesh/vnd/images/bt_mesh_dm_models.svg +.. figure:: ../../../../../nrf/libraries/bluetooth/mesh/vnd/images/bt_mesh_dm_models.svg :alt: Sequence diagram for DM procedure Distance measurement procedure diff --git a/doc/nrf/libraries/bluetooth_services/mesh/vnd/images/bt_mesh_dm_models.svg b/doc/nrf/libraries/bluetooth/mesh/vnd/images/bt_mesh_dm_models.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/vnd/images/bt_mesh_dm_models.svg rename to doc/nrf/libraries/bluetooth/mesh/vnd/images/bt_mesh_dm_models.svg diff --git a/doc/nrf/libraries/bluetooth_services/mesh/vnd/images/bt_mesh_le_pair_resp.svg b/doc/nrf/libraries/bluetooth/mesh/vnd/images/bt_mesh_le_pair_resp.svg similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/vnd/images/bt_mesh_le_pair_resp.svg rename to doc/nrf/libraries/bluetooth/mesh/vnd/images/bt_mesh_le_pair_resp.svg diff --git a/doc/nrf/libraries/bluetooth_services/mesh/vnd/le_pair_resp.rst b/doc/nrf/libraries/bluetooth/mesh/vnd/le_pair_resp.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/vnd/le_pair_resp.rst rename to doc/nrf/libraries/bluetooth/mesh/vnd/le_pair_resp.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/vnd/silvair_enocean_srv.rst b/doc/nrf/libraries/bluetooth/mesh/vnd/silvair_enocean_srv.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/mesh/vnd/silvair_enocean_srv.rst rename to doc/nrf/libraries/bluetooth/mesh/vnd/silvair_enocean_srv.rst diff --git a/doc/nrf/libraries/bluetooth_services/radio_notification_conn_cb.rst b/doc/nrf/libraries/bluetooth/radio_notification_conn_cb.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/radio_notification_conn_cb.rst rename to doc/nrf/libraries/bluetooth/radio_notification_conn_cb.rst diff --git a/doc/nrf/libraries/bluetooth_services/rpc.rst b/doc/nrf/libraries/bluetooth/rpc.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/rpc.rst rename to doc/nrf/libraries/bluetooth/rpc.rst diff --git a/doc/nrf/libraries/bluetooth_services/scan.rst b/doc/nrf/libraries/bluetooth/scan.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/scan.rst rename to doc/nrf/libraries/bluetooth/scan.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/ams_client.rst b/doc/nrf/libraries/bluetooth/services/ams_client.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/ams_client.rst rename to doc/nrf/libraries/bluetooth/services/ams_client.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/ancs_client.rst b/doc/nrf/libraries/bluetooth/services/ancs_client.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/ancs_client.rst rename to doc/nrf/libraries/bluetooth/services/ancs_client.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/bas_client.rst b/doc/nrf/libraries/bluetooth/services/bas_client.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/bas_client.rst rename to doc/nrf/libraries/bluetooth/services/bas_client.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/bms.rst b/doc/nrf/libraries/bluetooth/services/bms.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/bms.rst rename to doc/nrf/libraries/bluetooth/services/bms.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/cgms.rst b/doc/nrf/libraries/bluetooth/services/cgms.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/cgms.rst rename to doc/nrf/libraries/bluetooth/services/cgms.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/cts_client.rst b/doc/nrf/libraries/bluetooth/services/cts_client.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/cts_client.rst rename to doc/nrf/libraries/bluetooth/services/cts_client.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/ddfs.rst b/doc/nrf/libraries/bluetooth/services/ddfs.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/ddfs.rst rename to doc/nrf/libraries/bluetooth/services/ddfs.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/dfu_smp.rst b/doc/nrf/libraries/bluetooth/services/dfu_smp.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/dfu_smp.rst rename to doc/nrf/libraries/bluetooth/services/dfu_smp.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/fast_pair.rst b/doc/nrf/libraries/bluetooth/services/fast_pair.rst similarity index 92% rename from doc/nrf/libraries/bluetooth_services/services/fast_pair.rst rename to doc/nrf/libraries/bluetooth/services/fast_pair.rst index a7a94a134c23..3ca2d5ad4430 100644 --- a/doc/nrf/libraries/bluetooth_services/services/fast_pair.rst +++ b/doc/nrf/libraries/bluetooth/services/fast_pair.rst @@ -47,6 +47,8 @@ With the :kconfig:option:`CONFIG_BT_FAST_PAIR` Kconfig option enabled, the follo * :kconfig:option:`CONFIG_BT_FAST_PAIR_STORAGE_ACCOUNT_KEY_MAX` - The option configures maximum number of stored Account Keys. * :kconfig:option:`CONFIG_BT_FAST_PAIR_CRYPTO_TINYCRYPT`, :kconfig:option:`CONFIG_BT_FAST_PAIR_CRYPTO_OBERON`, and :kconfig:option:`CONFIG_BT_FAST_PAIR_CRYPTO_PSA` - These options are used to select the cryptographic backend for Fast Pair. The Oberon backend is used by default. +* :kconfig:option:`CONFIG_BT_FAST_PAIR_BOND_MANAGER` - The option enables the Fast Pair bond management functionality. + See :ref:`ug_bt_fast_pair_gatt_service_bond_management` for more details. * :kconfig:option:`CONFIG_BT_FAST_PAIR_PN` - The option enables the `Fast Pair Personalized Name extension`_. * :kconfig:option:`CONFIG_BT_FAST_PAIR_STORAGE_PN_LEN_MAX` - The option specifies the maximum length of a stored Fast Pair Personalized Name. @@ -60,6 +62,7 @@ With the :kconfig:option:`CONFIG_BT_FAST_PAIR` Kconfig option enabled, the follo * :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_MODEL_NAME` - The option configures the model name parameter. * :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_ACCESSORY_CATEGORY` - The option configures the accessory category parameter. * :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_FIRMWARE_VERSION_MAJOR`, :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_FIRMWARE_VERSION_MINOR` and :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_FIRMWARE_VERSION_REVISION` - These options configure the firmware version parameter. + * :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_MOTION_DETECTOR` - The option enables the DULT motion detector functionality support in the FMDN extension (see :ref:`ug_bt_fast_pair_gatt_service_fmdn_dult_motion_detector`). * There are following advertising configuration options for the FMDN extension (see :ref:`ug_bt_fast_pair_advertising_fmdn`): @@ -88,6 +91,8 @@ With the :kconfig:option:`CONFIG_BT_FAST_PAIR` Kconfig option enabled, the follo * :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_RING_VOLUME` - The option enables ringing volume support. * :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_RING_REQ_TIMEOUT_DULT_BT_GATT` - The option configures the ringing timeout for connected peers that use DULT-based ringing mechanism. This option can only be used when the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT` is enabled. + * :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_RING_REQ_TIMEOUT_DULT_MOTION_DETECTOR` - The option configures the ringing timeout for ringing requests from the DULT motion detector. + This option can only be used when the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT` is enabled. * There are following beacon clock service configuration options for the FMDN extension (see :ref:`ug_bt_fast_pair_prerequisite_ops_fmdn_clock_svc`): @@ -162,7 +167,7 @@ Partition Manager ----------------- The Fast Pair provisioning data is preprogrammed to a dedicated flash memory partition. -The GFPS selects the :kconfig:option:`CONFIG_PM_SINGLE_IMAGE` Kconfig option to enable the :ref:`partition_manager`. +The :ref:`zephyr:nrf54h20dk_nrf54h20` is the only device that does not support this feature. Settings -------- @@ -191,6 +196,10 @@ The FMDN extension implementation also acts as middleware between the user appli The DULT module integration is required for small and not easily discoverable accessories. The :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT` is enabled by default. +The :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_MOTION_DETECTOR` of the FMDN extension selects the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR` Kconfig option to enable the motion detector feature of the DULT module. +With this option enabled, the FMDN extension passes the DULT motion detector callbacks from the DULT module to application. +To learn more about the DULT motion detector, see :ref:`ug_dult_motion_detector`. + The :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_BATTERY_DULT` of the FMDN extension selects the :kconfig:option:`CONFIG_DULT_BATTERY` Kconfig option to enable the battery support in the DULT module. With this option enabled, the FMDN extension passes the battery information also to the DULT module. diff --git a/doc/nrf/libraries/bluetooth_services/services/gattp.rst b/doc/nrf/libraries/bluetooth/services/gattp.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/gattp.rst rename to doc/nrf/libraries/bluetooth/services/gattp.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/hids.rst b/doc/nrf/libraries/bluetooth/services/hids.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/hids.rst rename to doc/nrf/libraries/bluetooth/services/hids.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/hogp.rst b/doc/nrf/libraries/bluetooth/services/hogp.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/hogp.rst rename to doc/nrf/libraries/bluetooth/services/hogp.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/hrs_client.rst b/doc/nrf/libraries/bluetooth/services/hrs_client.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/hrs_client.rst rename to doc/nrf/libraries/bluetooth/services/hrs_client.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/latency.rst b/doc/nrf/libraries/bluetooth/services/latency.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/latency.rst rename to doc/nrf/libraries/bluetooth/services/latency.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/latency_client.rst b/doc/nrf/libraries/bluetooth/services/latency_client.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/latency_client.rst rename to doc/nrf/libraries/bluetooth/services/latency_client.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/lbs.rst b/doc/nrf/libraries/bluetooth/services/lbs.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/lbs.rst rename to doc/nrf/libraries/bluetooth/services/lbs.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/mds.rst b/doc/nrf/libraries/bluetooth/services/mds.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/mds.rst rename to doc/nrf/libraries/bluetooth/services/mds.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/nsms.rst b/doc/nrf/libraries/bluetooth/services/nsms.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/nsms.rst rename to doc/nrf/libraries/bluetooth/services/nsms.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/nus.rst b/doc/nrf/libraries/bluetooth/services/nus.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/nus.rst rename to doc/nrf/libraries/bluetooth/services/nus.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/nus_client.rst b/doc/nrf/libraries/bluetooth/services/nus_client.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/nus_client.rst rename to doc/nrf/libraries/bluetooth/services/nus_client.rst diff --git a/doc/nrf/libraries/bluetooth/services/rreq.rst b/doc/nrf/libraries/bluetooth/services/rreq.rst new file mode 100644 index 000000000000..263ab37bec57 --- /dev/null +++ b/doc/nrf/libraries/bluetooth/services/rreq.rst @@ -0,0 +1,49 @@ +.. _rreq_readme: + +Ranging Requestor (RREQ) +######################## + +.. contents:: + :local: + :depth: 2 + +Overview +******** + +This library implements the Ranging Requestor for Channel Sounding with the corresponding set of characteristics defined in the `Ranging Service Specification`_ and the `Ranging Profile Specification`_. + +This library supports On Demand Ranging Data. + +Configuration +************* + +To enable this library, use the :kconfig:option:`CONFIG_BT_RAS` Kconfig option. + +Check and adjust the following Kconfig options: + +* :kconfig:option:`CONFIG_BT_RAS_MAX_ANTENNA_PATHS` - Sets the maximum number of antenna paths supported by the device. + +* :kconfig:option:`CONFIG_BT_RAS_MODE_3_SUPPORTED` - Sets support for storing Mode 3 Channel Sounding steps. + +* :kconfig:option:`CONFIG_BT_RAS_RREQ` - Enables RREQ Kconfig options. + +* :kconfig:option:`CONFIG_BT_RAS_RREQ_MAX_ACTIVE_CONN` - Sets the number of simultaneously supported RREQ instances. + +* :kconfig:option:`CONFIG_HEAP_MEM_POOL_ADD_SIZE_RAS_RREQ_GATT_DM` - Sets the heap size for the GATT discovery manager module. + +* :kconfig:option:`CONFIG_BT_RAS_RREQ_LOG_LEVEL` - Sets the logging level of the RREQ library. + +Usage +***** + +You can set up the RREQ either as a Channel Sounding Initiator or Reflector. + +| See the sample: :file:`samples/bluetooth/channel_sounding_ras_initiator` + +API documentation +***************** + +| Header file: :file:`include/bluetooth/services/ras.h` +| Source files: :file:`subsys/bluetooth/services/ras` + +.. doxygengroup:: bt_ras diff --git a/doc/nrf/libraries/bluetooth/services/rrsp.rst b/doc/nrf/libraries/bluetooth/services/rrsp.rst new file mode 100644 index 000000000000..e4cc632d74f0 --- /dev/null +++ b/doc/nrf/libraries/bluetooth/services/rrsp.rst @@ -0,0 +1,57 @@ +.. _rrsp_readme: + +Ranging Responder (RRSP) +######################## + +.. contents:: + :local: + :depth: 2 + +Overview +******** + +This library implements the Ranging Responder for Channel Sounding with the corresponding set of characteristics defined in the `Ranging Service Specification`_ and the `Ranging Profile Specification`_. + +This library supports On Demand Ranging Data. + +Configuration +************* + +To enable this library, use the :kconfig:option:`CONFIG_BT_RAS` Kconfig option. + +Check and adjust the following Kconfig options: + +* :kconfig:option:`CONFIG_BT_RAS_MAX_ANTENNA_PATHS` - Sets the maximum number of antenna paths supported by the device. + This sets the antenna paths for each step that can be stored inside the Ranging Service. + This value must match the supported Channel Sounding capabilities of the device. + This affects the per-instance memory usage of the Ranging Service. + +* :kconfig:option:`CONFIG_BT_RAS_MODE_3_SUPPORTED` - Sets support for storing Mode 3 Channel Sounding steps. + This will allocate memory for the Ranging Service to store Mode 3 Channel Sounding steps. + This value must match the supported Channel Sounding capabilities of the device. + This affects the per-instance memory usage of the Ranging Service. + +* :kconfig:option:`CONFIG_BT_RAS_RRSP` - Enables RRSP Kconfig options. + +* :kconfig:option:`CONFIG_BT_RAS_RRSP_AUTO_ALLOC_INSTANCE` - Sets new connections to be allocated a RRSP instance automatically. + +* :kconfig:option:`CONFIG_BT_RAS_RRSP_MAX_ACTIVE_CONN` - Sets the number of simultaneously supported RRSP instances. + +* :kconfig:option:`CONFIG_BT_RAS_RRSP_RD_BUFFERS_PER_CONN` - Set the number of ranging data buffers per connection. + +* :kconfig:option:`CONFIG_BT_RAS_RRSP_LOG_LEVEL` - Sets the logging level of the RRSP library. + +Usage +***** + +You can set up the RRSP either as a Channel Sounding Initiator or Reflector. + +| See the sample: :file:`samples/bluetooth/channel_sounding_ras_reflector` + +API documentation +***************** + +| Header file: :file:`include/bluetooth/services/ras.h` +| Source files: :file:`subsys/bluetooth/services/ras` + +.. doxygengroup:: bt_ras diff --git a/doc/nrf/libraries/bluetooth_services/services/rscs.rst b/doc/nrf/libraries/bluetooth/services/rscs.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/rscs.rst rename to doc/nrf/libraries/bluetooth/services/rscs.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/throughput.rst b/doc/nrf/libraries/bluetooth/services/throughput.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/throughput.rst rename to doc/nrf/libraries/bluetooth/services/throughput.rst diff --git a/doc/nrf/libraries/bluetooth_services/services/wifi_prov.rst b/doc/nrf/libraries/bluetooth/services/wifi_prov.rst similarity index 100% rename from doc/nrf/libraries/bluetooth_services/services/wifi_prov.rst rename to doc/nrf/libraries/bluetooth/services/wifi_prov.rst diff --git a/doc/nrf/libraries/bluetooth_services/mesh/images/CIExy1931.png b/doc/nrf/libraries/bluetooth_services/mesh/images/CIExy1931.png deleted file mode 100644 index efe8d622fa38..000000000000 Binary files a/doc/nrf/libraries/bluetooth_services/mesh/images/CIExy1931.png and /dev/null differ diff --git a/doc/nrf/libraries/caf/ble_adv.rst b/doc/nrf/libraries/caf/ble_adv.rst index cc298b35527a..aa75583bb813 100644 --- a/doc/nrf/libraries/caf/ble_adv.rst +++ b/doc/nrf/libraries/caf/ble_adv.rst @@ -7,7 +7,7 @@ CAF: Bluetooth LE advertising module :local: :depth: 2 -When enabled for an application, the Bluetooth® LE advertising module is responsible for controlling the Bluetooth LE advertising for Bluetooth LE Peripheral device. +When enabled for an application, the Bluetooth LE advertising module is responsible for controlling the Bluetooth® LE advertising for Bluetooth LE Peripheral device. This module can only work together with the :ref:`CAF Bluetooth LE state module `. The Bluetooth LE state module is a core Bluetooth module in the :ref:`lib_caf` (CAF). @@ -92,12 +92,12 @@ During the grace period, Swift Pair data is removed from the advertising packet This is done to ensure that the user does not try to connect to the device that is no longer available. .. note:: - Make sure that :kconfig:option:`CONFIG_CAF_BLE_ADV_GRACE_PERIOD` Kconfig option is enabled if both following conditions are met: + Make sure that the :kconfig:option:`CONFIG_CAF_BLE_ADV_GRACE_PERIOD` Kconfig option is enabled if both following conditions are met: * Any of the providers requests the grace period. * :kconfig:option:`CONFIG_CAF_BLE_ADV_PM_EVENTS` is enabled. - The :kconfig:option:`CONFIG_CAF_BLE_ADV_GRACE_PERIOD` is enabled by default if the Swift Pair advertising data provider is enabled in the configuration. + The :kconfig:option:`CONFIG_CAF_BLE_ADV_GRACE_PERIOD` option is enabled by default if the Swift Pair advertising data provider is enabled in the configuration. Force power down on bonded peer power off ----------------------------------------- @@ -153,4 +153,4 @@ Grace period with synchronized updates of RPA and advertising data ================================================================== With both the :kconfig:option:`CONFIG_CAF_BLE_ADV_GRACE_PERIOD` and the :kconfig:option:`CONFIG_CAF_BLE_ADV_ROTATE_RPA` options enabled, if the RPA rotation occurs in the grace period, it terminates the grace period prematurely. -This limitation is caused by the Bluetooth API, which doesn't allow to delay the RPA rotation. +This limitation is caused by the Bluetooth API, which does not allow delay in the RPA rotation. diff --git a/doc/nrf/libraries/caf/ble_bond.rst b/doc/nrf/libraries/caf/ble_bond.rst index 5643bcb0a119..eb35bcf435a3 100644 --- a/doc/nrf/libraries/caf/ble_bond.rst +++ b/doc/nrf/libraries/caf/ble_bond.rst @@ -7,12 +7,15 @@ CAF: Bluetooth LE bond module :local: :depth: 2 -The Bluetooth® LE bond module of the :ref:`lib_caf` (CAF) allows to introduce Bluetooth LE bonding to the application. +The Bluetooth LE bond module of the :ref:`lib_caf` (CAF) allows to introduce Bluetooth® LE bonding to the application. The module also allows to delete bonds for the default Bluetooth local identity. Configuration ************* +To enable the |ble_bond|, use the :kconfig:option:`CONFIG_CAF_BLE_BOND` Kconfig option. +This option selects the :kconfig:option:`CONFIG_CAF_BLE_BOND_SUPPORTED` option to indicate that the |ble_bond| is implemented in the application. + Before using the module make sure that the following Kconfig options are enabled: * :kconfig:option:`CONFIG_BT_BONDABLE` @@ -23,9 +26,6 @@ Before using the module make sure that the following Kconfig options are enabled The device must be Bluetooth bondable and bonds must be stored in the non-volatile memory (settings). The :ref:`caf_settings_loader` is used to load content of the settings area during boot. -The |ble_bond| is enabled using :kconfig:option:`CONFIG_CAF_BLE_BOND`. -This Kconfig option selects :kconfig:option:`CONFIG_CAF_BLE_BOND_SUPPORTED` option to indicate that the |ble_bond| is implemented in the application. - Enabling bond erase =================== @@ -42,15 +42,16 @@ Complete the following steps to enable bond erase: * :kconfig:option:`CONFIG_CAF_BLE_BOND_PEER_ERASE_CLICK_LONG` - :c:enumerator:`CLICK_LONG`, * :kconfig:option:`CONFIG_CAF_BLE_BOND_PEER_ERASE_CLICK_DOUBLE` - :c:enumerator:`CLICK_DOUBLE`. -#. By default, detection of the specific click for a specific button always triggers the bond erase. - Set :kconfig:option:`CONFIG_CAF_BLE_BOND_PEER_ERASE_CLICK_TIMEOUT` to specify the waiting time for detecting the button click after boot. + By default, detection of the specific click for a specific button always triggers the bond erase. + +#. You can set the :kconfig:option:`CONFIG_CAF_BLE_BOND_PEER_ERASE_CLICK_TIMEOUT` Kconfig option to specify the waiting time for detecting the button click after boot. The timeout is specified in milliseconds. The button click is ignored if it occurs after the timeout. Implementation details ********************** -The |ble_bond| can be used as a default implementation of Bluetooth LE bond functionality for simple applications. +You can use the |ble_bond| as a default implementation of Bluetooth LE bond functionality for simple applications. The module does not broadcast information about performed Bluetooth LE peer operations using :c:struct:`ble_peer_operation_event`. The module assumes that only default Bluetooth local identity is used. diff --git a/doc/nrf/libraries/caf/ble_smp.rst b/doc/nrf/libraries/caf/ble_smp.rst index 258e8963d331..393178e69145 100644 --- a/doc/nrf/libraries/caf/ble_smp.rst +++ b/doc/nrf/libraries/caf/ble_smp.rst @@ -28,12 +28,11 @@ To use the module, you must enable the following Kconfig options: Enabling remote OS management ============================= -The |smp| supports registering OS management handlers automatically, which you can enable using the following Kconfig option: - -* :kconfig:option:`CONFIG_MCUMGR_GRP_OS` - This option enables MCUmgr OS management handlers. - Use these handlers to remotely trigger the device reboot after the image transfer is completed. - After the reboot, the device starts using the new firmware. - One of the applications that support the remote reboot functionality is `nRF Connect for Mobile`_. +The |smp| supports registering OS management handlers automatically. +You can enable this using the :kconfig:option:`CONFIG_MCUMGR_GRP_OS` Kconfig option. +Use these handlers to remotely trigger the device reboot after the image transfer is completed. +After the reboot, the device starts using the new firmware. +One of the applications that support the remote reboot functionality is `nRF Connect for Mobile`_. Implementation details ********************** @@ -44,7 +43,7 @@ The module registers itself as the final subscriber of the event to track the nu If a :c:struct:`ble_smp_transfer_event` was already submitted but not processed, the module desists from submitting a subsequent event. After the previously submitted event is processed, the module submits a subsequent event when the :c:func:`upload_confirm_cb` callback is called. -The application user must not perform more than one firmware upgrade at a time. +Do not perform more than one firmware upgrade at a time. The modification of the data by multiple application modules can result in a broken image that is going to be rejected by the bootloader. After building your application with the |smp| enabled, the :file:`dfu_application.zip` archive is generated in the build directory. diff --git a/doc/nrf/libraries/caf/ble_state.rst b/doc/nrf/libraries/caf/ble_state.rst index 6b8dcae69027..4ae57239b67e 100644 --- a/doc/nrf/libraries/caf/ble_state.rst +++ b/doc/nrf/libraries/caf/ble_state.rst @@ -7,7 +7,7 @@ CAF: Bluetooth LE state module :local: :depth: 2 -The Bluetooth® LE state module is a core Bluetooth module in :ref:`lib_caf` (CAF). +The Bluetooth LE state module is a core Bluetooth® module in :ref:`lib_caf` (CAF). When enabled for an application, the |ble_state| is responsible for the following actions: * Enabling Bluetooth (:c:func:`bt_enable`) @@ -36,6 +36,7 @@ The following Kconfig options are also available for this module: * :kconfig:option:`CONFIG_CAF_BLE_USE_LLPM` - This option enables the Low Latency Packet Mode (LLPM). If the Bluetooth controller is enabled as part of the application, this option is enabled by default and depends on :kconfig:option:`CONFIG_BT_CTLR_SDC_LLPM`. Otherwise, this option is disabled and can be enabled manually. + Before enabling the option manually, make sure that the used Bluetooth controller supports the LLPM. * :kconfig:option:`CONFIG_CAF_BLE_STATE_SECURITY_REQ` - This option enables setting the security level 2 for a Bluetooth LE connection automatically, right after the connection is established. The security level 2 or higher enables connection encryption. The device disconnects if establishing the connection security level 2 fails. @@ -81,4 +82,5 @@ After :c:struct:`ble_peer_event` about disconnection or connection failure is re Low Latency Packet Mode ======================= -If Nordic Semiconductor's SoftDevice Bluetooth LE Link Layer is selected (:kconfig:option:`CONFIG_BT_LL_SOFTDEVICE`) and the :kconfig:option:`CONFIG_CAF_BLE_USE_LLPM` option is enabled, the |ble_state| sends a Bluetooth HCI command to enable the LLPM when Bluetooth is ready. +If the :kconfig:option:`CONFIG_CAF_BLE_USE_LLPM` option is enabled, the |ble_state| sends a Bluetooth HCI command to enable the LLPM when Bluetooth is ready. +The LLPM is a proprietary Bluetooth extension from Nordic Semiconductor that requires using Nordic Semiconductor's SoftDevice Bluetooth LE Link Layer. diff --git a/doc/nrf/libraries/caf/ble_state_pm.rst b/doc/nrf/libraries/caf/ble_state_pm.rst index f06600a1dbf8..5800eedba526 100644 --- a/doc/nrf/libraries/caf/ble_state_pm.rst +++ b/doc/nrf/libraries/caf/ble_state_pm.rst @@ -7,19 +7,19 @@ CAF: Bluetooth state power manager module :local: :depth: 2 -The Bluetooth® state power manager module is a minor module that counts the number of active Bluetooth® connections and imposes a :ref:`power manager module ` power level restriction if there is at least one active connection. +The Bluetooth® state power manager module is a minor module that counts the number of active Bluetooth connections and imposes a :ref:`power manager module ` power level restriction if there is at least one active connection. Configuration ************* -The module is enabled by selecting :kconfig:option:`CONFIG_CAF_BLE_STATE_PM`. -It depends on :kconfig:option:`CONFIG_CAF_BLE_STATE` and :kconfig:option:`CONFIG_CAF_POWER_MANAGER`. +To enable the module, set the :kconfig:option:`CONFIG_CAF_BLE_STATE_PM` Kconfig option. +It depends on the :kconfig:option:`CONFIG_CAF_BLE_STATE` and :kconfig:option:`CONFIG_CAF_POWER_MANAGER` options. Implementation details ********************** The module reacts only to :c:struct:`ble_peer_event`. -Upon the reception of the event, the module checks if the Bluetooth® peer is connected or disconnected. +Upon the reception of the event, the module checks if the Bluetooth peer is connected or disconnected. It then counts the active connections. Depending on the count result: diff --git a/doc/nrf/libraries/caf/click_detector.rst b/doc/nrf/libraries/caf/click_detector.rst index a9de412c7a4c..9aafdf4e92d4 100644 --- a/doc/nrf/libraries/caf/click_detector.rst +++ b/doc/nrf/libraries/caf/click_detector.rst @@ -17,7 +17,7 @@ To use the module, you must enable the following Kconfig options: * :kconfig:option:`CONFIG_CAF_CLICK_DETECTOR` - This option enables the |click_detector|. * :kconfig:option:`CONFIG_CAF_BUTTON_EVENTS` - This option enables the ``button_event`` that is required for the |click_detector| to work. -In addition to :kconfig:option:`CONFIG_CAF_CLICK_DETECTOR`, the following Kconfig options are available for the module: +In addition, the following Kconfig options are available for the module: * :kconfig:option:`CONFIG_CAF_CLICK_DETECTOR_DEF_PATH` * :kconfig:option:`CONFIG_CAF_CLICK_DETECTOR_PM_EVENTS` @@ -27,7 +27,7 @@ Adding module configuration file In addition to setting the Kconfig options, you must also add a module configuration file that contains an array of :c:struct:`click_detector_config`. -To do so, complete the following steps: +Complete the following steps: 1. Add a file that defines the following information for every ``key_id`` that should be handled by the |click_detector| in an array of :c:struct:`click_detector_config`: @@ -80,6 +80,6 @@ The exact values of time intervals for click types are defined in the :file:`sub Power management states ======================= -If the option :kconfig:option:`CONFIG_CAF_CLICK_DETECTOR_PM_EVENTS` is enabled, the module can react to power management events. +If the :kconfig:option:`CONFIG_CAF_CLICK_DETECTOR_PM_EVENTS` Kconfig option is enabled, the module can react to power management events. The module stops tracing of key states when ``power_down_event`` is received. The module starts operating again when ``wake_up_event`` is received. diff --git a/doc/nrf/libraries/caf/leds.rst b/doc/nrf/libraries/caf/leds.rst index 2df53b6aaffd..818887d607e0 100644 --- a/doc/nrf/libraries/caf/leds.rst +++ b/doc/nrf/libraries/caf/leds.rst @@ -44,9 +44,8 @@ To use the module, you must fulfill the following requirements: #. Configure LEDs in DTS. See `Configuring LEDs in DTS`_ for details. -The following Kconfig options are also available for this module: - -* :kconfig:option:`CONFIG_CAF_LEDS_PM_EVENTS` - This option enables the reaction to `Power management events`_. +The :kconfig:option:`CONFIG_CAF_LEDS_PM_EVENTS` Kconfig option is also available for this module. +It enables the reaction to `Power management events`_. .. note:: The GPIO-based LED driver implementation supports only turning LED on or off. diff --git a/doc/nrf/libraries/caf/net_state.rst b/doc/nrf/libraries/caf/net_state.rst index 59920699feed..20f6335b1ccd 100644 --- a/doc/nrf/libraries/caf/net_state.rst +++ b/doc/nrf/libraries/caf/net_state.rst @@ -13,14 +13,14 @@ The module provides different backends for available networks (like LTE or OpenT Configuration ************* -You can enable |net_state| by selecting the :kconfig:option:`CONFIG_CAF_NET_STATE` option in the configuration. +To enable the |net_state|, set the :kconfig:option:`CONFIG_CAF_NET_STATE` Kconfig option in the configuration. The module selects the backend based on the link layer enabled. Log information about connection waiting ======================================== -The option :kconfig:option:`CONFIG_CAF_LOG_NET_STATE_WAITING` enables periodically logging message, while the module is waiting for network connection. -The period between logs may be configured by :kconfig:option:`CONFIG_CAF_LOG_NET_STATE_WAITING_PERIOD`. +The :kconfig:option:`CONFIG_CAF_LOG_NET_STATE_WAITING` Kconfig option enables periodic message logging, while the module is waiting for network connection. +To configure the period between logs, use the :kconfig:option:`CONFIG_CAF_LOG_NET_STATE_WAITING_PERIOD` option. Implementation details ********************** @@ -34,4 +34,4 @@ The following network states are available: * :c:enumerator:`NET_STATE_CONNECTED` - Network interface is connected. :c:enumerator:`NET_STATE_CONNECTED` means that IP packets can be transmitted. -For example, in case of a Thread network, this means not only that the connection to the mesh network is established, but also that the Border Router is working and it is possible to transfer data. +For example, in a Thread network, this means not only that the connection to the mesh network is established, but also that the Border Router is working and it is possible to transfer data. diff --git a/doc/nrf/libraries/caf/power_manager.rst b/doc/nrf/libraries/caf/power_manager.rst index c035eaf50f49..5dd31b80b933 100644 --- a/doc/nrf/libraries/caf/power_manager.rst +++ b/doc/nrf/libraries/caf/power_manager.rst @@ -13,22 +13,22 @@ The module achieves this reduction by switching to low power modes when the devi Configuration ************* -You can enable the |power_manager| by selecting the :kconfig:option:`CONFIG_CAF_POWER_MANAGER` option in the configuration. +To enable the |power_manager|, set the :kconfig:option:`CONFIG_CAF_POWER_MANAGER` Kconfig option in the configuration. This module uses Zephyr's :ref:`zephyr:pm_api` subsystem. Timeout configuration options ============================= -With the :kconfig:option:`CONFIG_CAF_POWER_MANAGER_TIMEOUT` configuration option, you can set the period of time after which the application enters the low power mode. +With the :kconfig:option:`CONFIG_CAF_POWER_MANAGER_TIMEOUT` Kconfig option, you can set the period of time after which the application enters the low power mode. By default, the timeout is set to 120 seconds. -The :kconfig:option:`CONFIG_CAF_POWER_MANAGER_ERROR_TIMEOUT` sets the period of time after which the device is turned off upon an internal error. +The :kconfig:option:`CONFIG_CAF_POWER_MANAGER_ERROR_TIMEOUT` option sets the period of time after which the device is turned off upon an internal error. Optional boolean for keeping the system on ========================================== -The :kconfig:option:`CONFIG_CAF_POWER_MANAGER_STAY_ON` lets the system stay on also when there are no active connections. +The :kconfig:option:`CONFIG_CAF_POWER_MANAGER_STAY_ON` Kconfig option lets the system stay on also when there are no active connections. For more information about configuration options, check the help in the configuration tool. @@ -37,7 +37,7 @@ Implementation details The |power_manager| is started when the "main" is ready (which is reported using :c:struct:`module_state_event`). -When started, it can do the following operations: +When started, it can perform the following operations: * Manage `Power states`_ * Trigger `Switching to low power`_ @@ -60,7 +60,7 @@ The |power_manager| takes control of the overall operating system power state. Power manager state handling in CAF -See the following section for more details about how the application state converts to the system power state. +See the following sections for more details about how the application state converts to the system power state. Idle ---- @@ -127,14 +127,14 @@ Some modules might not be ready to switch to the lower power state. In such case, the module that is not yet ready should consume the :c:struct:`power_down_event` and change its internal state, so that it enters the low power state when ready. After entering the low power state, each module must report this by sending a :c:struct:`module_state_event`. -The |power_manager| continues with the low power state change when it gets a notification that the module switched to the low power. +The |power_manager| continues with the low power state change when it gets a notification indicating that the module switched to the low power. Only after all modules confirmed that they have entered the low power state (by not consuming the :c:struct:`power_down_event`), the |power_manager| sets the required application's state. If a disconnection happens while the device is in the suspended state, the |power_manager| switches the application to the off state. However, the application can also be configured to keep the system in the suspended state when there are no active connections, instead of switching to the off state. -To select this behavior, use the :kconfig:option:`CONFIG_CAF_POWER_MANAGER_STAY_ON` configuration option. +To select this behavior, use the :kconfig:option:`CONFIG_CAF_POWER_MANAGER_STAY_ON` Kconfig option. Wake-up scenarios ================= @@ -157,7 +157,7 @@ This also restarts the power-down counter if the device is not connected through Wake-up from the off state -------------------------- -In the off state, the CPU is not running and the CPU reboot is required. +In the off state, the CPU is not running and a CPU reboot is required. Before the application enters the off state, at least one module must configure the peripheral under its control, so that it issues a hardware-related event capable of rebooting the CPU (that is, capable of leaving the CPU off mode). After the reboot, the application initializes itself again. diff --git a/doc/nrf/libraries/caf/sensor_data_aggregator.rst b/doc/nrf/libraries/caf/sensor_data_aggregator.rst index 3d721b655c2a..63646d984848 100644 --- a/doc/nrf/libraries/caf/sensor_data_aggregator.rst +++ b/doc/nrf/libraries/caf/sensor_data_aggregator.rst @@ -7,7 +7,7 @@ CAF: Sensor data aggregator module :local: :depth: 2 -The |sensor_data_aggregator| of the :ref:`lib_caf` (CAF) is a simple module responsible for aggregating sensor data in form of ``sensor_event`` and passing them further in packages. +The |sensor_data_aggregator| of the :ref:`lib_caf` (CAF) is responsible for aggregating sensor data in form of ``sensor_event`` and passing them further in packages. It can be used in both single-core and multi-core SoCs. When used with multi-core SoCs, the |sensor_data_aggregator| can reduce power consumption. @@ -16,7 +16,7 @@ One core gathers data from sensors and when there is sufficient data to analyze, Configuration ************* -To enable the |sensor_data_aggregator|,select the :kconfig:option:`CONFIG_CAF_SENSOR_DATA_AGGREGATOR` Kconfig option. +To enable the |sensor_data_aggregator|, set the :kconfig:option:`CONFIG_CAF_SENSOR_DATA_AGGREGATOR` Kconfig option. To use the module, you must complete the following steps: @@ -24,7 +24,7 @@ To use the module, you must complete the following steps: #. If you are using multi-core SoC and want to receive aggregated data on another core, on the second core enable the :kconfig:option:`CONFIG_CAF_SENSOR_DATA_AGGREGATOR_EVENTS` option. #. Enable aggregator in devicetree file that describes the aggregator parameters you can use, for example :file:`app.overlay` file. Each aggregator should be placed as a separate node. - For example, the file content could look like follows: + For example, the file content could look like this: .. code-block:: devicetree @@ -51,7 +51,7 @@ The aggregator is defined as a separate node in the devicetree and consists of t * ``sensor_descr`` - This parameter represents the description of the sensor and should be the same as the description in the :ref:`caf_sensor_manager`. * ``buf_data_length`` - This parameter represents the length of the buffer in bytes. Its default value is ``120``. - You should set the value as a multiple of sensor sample size times the size of :c:struct:`sensor_value` (``i*sample_size*sizeof(struct sensor_value)``). + Set the value as a multiple of sensor sample size times the size of :c:struct:`sensor_value` (``i*sample_size*sizeof(struct sensor_value)``). * ``sample_size`` - This parameter represents the sensor sample size and is expressed in ``sensor_value`` per sample. Its default value is ``1``. * ``buf_count`` - This parameter represents the number of buffers in the aggregator. @@ -68,12 +68,12 @@ Implementation details * :c:struct:`sensor_data_aggregator_release_buffer_event`. The |sensor_data_aggregator| gathers data from :c:struct:`sensor_event` and stores the data in an active :c:struct:`aggregator_buffer`. -When buffer is full, the |sensor_data_aggregator| sends the buffer to :c:struct:`sensor_data_aggregator_event` struct. +When the buffer is full, the |sensor_data_aggregator| sends the buffer to :c:struct:`sensor_data_aggregator_event` structure. Then module searches for the next free :c:struct:`aggregator_buffer` and sets it as an active buffer. After changing the sensor state and receiving :c:struct:`sensor_state_event`, the |sensor_data_aggregator| sends the data that is gathered in the active buffer. -After receiving :c:struct:`sensor_data_aggregator_release_buffer_event`, the |sensor_data_aggregator| sets :c:struct:`aggregator_buffer` to free state. +After receiving the :c:struct:`sensor_data_aggregator_release_buffer_event`, the |sensor_data_aggregator| sets the :c:struct:`aggregator_buffer` to free state. -Several buffers can be reduced to one, in case of a situation where the sampling period is greater than the time needed to send and process :c:struct:`sensor_data_aggregator_event`. -In the situation when sampling is much faster than the time needed to send and process :c:struct:`sensor_data_aggregator_event`, the number of buffers should be increased. +Several buffers can be reduced to one, when the sampling period is greater than the time needed to send and process :c:struct:`sensor_data_aggregator_event`. +When sampling is much faster than the time needed to send and process the :c:struct:`sensor_data_aggregator_event`, the number of buffers should be increased. diff --git a/doc/nrf/libraries/caf/sensor_manager.rst b/doc/nrf/libraries/caf/sensor_manager.rst index 78a109e55b5a..8c2cf6d3c292 100644 --- a/doc/nrf/libraries/caf/sensor_manager.rst +++ b/doc/nrf/libraries/caf/sensor_manager.rst @@ -28,7 +28,7 @@ The following Kconfig options are also available for the module: * :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_PM` * :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_ACTIVE_PM` -To use the module, you must complete the following requirements: +To use the module, complete the following requirements: 1. Physically connect the sensor. #. Add and enable the sensor in the devicetree file. @@ -56,7 +56,7 @@ To use the module, you must complete the following requirements: * :c:member:`sm_sensor_config.sampling_period_ms` - Sensor sampling period, in milliseconds. * :c:member:`sm_sensor_config.active_events_limit` - Maximum number of unprocessed :c:struct:`sensor_event`. - For example, the file content could look like follows: + For example, the file content could look like this: .. code-block:: c @@ -118,7 +118,7 @@ To use the sensor trigger, complete the following steps: * :c:member:`sm_trigger.activation.thresh` - Sensor trigger activation threshold. * :c:member:`sm_trigger.activation.timeout_ms` - Time after which the sensor is put to sleep. - For example, the extended configuration file for the LIS2DH accelerometer could look like follows: + For example, the extended configuration file for the LIS2DH accelerometer could look like this: .. code-block:: c @@ -177,7 +177,7 @@ To manually configure the passive power management functionality, complete the f 1. Enable :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_PM` Kconfig option. #. Extend the module configuration file of the sensor of your choice by adding :c:member:`sm_sensor_config.suspend` in an array of :c:struct:`sm_sensor_config`. - For example, the extended configuration file for the LIS2DH accelerometer could look like follows: + For example, the extended configuration file for the LIS2DH accelerometer could look like this: .. code-block:: c @@ -214,7 +214,7 @@ Implementation details ********************** The |sensor_manager| starts in reaction to :c:struct:`module_state_event`. -When started, it can do the following operations: +When started, it can perform the following operations: * Periodically sample the configured sensors. * Submit :c:struct:`sensor_event` when the sensor channels are sampled. @@ -222,19 +222,19 @@ When started, it can do the following operations: The |sensor_manager| samples sensors periodically, according to the configuration specified for each sensor. Sampling of the sensors is done from a dedicated preemptive thread. -You can change the thread priority by setting the :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_THREAD_PRIORITY` Kconfig option. +To change the thread priority, set the value of the :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_THREAD_PRIORITY` Kconfig option. Use the preemptive thread priority to make sure that the thread does not block other operations in the system. For each sensor, the |sensor_manager| limits the number of :c:struct:`sensor_event` events that it submits, but whose processing has not been completed. This is done to prevent out-of-memory error if the system workqueue is blocked. The limit value for the maximum number of unprocessed events for each sensor is placed in the :c:member:`sm_sensor_config.active_events_limit` structure field in the configuration file. The ``active_sensor_events_cnt`` counter is incremented when :c:struct:`sensor_event` is sent and decremented when the event is processed by the |sensor_manager| that is the final subscriber of the event. -A situation can occur that the ``active_sensor_events_cnt`` counter will already be decremented but the memory allocated by the event would not yet be freed. +A situation can occur that the ``active_sensor_events_cnt`` counter is already decremented but the memory allocated by the event would not yet be freed. Because of this behavior, the maximum number of allocated sensor events for the given sensor is equal to :c:member:`sm_sensor_config.active_events_limit` plus one. The dedicated thread uses its own thread stack. -You can change the size of the stack by setting the :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_THREAD_STACK_SIZE` Kconfig option. -The thread stack size must be big enough for the sensors used. +To change the size of the stack, set the value of the :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_THREAD_STACK_SIZE` Kconfig option. +The thread stack size must be large enough for the sensors used. Sensor state events =================== @@ -256,15 +256,15 @@ The following figure shows the possible state transitions. The |sensor_manager| submits :c:struct:`sensor_state_event` whenever the sensor state changes. Each sensor starts in the :c:enumerator:`SENSOR_STATE_DISABLED` state, which is not reported by the module. -Also, each sensor acts independently to others. +Also, each sensor acts independently. If one of the sensors reports an error, it does not stop the |sensor_manager| from sampling other sensors. After the initialization, each sensor changes its state to :c:enumerator:`SENSOR_STATE_ACTIVE` and start periodic sampling. -In case of an error sensor submits :c:struct:`sensor_state_event` with the :c:enumerator:`SENSOR_STATE_ERROR` state. +In case of an error, the sensor submits :c:struct:`sensor_state_event` with the :c:enumerator:`SENSOR_STATE_ERROR` state. -If the trigger functionality or :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_PM` is enabled the sensor can be put into the :c:enumerator:`SENSOR_STATE_SLEEP` state. +If the trigger functionality or :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_PM` is enabled, the sensor can be put into the :c:enumerator:`SENSOR_STATE_SLEEP` state. In this state, the sensor is not actively sampling and is not reporting any :c:struct:`sensor_event`. -If the sensor trigger fires or the :c:struct:`wake_up_event` comes, the sensor state changes to :c:enumerator:`SENSOR_STATE_ACTIVE` and periodic sampling is restarted. +If the sensor trigger fires or the :c:struct:`wake_up_event` is received, the sensor state changes to :c:enumerator:`SENSOR_STATE_ACTIVE` and periodic sampling is restarted. Sensor trigger activation ========================= @@ -272,14 +272,14 @@ Sensor trigger activation The sensor trigger is activated and the sensor is put to sleep if the values measured by the sensor do not deviate from the last sensor value by more than :c:member:`sm_trigger.activation.threshold` for the period of time specified in :c:member:`sm_trigger.activation.timeout_ms`. If the value measured by the sensor does not fit within the threshold, the last sensor value is updated and the sensor continues the sampling process. -The sensor trigger activation type is of the :c:enumerator:`ACT_TYPE_ABS` (Absolute deviation) type. +The sensor trigger activation type is :c:enumerator:`ACT_TYPE_ABS` (Absolute deviation). Passive power management ======================== If the :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_PM` Kconfig option is enabled, the sensors react to :c:struct:`power_down_event` and :c:struct:`wake_up_event`. -If a :c:struct:`power_down_event` comes when the sensor is in the :c:enumerator:`SENSOR_STATE_ACTIVE` state, the sensor state changes to :c:enumerator:`SENSOR_STATE_SLEEP` and sensor stops sampling. +If a :c:struct:`power_down_event` is received when the sensor is in the :c:enumerator:`SENSOR_STATE_ACTIVE` state, the sensor state changes to :c:enumerator:`SENSOR_STATE_SLEEP` and the sensor stops sampling. Depending on the trigger functionality configuration: @@ -289,7 +289,7 @@ Depending on the trigger functionality configuration: .. note:: |device_pm_note| -If a :c:struct:`wake_up_event` comes when the sensor is in the :c:enumerator:`SENSOR_STATE_SLEEP` state, the sensor switches to :c:enumerator:`SENSOR_STATE_ACTIVE` and starts actively sampling. +If a :c:struct:`wake_up_event` is received when the sensor is in the :c:enumerator:`SENSOR_STATE_SLEEP` state, the sensor switches to :c:enumerator:`SENSOR_STATE_ACTIVE` and starts active sampling. Depending on the trigger functionality configuration: @@ -299,16 +299,16 @@ Depending on the trigger functionality configuration: Active power management ======================= -If :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_ACTIVE_PM` is enabled, the sensor can submit :c:struct:`power_manager_restrict_event` and :c:struct:`wake_up_event`. +If the :kconfig:option:`CONFIG_CAF_SENSOR_MANAGER_ACTIVE_PM` Kconfig option is enabled, the sensor can submit :c:struct:`power_manager_restrict_event` and :c:struct:`wake_up_event`. -A :c:struct:`power_manager_restrict_event` restricts a power level to which the application can be put. +A :c:struct:`power_manager_restrict_event` restricts the power level to which the application can be put. It is submitted every time the allowed state changes. If there is any sensor that is in the :c:enumerator:`SENSOR_STATE_ACTIVE` state, the module power state is restricted to the :c:enumerator:`POWER_MANAGER_LEVEL_ALIVE` state. If all the sensors are in the :c:enumerator:`SENSOR_STATE_SLEEP` state and if at least one sensor has trigger activated, the power state is restricted to the :c:enumerator:`POWER_MANAGER_LEVEL_SUSPENDED` state. Having all the sensors sleeping and none of them with the trigger functionality enabled means that any power state is allowed. -If the sensor's trigger functionality is configured, each time the trigger is activated :c:struct:`wake_up_event` is created and sent to other modules. +If the sensor's trigger functionality is configured, each time the trigger is activated, a :c:struct:`wake_up_event` is created and sent to other modules. Sending :c:struct:`wake_up_event` to other modules results in waking up the whole system. @@ -317,7 +317,7 @@ Sending :c:struct:`wake_up_event` to other modules results in waking up the whol Changing sensor sample period ============================= -To change sensor sample period you have to send :c:struct:`set_sensor_period_event` with new period value in milliseconds. +To change the sensor sample period, you have to send :c:struct:`set_sensor_period_event` with new period value in milliseconds. To identify which sensor sampling period you want to change, set the sensor description in :c:struct:`set_sensor_period_event`. The following code shows an example of changing accelerometer sampling to 400 ms: diff --git a/doc/nrf/libraries/caf/settings_loader.rst b/doc/nrf/libraries/caf/settings_loader.rst index 126258b6bf23..cbb70a084386 100644 --- a/doc/nrf/libraries/caf/settings_loader.rst +++ b/doc/nrf/libraries/caf/settings_loader.rst @@ -7,7 +7,7 @@ CAF: Settings loader module :local: :depth: 2 -The |settings_loader| of the :ref:`lib_caf` (CAF) is a simple, stateless module responsible for calling the :c:func:`settings_load` function. +The |settings_loader| of the :ref:`lib_caf` (CAF) is a stateless module responsible for calling the :c:func:`settings_load` function. If any of the application modules relies on settings, this module ensures that the data stored in non-volatile memory is read after completing all necessary initialization. Configuration @@ -24,11 +24,11 @@ The following Kconfig options are also available for the module: * :kconfig:option:`CONFIG_CAF_SETTINGS_LOADER_USE_THREAD` * :kconfig:option:`CONFIG_CAF_SETTINGS_LOADER_THREAD_STACK_SIZE` -To use the module, you must complete the following steps: +To use the module, complete the following steps: 1. Enable the :kconfig:option:`CONFIG_CAF_SETTINGS_LOADER` and :kconfig:option:`CONFIG_SETTINGS` Kconfig options. #. Add the configuration file that implements the function :c:func:`get_req_modules`, which sets bits of modules that are required to be initialized before settings are loaded. - For example, the file content could look like follows: + For example, the file content could look like this: .. code-block:: c @@ -43,7 +43,7 @@ To use the module, you must complete the following steps: }; This function is called on the settings loader module initialization. -After each of modules that sets bit in :c:func:`get_req_modules` is initialized, the |settings_loader| calls :c:func:`settings_load` function and starts loading all the settings from non-volatile memory. +After each module that sets a bit in the :c:func:`get_req_modules` function is initialized, the |settings_loader| calls the :c:func:`settings_load` function and starts loading all settings from the non-volatile memory. File system as settings backend =============================== @@ -56,8 +56,8 @@ Implementation details Getting the required modules is wrapped into the :c:func:`get_req_modules` function due to implementation limitations. -Settings are loaded in the :ref:`app_event_manager` handler, which by default is invoked from a system workqueue context. +Settings are loaded in the :ref:`app_event_manager` handler that is invoked from a system workqueue context by default. This blocks the workqueue until the operation is finished. -You can set the :kconfig:option:`CONFIG_CAF_SETTINGS_LOADER_USE_THREAD` Kconfig option to load the settings in a separate thread in the background instead of using the system workqueue for that purpose. +Set the :kconfig:option:`CONFIG_CAF_SETTINGS_LOADER_USE_THREAD` Kconfig option to load the settings in a separate thread in the background instead of using the system workqueue for that purpose. This prevents blocking the system workqueue, but it requires creating an additional thread. The stack size for the background thread is defined in the :kconfig:option:`CONFIG_CAF_SETTINGS_LOADER_THREAD_STACK_SIZE` Kconfig option. diff --git a/doc/nrf/libraries/dfu/dfu_multi_image.rst b/doc/nrf/libraries/dfu/dfu_multi_image.rst index 90aa56751061..abb19253b746 100644 --- a/doc/nrf/libraries/dfu/dfu_multi_image.rst +++ b/doc/nrf/libraries/dfu/dfu_multi_image.rst @@ -26,19 +26,19 @@ To configure the maximum number of images that the DFU multi-image library is ab To enable building the DFU multi-image package that contains commonly used update images, such as the application core firmware, the network core firmware, or MCUboot images, set the ``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_BUILD`` Kconfig option. The following options control which images are included: -+-------------------------------------------------------------------+----------------------------------------+ -| Kconfig | Description | -+===================================================================+========================================+ -| ``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_APP`` | Include application update. | -+-------------------------------------------------------------------+----------------------------------------+ -| ``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_NET`` | Include network core image update. | -+-------------------------------------------------------------------+----------------------------------------+ -| ``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_MCUBOOT`` | Include MCUboot update. | -+-------------------------------------------------------------------+----------------------------------------+ -| ``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_WIFI_FW_PATCH`` | Include nRF700x Wi-Fi firmware patches.| -+-------------------------------------------------------------------+----------------------------------------+ -| ``SB_CONFIG_SUIT_MULTI_IMAGE_PACKAGE_BUILD`` | Include SUIT envelope and cache images.| -+-------------------------------------------------------------------+----------------------------------------+ ++----------------------------------------------------+-----------------------------------------+ +| Kconfig | Description | ++====================================================+=========================================+ +|``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_APP`` | Include application update. | ++----------------------------------------------------+-----------------------------------------+ +|``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_NET`` | Include network core image update. | ++----------------------------------------------------+-----------------------------------------+ +| ``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_MCUBOOT`` | Include MCUboot update. | ++----------------------------------------------------+-----------------------------------------+ +|``SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_WIFI_FW_PATCH`` | Include nRF700x Wi-Fi® firmware patches.| ++----------------------------------------------------+-----------------------------------------+ +|``SB_CONFIG_SUIT_MULTI_IMAGE_PACKAGE_BUILD`` | Include SUIT envelope and cache images. | ++----------------------------------------------------+-----------------------------------------+ .. _lib_dfu_multi_image_suit_multi_image_package: diff --git a/doc/nrf/libraries/dfu/suit_dfu.rst b/doc/nrf/libraries/dfu/suit_dfu.rst index b5ffeedc7731..89f767000b43 100644 --- a/doc/nrf/libraries/dfu/suit_dfu.rst +++ b/doc/nrf/libraries/dfu/suit_dfu.rst @@ -7,7 +7,7 @@ Software Updates for Internet of Things (SUIT) :local: :depth: 2 -The Software Updates for Internet of Things (SUIT) Device Firmware Upgrade (DFU) library provides functionality to a local domain for for orchestrating the update based on the SUIT manifest. +The Software Updates for Internet of Things (SUIT) Device Firmware Upgrade (DFU) library provides functionality to a local domain for managing the update based on the SUIT manifest. Overview ******** diff --git a/doc/nrf/libraries/gazell/gzp.rst b/doc/nrf/libraries/gazell/gzp.rst index 4705eb7d416f..2b661eb5d24b 100644 --- a/doc/nrf/libraries/gazell/gzp.rst +++ b/doc/nrf/libraries/gazell/gzp.rst @@ -42,11 +42,11 @@ Since Gazell Pairing requires exclusive access to pipes 0 and :c:macro:`GZP_DATA Do not access the following: -* :c:func:`nrf_gzll_set_base_address_0()` -* :c:func:`nrf_gzll_set_base_address_1()` -* :c:func:`nrf_gzll_set_address_prefix_byte()` (not for pipes 0 and 1) -* :c:func:`nrf_gzll_set_rx_pipes_enabled()` (can be used but the enabled status of pipes 0 and 1 should not be modified) -* :c:func:`nrf_gzll_set_channel_table()` +* :c:func:`nrf_gzll_set_base_address_0` +* :c:func:`nrf_gzll_set_base_address_1` +* :c:func:`nrf_gzll_set_address_prefix_byte` (not for pipes 0 and 1) +* :c:func:`nrf_gzll_set_rx_pipes_enabled` (can be used but the enabled status of pipes 0 and 1 should not be modified) +* :c:func:`nrf_gzll_set_channel_table` Configuration ************* diff --git a/doc/nrf/libraries/modem/location.rst b/doc/nrf/libraries/modem/location.rst index 7ac43483be5f..f42881462301 100644 --- a/doc/nrf/libraries/modem/location.rst +++ b/doc/nrf/libraries/modem/location.rst @@ -11,7 +11,7 @@ The Location library provides functionality for retrieving the location of a dev * GNSS satellite positioning including Assisted GNSS (A-GNSS) and Predicted GPS (P-GPS) data. * Cellular positioning. -* Wi-Fi positioning. +* Wi-Fi® positioning. Overview ******** @@ -32,7 +32,7 @@ The supported location methods are as follows: * GNSS positioning - * Uses :ref:`gnss_interface` for getting the location. + * Uses :ref:`GNSS interface` for getting the location. * A-GNSS and P-GPS are managed with :ref:`lib_nrf_cloud_agnss` and :ref:`lib_nrf_cloud_pgps`. * The application may also use some other source for the data and use :c:func:`location_agnss_data_process` and :c:func:`location_pgps_data_process` to pass the data to the Location library. * The data format of A-GNSS or P-GPS must be as received from :ref:`lib_nrf_cloud_agnss`. @@ -379,7 +379,10 @@ The following |NCS| applications and samples use this library: Limitations *********** -* The Location library can only have one application registered at a time. If there is already an application handler registered, another initialization will override the existing handler. +* The Location library can only have one application registered at a time. + If there is already an application handler registered, another initialization will override the existing handler. +* The :ref:`GNSS interface` should not be used directly by the application when using the Location library. + Using the GNSS interface from both the application and the Location library may lead to unexpected behavior. Dependencies ************ @@ -397,7 +400,7 @@ This library uses the following |NCS| libraries: It uses the following `sdk-nrfxlib`_ library: -* :ref:`nrfxlib:gnss_interface` +* :ref:`GNSS interface` It uses the following Zephyr libraries: diff --git a/doc/nrf/libraries/modem/lte_lc.rst b/doc/nrf/libraries/modem/lte_lc.rst index 5ed1420bf1c0..a078ccbbf491 100644 --- a/doc/nrf/libraries/modem/lte_lc.rst +++ b/doc/nrf/libraries/modem/lte_lc.rst @@ -20,6 +20,9 @@ Configuration To enable the library, set the Kconfig option :kconfig:option:`CONFIG_LTE_LINK_CONTROL` to ``y`` in the project configuration file :file:`prj.conf`. +.. note:: + By default, the library enables only the core features related to the network connectivity. + Establishing an LTE connection ============================== @@ -50,18 +53,11 @@ The following block of code shows how you can use the API to establish an LTE co k_sem_give(<e_connected); break; - case LTE_LC_EVT_PSM_UPDATE: - case LTE_LC_EVT_EDRX_UPDATE: case LTE_LC_EVT_RRC_UPDATE: case LTE_LC_EVT_CELL_UPDATE: case LTE_LC_EVT_LTE_MODE_UPDATE: - case LTE_LC_EVT_TAU_PRE_WARNING: - case LTE_LC_EVT_NEIGHBOR_CELL_MEAS: - case LTE_LC_EVT_MODEM_SLEEP_EXIT_PRE_WARNING: - case LTE_LC_EVT_MODEM_SLEEP_EXIT: - case LTE_LC_EVT_MODEM_SLEEP_ENTER: case LTE_LC_EVT_MODEM_EVENT: - /* Handle LTE events */ + /* Handle LTE events that are enabled by default. */ break; default: @@ -87,17 +83,72 @@ The following block of code shows how you can use the API to establish an LTE co } The code block demonstrates how you can use the library to asynchronously set up an LTE connection. -For more information on the callback events received in :c:type:`lte_lc_evt_handler_t` and data associated with each event, see the documentation on :c:struct:`lte_lc_evt`. -The following list mentions some of the information that can be extracted from the received callback events: +Additionally, to enable specific functionalities and receive specific events from the library, you must enable the corresponding modules through their respective Kconfig options: + +Connection Parameters Evaluation: + Use the :kconfig:option:`CONFIG_LTE_LC_CONN_EVAL_MODULE` Kconfig option to enable the following functionality related to Connection Parameters Evaluation: + + * :c:func:`lte_lc_conn_eval_params_get` + +eDRX (Extended Discontinuous Reception): + Use the :kconfig:option:`CONFIG_LTE_LC_EDRX_MODULE` Kconfig option to enable all the following functionalities related to eDRX: + + * :c:enumerator:`LTE_LC_EVT_EDRX_UPDATE` events + * :c:func:`lte_lc_ptw_set` + * :c:func:`lte_lc_edrx_param_set` + * :c:func:`lte_lc_edrx_req` + * :c:func:`lte_lc_edrx_get` + * :kconfig:option:`CONFIG_LTE_EDRX_REQ` + +Neighboring Cell Measurements: + Use the :kconfig:option:`CONFIG_LTE_LC_NEIGHBOR_CELL_MEAS_MODULE` Kconfig option to enable all the following functionalities related to Neighboring Cell Measurements: + + * :c:enumerator:`LTE_LC_EVT_NEIGHBOR_CELL_MEAS` events + * :c:func:`lte_lc_neighbor_cell_measurement_cancel` + * :c:func:`lte_lc_neighbor_cell_measurement` + +Periodic Search Configuration: + Use the :kconfig:option:`CONFIG_LTE_LC_PERIODIC_SEARCH_MODULE` Kconfig option to enable all the following functionalities related to Periodic Search Configuration: + + * :c:func:`lte_lc_periodic_search_request` + * :c:func:`lte_lc_periodic_search_clear` + * :c:func:`lte_lc_periodic_search_get` + * :c:func:`lte_lc_periodic_search_set` + +PSM (Power Saving Mode): + Use the :kconfig:option:`CONFIG_LTE_LC_PSM_MODULE` Kconfig option to enable all the following functionalities related to PSM: -* Network registration status -* PSM parameters -* eDRX parameters -* RRC connection state -* Cell information -* TAU pre-warning notifications -* Modem sleep notifications + * :c:enumerator:`LTE_LC_EVT_PSM_UPDATE` events + * :c:func:`lte_lc_psm_param_set` + * :c:func:`lte_lc_psm_param_set_seconds` + * :c:func:`lte_lc_psm_req` + * :c:func:`lte_lc_psm_get` + * :c:func:`lte_lc_proprietary_psm_req` + * :kconfig:option:`CONFIG_LTE_PSM_REQ` + +Release Assistance Indication (RAI): + Use the :kconfig:option:`CONFIG_LTE_LC_RAI_MODULE` Kconfig option to enable the following functionalities related to RAI: + + * :c:enumerator:`LTE_LC_EVT_RAI_UPDATE` events + * :kconfig:option:`CONFIG_LTE_RAI_REQ` + +Modem Sleep Notifications: + Use the :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_MODULE` Kconfig option to enable all the following functionalities related to Modem Sleep Notifications: + + * :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_EXIT_PRE_WARNING` events + * :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_ENTER` events + * :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_EXIT` events + * :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS` + +Tracking Area Update (TAU) Pre-warning: + Use the :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_MODULE` Kconfig option to enable the following functionalities related to TAU Pre-warning: + + * :c:enumerator:`LTE_LC_EVT_TAU_PRE_WARNING` events + * :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_NOTIFICATIONS` + +For more information on the callback events received in :c:type:`lte_lc_evt_handler_t` and data associated with each event, see the documentation on :c:struct:`lte_lc_evt`. +For more information on the functions and data associated with each, refer to the API documentation. .. note:: Some of the functionalities might not be compatible with certain modem firmware versions. @@ -108,7 +159,12 @@ The following list mentions some of the information that can be extracted from t Enabling power-saving features ============================== -The recommended way of enabling power saving features is to use the Kconfig options :kconfig:option:`CONFIG_LTE_PSM_REQ` and :kconfig:option:`CONFIG_LTE_EDRX_REQ`. +To enable power-saving features, use the following options: + +* :kconfig:option:`CONFIG_LTE_LC_PSM_MODULE` +* :kconfig:option:`CONFIG_LTE_LC_EDRX_MODULE` +* :kconfig:option:`CONFIG_LTE_LC_PSM_REQ` +* :kconfig:option:`CONFIG_LTE_LC_EDRX_REQ` PSM and eDRX can also be requested at run time using the :c:func:`lte_lc_psm_req` and :c:func:`lte_lc_edrx_req` function calls. However, calling the functions during modem initialization can lead to conflicts with the value set by the Kconfig options. @@ -129,8 +185,9 @@ You can set the timer values requested by the modem using the following options: Connection pre-evaluation ========================= -Modem firmware version 1.3.0 and higher supports connection a pre-evaluation feature that allows the application to get information about a cell that is likely to be used for an RRC connection. +Modem firmware versions 1.3.0 and higher support a connection pre-evaluation feature that allows the application to get information about a cell that is likely to be used for an RRC connection. Based on the parameters received in the function call, the application can decide whether to send application data or not. +To enable this module, use the :kconfig:option:`CONFIG_LTE_LC_CONN_EVAL_MODULE` Kconfig option. The function :c:func:`lte_lc_conn_eval_params_get` populates a structure of type :c:struct:`lte_lc_conn_eval_params` that includes information on the current consumption cost by the data transmission when utilizing the given cell. The following code snippet shows a basic implementation of :c:func:`lte_lc_conn_eval_params_get`: @@ -170,20 +227,29 @@ The :c:struct:`lte_lc_conn_eval_params` structure lists all information that is Modem sleep and TAU pre-warning notifications ============================================= -Modem firmware v1.3.0 and higher supports receiving callbacks from the modem related to Tracking Area Updates (TAU) and modem sleep. +Modem firmware versions 1.3.0 and higher support receiving callbacks from the modem related to Tracking Area Updates (TAU) and modem sleep. Based on these notifications, the application can alter its behavior to optimize for a given metric. For instance, TAU pre-warning notifications can be used to schedule data transfers before a TAU so that data transfer and TAU occurs within the same RRC connection window, thereby saving the potential overhead associated with the additional data exchange. Modem sleep notifications can be used to schedule processing in the same operational window as the modem to limit the overall computation time of the nRF91 Series SiP. -To enable modem sleep and TAU pre-warning notifications, enable the following options: +To enable modem sleep and TAU pre-warning notifications, use the following options: +* :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_MODULE` +* :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_MODULE` * :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS` * :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_NOTIFICATIONS` For additional configurations related to these features, see the API documentation. +Limitations +*********** + +The LTE link control library and the :ref:`nrfxlib:nrf_modem_at` interface should be used at the same time with caution, +because the library also uses the same interface. +As a general rule, do not use the AT commands for features that the LTE link control library supports. + Dependencies ************ diff --git a/doc/nrf/libraries/modem/modem_antenna.rst b/doc/nrf/libraries/modem/modem_antenna.rst index 09e27694e1fa..e582aa96b8ca 100644 --- a/doc/nrf/libraries/modem/modem_antenna.rst +++ b/doc/nrf/libraries/modem/modem_antenna.rst @@ -7,7 +7,7 @@ Modem antenna :local: :depth: 2 -You can use this library to set the antenna configuration on an nRF91 Series DK or a Thingy:91. +You can use this library to set the antenna configuration on an nRF91 Series DK, a Thingy:91, or a Thingy:91 X. Overview ******** diff --git a/doc/nrf/libraries/modem/modem_slm.rst b/doc/nrf/libraries/modem/modem_slm.rst index 502abb34b82d..b035d3a36da3 100644 --- a/doc/nrf/libraries/modem/modem_slm.rst +++ b/doc/nrf/libraries/modem/modem_slm.rst @@ -22,7 +22,7 @@ The Modem SLM library allows you to perform the following functions: * Send raw data in SLM data mode. Refer to :ref:`slm_data_mode`. * Monitor AT notifications with registered callbacks, similar to the :ref:`at_monitor_readme` library. -* Send AT commands via UART or RTT shell, similar to the :ref:`lib_at_shell` library. +* Send AT commands through UART or RTT shell, similar to the :ref:`lib_at_shell` library. Configuration ************* diff --git a/doc/nrf/libraries/modem/nrf_modem_lib/nrf_modem_lib_trace.rst b/doc/nrf/libraries/modem/nrf_modem_lib/nrf_modem_lib_trace.rst index 75327e7a4df6..f0c360c07d97 100644 --- a/doc/nrf/libraries/modem/nrf_modem_lib/nrf_modem_lib_trace.rst +++ b/doc/nrf/libraries/modem/nrf_modem_lib/nrf_modem_lib_trace.rst @@ -104,7 +104,7 @@ Sending traces over UART on an nRF91 Series DK To send modem traces over UART on an nRF91 Series DK, configuration must be added for the UART device in the devicetree and Kconfig. This is done by adding the :ref:`modem trace UART snippet ` when building and programming. -Use the `Cellular Monitor`_ app for capturing and analyzing modem traces. +Use the `Cellular Monitor app`_ for capturing and analyzing modem traces. TF-M logging must use the same UART as the application. For more details, see :ref:`shared TF-M logging `. @@ -178,7 +178,7 @@ To enable modem traces with RTT, enable the :kconfig:option:`CONFIG_NRF_MODEM_LI The traces can be captured using the J-Link RTT logger software. This produces a RAW binary trace file with a ``.log`` extension. -The RAW binary trace file can be converted to PCAP with the :guilabel:`Open trace file in Wireshark` option in the `Cellular Monitor`_ app of `nRF Connect for Desktop`_. +The RAW binary trace file can be converted to PCAP with the :guilabel:`Open trace file in Wireshark` option in the `Cellular Monitor app`_ in `nRF Connect for Desktop`_. By default, files with the ``.log`` extension are not shown. .. _adding_custom_modem_trace_backends: diff --git a/doc/nrf/libraries/modem/pdn.rst b/doc/nrf/libraries/modem/pdn.rst index 3664dced02e1..bb091ff7d867 100644 --- a/doc/nrf/libraries/modem/pdn.rst +++ b/doc/nrf/libraries/modem/pdn.rst @@ -7,7 +7,7 @@ PDN :local: :depth: 2 -The PDN library can be used to manage Packet Data Protocol (PDP) contexts and PDN connections. +The PDN library can be used to manage Packet Data Protocol (PDP) contexts and Packet Data Network (PDN) connections. It provides an API for the following purposes: * Creating and configuring PDP contexts @@ -42,7 +42,7 @@ The application can create PDP contexts by using the :c:func:`pdn_ctx_create` fu The application can use the :c:func:`pdn_default_ctx_cb_reg` function to register an event handler for events pertaining the default PDP context, and the :c:func:`pdn_default_ctx_cb_dereg` to deregister it. The library stores 12 bytes of memory on the system heap for each PDP context created using :c:func:`pdn_ctx_create` and for each event handler for the default PDP context. The maximum number of PDP contexts that can be created is limited by the maximum number of PDP context supported by the nRF91 Series modem firmware and the amount of system heap memory available. -The :c:func:`pdn_ctx_configure` function is used to configure a PDP context, which can be configured with a family, access point name, and optional authentication parameters. +The :c:func:`pdn_ctx_configure` function is used to configure a PDP context, which can be configured with address family, access point name, and optional authentication parameters. The :c:func:`pdn_activate` function activates a PDN connection for a PDP context. A PDN connection is identified by an ID as reported by ``AT%XGETPDNID``, and it is distinct from the PDP context ID (CID). The modem creates a PDN connection for a PDP context as necessary. @@ -55,7 +55,7 @@ The PDN library overrides the default PDP context configuration automatically af The default PDP context configuration consists of the following parameters, each controlled with a Kconfig setting: * Access point name, :kconfig:option:`CONFIG_PDN_DEFAULT_APN` -* Family, :kconfig:option:`CONFIG_PDN_DEFAULT_FAM` +* Address family, :kconfig:option:`CONFIG_PDN_DEFAULT_FAM` * Authentication method, :kconfig:option:`CONFIG_PDN_DEFAULT_AUTH` * Authentication credentials, :kconfig:option:`CONFIG_PDN_DEFAULT_USERNAME` and :kconfig:option:`CONFIG_PDN_DEFAULT_PASSWORD` diff --git a/doc/nrf/libraries/modem/uicc_lwm2m.rst b/doc/nrf/libraries/modem/uicc_lwm2m.rst index 0056c4f7ae4a..c6fa3e7f1a61 100644 --- a/doc/nrf/libraries/modem/uicc_lwm2m.rst +++ b/doc/nrf/libraries/modem/uicc_lwm2m.rst @@ -17,7 +17,7 @@ To enable the UICC LwM2M library, configure the :kconfig:option:`CONFIG_UICC_LWM Dependencies ************ -The UICC LwM2M library requires the :ref:`nrfxlib:nrf_modem` library to use AT commands. +The UICC LwM2M library requires the :ref:`nrfxlib:nrf_modem` to use AT commands. API documentation ***************** diff --git a/doc/nrf/libraries/networking/aws_fota.rst b/doc/nrf/libraries/networking/aws_fota.rst index 9ed2a33e3b42..cbeacde6ff26 100644 --- a/doc/nrf/libraries/networking/aws_fota.rst +++ b/doc/nrf/libraries/networking/aws_fota.rst @@ -62,7 +62,7 @@ Creating a FOTA job #. Click the uploaded image file :file:`app_update.bin` and copy the *Object URL* without the *https://* prefix and folder path. #. Create a text file (job document) with content as in the snippet, replacing the following data: - * *protocol* with either `http` or `https`. + * *protocol* with either ``http`` or ``https``. * *host_url* with the *Object URL* copied in the previous step (for example, ``examplebucket.s3.eu-central-1.amazonaws.com``). * *file_path* with the path and file name (for example, ``app_update.bin``). @@ -105,10 +105,10 @@ Configure the following parameters when using this library: * :kconfig:option:`CONFIG_AWS_FOTA_PAYLOAD_SIZE` - Sets the maximum payload size for AWS IoT job messages. * :kconfig:option:`CONFIG_AWS_FOTA_DOWNLOAD_SECURITY_TAG` - Sets the security tag to be used in case of HTTPS downloads. -Additionally, configure the :ref:`lib_download_client` library: +Additionally, configure the :ref:`lib_downloader` library: -* :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_MAX_HOSTNAME_SIZE` - Sets the maximum length of the host name for the download client. -* :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE` - Sets the maximum length of the file name for the download client. +* :kconfig:option:`CONFIG_DOWNLOADER_MAX_HOSTNAME_SIZE` - Sets the maximum length of the host name for the library. +* :kconfig:option:`CONFIG_DOWNLOADER_MAX_FILENAME_SIZE` - Sets the maximum length of the file name for the library. .. _aws_fota_implementation: @@ -133,7 +133,7 @@ The following sequence diagram shows how a firmware over-the-air update is imple AWS IoT jobs ============ -The implementation uses a job document like the following (where *protocol* is either `http` or `https`, *bucket_name* is the name of your bucket and *file_name* is the name of your file) for passing information from `AWS IoT jobs`_ to the device: +The implementation uses a job document like the following (where *protocol* is either ``http`` or ``https``, *bucket_name* is the name of your bucket and *file_name* is the name of your file) for passing information from `AWS IoT jobs`_ to the device: .. parsed-literal:: :class: highlight @@ -191,7 +191,7 @@ Presigned URLs When using the presigned URLs, you might need to increase the value of the following Kconfig options to accommodate the long file name and payload size of the presigned URL and the secure download of the image: -* :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE`. +* :kconfig:option:`CONFIG_DOWNLOADER_MAX_FILENAME_SIZE`. * :kconfig:option:`CONFIG_AWS_FOTA_PAYLOAD_SIZE`. * :kconfig:option:`CONFIG_MBEDTLS_HEAP_SIZE` - If running Mbed TLS on the application core (Wi-Fi® builds). @@ -199,9 +199,9 @@ Limitations *********** * If the :kconfig:option:`CONFIG_AWS_FOTA_DOWNLOAD_SECURITY_TAG` Kconfig option is not configured but HTTPS is selected as the protocol, the update job fails. - For further information about HTTPS support, refer to :ref:`the HTTPS section of the download client documentation `. + For further information about HTTPS support, refer to :ref:`the HTTPS section of the Downloader library documentation `. * The library requires a Content-Range header to be present in the HTTP response from the server. - This limitation is inherited from the :ref:`lib_download_client` library. + This limitation is inherited from the :ref:`lib_downloader` library. API documentation ***************** diff --git a/doc/nrf/libraries/networking/azure_fota.rst b/doc/nrf/libraries/networking/azure_fota.rst index ba04327482ff..f906aa7de4db 100644 --- a/doc/nrf/libraries/networking/azure_fota.rst +++ b/doc/nrf/libraries/networking/azure_fota.rst @@ -58,16 +58,16 @@ Configure the following parameters when using this library: * :kconfig:option:`CONFIG_AZURE_FOTA_TLS` - Enables HTTPS for downloads. By default, TLS is enabled and currently, the transport protocol must be configured at compile time. * :kconfig:option:`CONFIG_AZURE_FOTA_SEC_TAG` - Sets the security tag for TLS credentials when using HTTPS as the transport layer. See :ref:`azure_iot_hub_flash_certs` for more details. -Additionally, configure the :ref:`lib_download_client` library: +Additionally, configure the :ref:`lib_downloader` library: -* :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_MAX_HOSTNAME_SIZE` - Sets the maximum length of the host name for the download client. -* :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE` - Sets the maximum length of the file name for the download client. +* :kconfig:option:`CONFIG_DOWNLOADER_MAX_HOSTNAME_SIZE` - Sets the maximum length of the host name for the library. +* :kconfig:option:`CONFIG_DOWNLOADER_MAX_FILENAME_SIZE` - Sets the maximum length of the file name for the library. Limitations *********** The library requires a ``Content-Range`` header to be present in the HTTP response from the server. -This limitation is inherited from the :ref:`lib_download_client` library. +This limitation is inherited from the :ref:`lib_downloader` library. API documentation ***************** diff --git a/doc/nrf/libraries/networking/azure_iot_hub.rst b/doc/nrf/libraries/networking/azure_iot_hub.rst index febde18aff70..b0b0add52aba 100644 --- a/doc/nrf/libraries/networking/azure_iot_hub.rst +++ b/doc/nrf/libraries/networking/azure_iot_hub.rst @@ -52,6 +52,11 @@ To get started with testing the Azure IoT Hub, make sure that the following prer * Install the `Azure CLI`_. * To use the ``nrfcredstore`` tool, the dependencies in the :file:`nrf/scripts/requirements-extra.txt` file must be installed. + Enter the following command in a terminal window to install all the dependencies in the file: + + .. code-block:: console + + pip3 install -r nrf/scripts/requirements-extra.txt .. rst-class:: numbered-step diff --git a/doc/nrf/libraries/networking/download_client.rst b/doc/nrf/libraries/networking/download_client.rst index 177184d9fc32..1628ffc16fe7 100644 --- a/doc/nrf/libraries/networking/download_client.rst +++ b/doc/nrf/libraries/networking/download_client.rst @@ -7,6 +7,11 @@ Download client :local: :depth: 2 +.. note:: + + The :ref:`lib_download_client` library has been deprecated and it will be removed in one of the future releases. + Use the :ref:`lib_downloader` library instead. + The download client library can be used to download files from an HTTP or a CoAP server. Overview diff --git a/doc/nrf/libraries/networking/downloader.rst b/doc/nrf/libraries/networking/downloader.rst new file mode 100644 index 000000000000..a938df10c9a1 --- /dev/null +++ b/doc/nrf/libraries/networking/downloader.rst @@ -0,0 +1,203 @@ +.. _lib_downloader: + +Downloader +########## + +.. contents:: + :local: + :depth: 2 + +You can use the downloader library to download files from a server. + +Overview +******** + +The download is carried out in a separate thread and the application receives events such as :c:enumerator:`DOWNLOADER_EVT_FRAGMENT` that contain the data fragments as the download progresses. +When the download completes, the library sends the :c:enumerator:`DOWNLOADER_EVT_DONE` event to the application. + +Protocols +========= + +The library supports HTTP, HTTPS (TLS 1.2), CoAP, and CoAPS (DTLS 1.2) over IPv4 and IPv6. +If other protocols are required, they can be added by the application. +See :file:`downloader_transport.h` for details. +The protocol used for the download is specified in the beginning of the ``URI`` or ``host``. +Use ``http://`` for HTTP, ``https://`` for HTTPS, ``coap://`` for CoAP, and ``coaps://`` for CoAPS. +If no protocol is specified, the downloader defaults to HTTP or HTTPS, depending on the server security configuration. + +.. _downloader_https: + +HTTP and HTTPS (TLS 1.2) +------------------------ + +When downloading using HTTP, the library sends only one HTTP request to the server and receives only one HTTP response. + +When downloading using HTTPS with an nRF91 Series device, it is carried out through `Content-Range requests (IETF RFC 7233)`_ due to memory constraints that limit the maximum HTTPS message size to two kilobytes. +The library thus sends and receives as many requests and responses as the number of fragments that constitute the download. +For example, to download a file of 47 kilobytes with a fragment size of 2 kilobytes, a total of 24 HTTP GET requests are sent. +The download can also be carried out through fragments by specifying the :c:member:`downloader_host_cfg.range_override` field of the host configuration. + +CoAP and CoAPS (DTLS 1.2) +------------------------- + +The CoAP feature is disabled by default. +You can enable it using the :kconfig:option:`CONFIG_DOWNLOADER_TRANSPORT_COAP` Kconfig option. +When downloading from a CoAP server, the library uses the CoAP block-wise transfer. + +Configuration +************* + +The configuration of the library depends on the protocol you are using. + +Configuring HTTP and HTTPS (TLS 1.2) +==================================== + +Make sure that the buffer provided to the downloader is large enough to accommodate the entire HTTP header of the request. +Ensure that the values of the :kconfig:option:`CONFIG_DOWNLOADER_MAX_HOSTNAME_SIZE` and :kconfig:option:`CONFIG_DOWNLOADER_MAX_FILENAME_SIZE` Kconfig options are large enough for your host and filenames, respectively. + +When using HTTPS the application must provision the TLS credentials and pass the security tag to the library through the :c:struct:`downloader_host_cfg` structure. +To provision a TLS certificate to the modem, use :c:func:`modem_key_mgmt_write` and other :ref:`modem_key_mgmt` APIs. + +Configuring CoAP and CoAPS (DTLS 1.2) +===================================== + +Make sure the buffer provided to the downloader is large enough to accommodate the entire CoAP header and the CoAP block. +The CoAP block size is provided by the :kconfig:option:`CONFIG_DOWNLOADER_COAP_BLOCK_SIZE_CHOICE` Kconfig option. +Ensure that the values of the :kconfig:option:`CONFIG_DOWNLOADER_MAX_HOSTNAME_SIZE` and :kconfig:option:`CONFIG_DOWNLOADER_MAX_FILENAME_SIZE` Kconfig options are large enough for your host and filenames, respectively. + +When using CoAPS the application must provision the TLS credentials and pass the security tag to the library through the :c:struct:`downloader_host_cfg` structure. + +When you have modem firmware v1.3.5 or newer, you can use the DTLS Connection Identifier feature in this library by setting the ``cid`` flag in the :c:struct:`downloader_host_cfg` structure. + +Usage +***** + +To initialize the library, call the :c:func:`downloader_init` function as follows: + +.. code-block:: c + + int err; + + static int dl_callback(const struct downloader_evt *event); + char dl_buf[2048]; + struct downloader dl; + struct downloader_cfg dl_cfg = { + .callback = dl_callback, + .buf = dl_buf, + .buf_size, + }; + + err = downloader_init(&dl, &dl_cfg); + if (err) { + printk("downloader init failed, err %d\n", err); + } + +To deinitialize the library, call the :c:func:`downloader_deinit` function as follows: + +.. code-block:: c + + int err; + struct downloader dl; + + /* downloader is initialized */ + + err = downloader_deinit(&dl); + if (err) { + printk("downloader deinit failed, err %d\n", err); + } + +This will free up the resources used by the library. + +The following snippet shows how to download a file using HTTPS: + +.. code-block:: c + + + int err; + int dl_res; + + static int dl_callback(const struct downloader_evt *event) { + switch (event->id) { + case DOWNLOADER_EVT_FRAGMENT: + printk("Received fragment, dataptr: %p, len %d\n", + event->fragment.buf, event->fragment.len); + return 0; + case DOWNLOADER_EVT_ERROR: + printk("downloader error: %d\n", event->error); + dl_res = event->error; + return 0; + case DOWNLOADER_EVT_DONE: + printk("downloader done\n"); + dl_res = 0; + return 0; + case DOWNLOADER_EVT_STOPPED: + printk("downloader stopped\n"); + k_sem_give(&dl_sem); + return 0; + case DOWNLOADER_EVT_DEINITIALIZED: + printk("downloader deinitialized\n"); + return 0; + } + } + + char dl_buf[2048]; + struct downloader dl; + struct downloader_cfg dl_cfg = { + .callback = dl_callback, + .buf = dl_buf, + .buf_size, + }; + + int sec_tags[] = {1, 2, 3}; + + struct downloader_host_cfg dl_host_cfg = { + .sec_tag_list = sec_tags, + .sec_tag_count = ARRAY_SIZE(sec_tags), + /* This will disconnect the downloader from the server when the download is complete */ + .keep_connection = false, + }; + + struct downloader_transport_http_cfg dl_transport_http_cfg = { + .sock_recv_timeo = 600000, + }; + + err = downloader_init(&dl, &dl_cfg); + if (err) { + printk("downloader init failed, err %d\n", err); + } + + err = downloader_transport_http_set_config(&dl, &dl_transport_http_cfg); + if (err) { + printk("failed to set http transport params failed, err %d\n", err); + } + + err = downloader_get(&dl, &dl_host_cfg, "https://myserver.com/path/to/file.txt"); + if (err) { + printk("downloader start failed, err %d\n", err); + } + + /* Wait for download to complete */ + k_sem_take(&dl_sem, K_FOREVER); + + err = downloader_deinit(&dl); + if (err) { + printk("downloader deinit failed, err %d\n", err); + } + +Limitations +*********** + +The library requires the host server to provide a Content-Range field in the HTTP GET response header when using HTTPS with the nRF91 Series devices. +If this header field is missing, the library logs the following error:: + + downloader: Server did not send "Content-Range" in response + + Due to internal limitations, maximum CoAP block size is 512 bytes. + +API documentation +***************** + +| Header file: :file:`include/downloader.h`, :file:`include/downloader_transport.h`, :file:`include/downloader_transport_http.h`, :file:`include/downloader_transpot_coap.h` +| Source files: :file:`subsys/net/lib/downloader/src/` + +.. doxygengroup:: downloader diff --git a/doc/nrf/libraries/networking/fota_download.rst b/doc/nrf/libraries/networking/fota_download.rst index 15d81950cc03..35e645a57a48 100644 --- a/doc/nrf/libraries/networking/fota_download.rst +++ b/doc/nrf/libraries/networking/fota_download.rst @@ -19,7 +19,7 @@ To start a FOTA download, provide the URL for the file that should be downloaded * ``file`` - It indicates the path to the file. For example, ``path/to/resource/file.bin``. -The FOTA library downloads the image using the :ref:`lib_download_client` library. +The FOTA library downloads the image using the :ref:`lib_downloader` library. After downloading the first fragment, it uses the :ref:`lib_dfu_target` library to identify the type of image that is being downloaded. Examples of image types are *modem upgrades* and upgrades handled by a *second-stage bootloader*. @@ -38,7 +38,7 @@ HTTPS downloads The FOTA download library is used in the :ref:`http_application_update_sample` sample. By default, the FOTA download library uses HTTP for downloading the firmware file. -To use HTTPS, apply the changes described in :ref:`the HTTPS section of the download client documentation ` to the library. +To use HTTPS, apply the changes described in :ref:`the HTTPS section of the Downloader library documentation ` to the library. Second-stage bootloader upgrades ******************************** diff --git a/doc/nrf/libraries/networking/lwm2m_location_assistance.rst b/doc/nrf/libraries/networking/lwm2m_location_assistance.rst index 5a160af2faf4..7947905c7cca 100644 --- a/doc/nrf/libraries/networking/lwm2m_location_assistance.rst +++ b/doc/nrf/libraries/networking/lwm2m_location_assistance.rst @@ -20,7 +20,7 @@ To know more about the AVSystem integration with |NCS|, see :ref:`ug_avsystem`. The library adds support for four objects related to location assistance: * GNSS Assistance object (ID 33625) for requesting and handling A-GNSS and P-GPS assistance data. -* Ground Fix Location object (ID 33626) for requesting and storing estimated cell and Wi-Fi based location. +* Ground Fix Location object (ID 33626) for requesting and storing estimated cell and Wi-Fi®-based location. * Visible Wi-Fi Access Point object (ID 33627) for storing nearby Wi-Fi Access Point information. * ECID-Signal Measurement Information object (ID 10256) for storing the cell neighborhood information. diff --git a/doc/nrf/libraries/networking/nrf_cloud.rst b/doc/nrf/libraries/networking/nrf_cloud.rst index a308c68daee3..4968e833bd3e 100644 --- a/doc/nrf/libraries/networking/nrf_cloud.rst +++ b/doc/nrf/libraries/networking/nrf_cloud.rst @@ -12,7 +12,7 @@ It abstracts and hides the details of the transport and the encoding scheme that The current implementation supports the following technologies: * GNSS, TEMP, and other application-specific sensor data -* Cellular and Wi-Fi location data +* Cellular and Wi-Fi® location data * TLS-secured MQTT, TLS-secured REST, or DTLS-secured CoAP as the communication protocol * JSON as the data format for MQTT and REST * CBOR and JSON as the data format for CoAP @@ -48,8 +48,8 @@ The :c:func:`nrf_cloud_connect` function does not block and returns success if t When the :kconfig:option:`CONFIG_NRF_CLOUD_CONNECTION_POLL_THREAD` Kconfig option is enabled, an additional event, :c:enum:`NRF_CLOUD_EVT_TRANSPORT_CONNECTING`, is sent to the application. To adjust the stack size of the connection monitoring thread, set the :kconfig:option:`CONFIG_NRF_CLOUD_CONNECTION_POLL_THREAD_STACK_SIZE` Kconfig option. The :c:enum:`NRF_CLOUD_EVT_TRANSPORT_CONNECT_ERROR` event is sent if an error occurs while the transport connection is being established. -The status field of the :c:struct:`nrf_cloud_evt` structure contains the reason for the error that is defined by :c:enumerator:`nrf_cloud_connect_result`. -The :c:enumerator:`NRF_CLOUD_EVT_TRANSPORT_DISCONNECTED` event also contains additional information in the status field that is defined by :c:enumerator:`nrf_cloud_disconnect_status`. +The status field of the :c:struct:`nrf_cloud_evt` structure contains the reason for the error that is defined by :c:enum:`nrf_cloud_connect_result`. +The :c:enumerator:`NRF_CLOUD_EVT_TRANSPORT_DISCONNECTED` event also contains additional information in the status field that is defined by :c:enum:`nrf_cloud_disconnect_status`. First, the library tries to establish the transport for communicating with the cloud. This procedure involves a TLS handshake that might take up to three seconds. @@ -127,7 +127,7 @@ Configuration options for device ID * :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_SRC_IMEI` - If you enable this option, the ID is automatically generated using a prefix and the modem's IMEI (````). This is the default. You can configure the prefix by using :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_PREFIX`. - The default format of the prefix is ``nrf-`` and it is valid only for Nordic devices such as Thingy:91 or an nRF91 Series DK. + The default format of the prefix is ``nrf-`` and it is valid only for Nordic devices such as Thingy:91, Thingy:91 X, or an nRF91 Series DK. For custom hardware, use a prefix other than ``nrf-`` by modifying :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_PREFIX`. * :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_SRC_INTERNAL_UUID` - If you enable this option, the ID is automatically generated using the modem's 128-bit internal UUID, which results in a 36 character string of hexadecimal values in the 8-4-4-4-12 UUID format. @@ -160,7 +160,7 @@ nRF Cloud FOTA enables the following additional features and libraries: * :kconfig:option:`CONFIG_FOTA_DOWNLOAD` enables :ref:`lib_fota_download` * :kconfig:option:`CONFIG_DFU_TARGET` enables :ref:`lib_dfu_target` -* :kconfig:option:`CONFIG_DOWNLOAD_CLIENT` enables :ref:`lib_download_client` +* :kconfig:option:`CONFIG_DOWNLOADER` enables :ref:`lib_downloader` * :kconfig:option:`CONFIG_FOTA_DOWNLOAD_PROGRESS_EVT` * :kconfig:option:`CONFIG_FOTA_PROGRESS_EVT_INCREMENT` * :kconfig:option:`CONFIG_REBOOT` diff --git a/doc/nrf/libraries/networking/nrf_cloud_agnss.rst b/doc/nrf/libraries/networking/nrf_cloud_agnss.rst index 4ccf5cba25cc..2b21f117da6e 100644 --- a/doc/nrf/libraries/networking/nrf_cloud_agnss.rst +++ b/doc/nrf/libraries/networking/nrf_cloud_agnss.rst @@ -149,7 +149,7 @@ This library uses the following |NCS| libraries: It uses the following `sdk-nrfxlib`_ library: -* :ref:`nrfxlib:gnss_interface` +* :ref:`GNSS interface` API documentation ***************** diff --git a/doc/nrf/libraries/networking/nrf_cloud_location.rst b/doc/nrf/libraries/networking/nrf_cloud_location.rst index 550aaf8d85a6..5cc9dad108d8 100644 --- a/doc/nrf/libraries/networking/nrf_cloud_location.rst +++ b/doc/nrf/libraries/networking/nrf_cloud_location.rst @@ -8,7 +8,7 @@ nRF Cloud location :local: :depth: 2 -The nRF Cloud location library enables applications to submit cellular network and/or nearby Wi-Fi network information to `nRF Cloud`_ over MQTT to obtain device location. +The nRF Cloud location library enables applications to submit cellular network and/or nearby Wi-Fi® network information to `nRF Cloud`_ over MQTT to obtain device location. This library is an enhancement to the :ref:`lib_nrf_cloud` library. .. note:: diff --git a/doc/nrf/libraries/networking/nrf_cloud_log.rst b/doc/nrf/libraries/networking/nrf_cloud_log.rst index 8c77b1dbdf97..76769adddbeb 100644 --- a/doc/nrf/libraries/networking/nrf_cloud_log.rst +++ b/doc/nrf/libraries/networking/nrf_cloud_log.rst @@ -82,7 +82,7 @@ Configure one or both of the following Kconfig options to enable direct log mess If only the first is enabled: -* Calls to the direct log message functions :c:func:`nrf_cloud_log_send()` and :c:func:`nrf_cloud_rest_log_send()` send messages direct to nRF Cloud immediately. +* Calls to the direct log message functions :c:func:`nrf_cloud_log_send` and :c:func:`nrf_cloud_rest_log_send` send messages direct to nRF Cloud immediately. * The cloud logging backend is not available, and consequently, no Zephyr log messages are transmitted to the cloud. If only the second is enabled: diff --git a/doc/nrf/libraries/networking/nrf_cloud_pgps.rst b/doc/nrf/libraries/networking/nrf_cloud_pgps.rst index 0050157c2efa..279b0b10c371 100644 --- a/doc/nrf/libraries/networking/nrf_cloud_pgps.rst +++ b/doc/nrf/libraries/networking/nrf_cloud_pgps.rst @@ -292,13 +292,13 @@ Dependencies This library uses the following |NCS| libraries: * :ref:`lib_date_time` -* :ref:`lib_download_client` +* :ref:`lib_downloader` * :ref:`modem_info_readme` * :ref:`lib_nrf_cloud` It uses the following `sdk-nrfxlib`_ library: -* :ref:`nrfxlib:gnss_interface` +* :ref:`GNSS interface` It uses the following Zephyr subsystem: diff --git a/doc/nrf/libraries/networking/ot_rpc.rst b/doc/nrf/libraries/networking/ot_rpc.rst new file mode 100644 index 000000000000..d7d42f8d0cd9 --- /dev/null +++ b/doc/nrf/libraries/networking/ot_rpc.rst @@ -0,0 +1,188 @@ +.. _ot_rpc: + +OpenThread Remote Procedure Call +################################ + +.. contents:: + :local: + :depth: 2 + +The OpenThread Remote Procedure Call (RPC) solution is a set of libraries that enable controlling the :ref:`ug_thread` stack running on a remote device or processor. + +Overview +******** + +The solution allows calling the OpenThread API on one device to control the OpenThread stack running on another device. +This is accomplished by serializing the API call and sending it to the remote device over a selected transport. +Use this solution when you cannot or do not want to include the OpenThread stack in your application firmware, for example to offload the application CPU, save memory, or optimize the power consumption. + +Implementation +============== + +The OpenThread RPC consists of the following libraries: + + * OpenThread RPC Client, which includes the OpenThread RPC common library. + This library serializes the OpenThread API using the :ref:`nrf_rpc` library. + OpenThread RPC Client has to be part of the user application. + * OpenThread RPC Server, which includes the OpenThread RPC common library and the OpenThread stack. + This library enables communication with OpenThread RPC Client, and has to run on a device that has an 802.15.4 radio hardware peripheral. + +Configuration +************* + +These Kconfig options must be enabled to use OpenThread RPC: + + * :kconfig:option:`CONFIG_OPENTHREAD_RPC` + * :kconfig:option:`CONFIG_OPENTHREAD_RPC_CLIENT` (for the user application with OpenThread RPC Client) + * :kconfig:option:`CONFIG_OPENTHREAD_RPC_SERVER` (for the device that has an 802.15.4 radio hardware peripheral and OpenThread RPC Server) + +These Kconfig options must additionally be enabled for the server: + + * :kconfig:option:`CONFIG_NETWORKING` + * :kconfig:option:`CONFIG_NET_L2_OPENTHREAD` + * :kconfig:option:`CONFIG_OPENTHREAD_MANUAL_START` + +Read :ref:`ug_thread_configuring` to learn more about configuring the OpenThread stack. + +The :kconfig:option:`CONFIG_OPENTHREAD_RPC_NET_IF` Kconfig option enables the network interface on the client, which forwards and receives IPv6 packets to and from the server. +This option must be set to the same value on both the client and server, and is enabled by default. + +Samples using the library +************************* + +The following |NCS| samples use this library: + +* :ref:`nrf_rpc_protocols_serialization_client` +* :ref:`nrf_rpc_protocols_serialization_server` + +Limitations +*********** + +OpenThread RPC currently supports the serialization of the following OpenThread functions: + +* :c:func:`otCliInit` +* :c:func:`otCliInputLine` +* :c:func:`otCoapAddResource` +* :c:func:`otCoapMessageAppendUriPathOptions` +* :c:func:`otCoapMessageGetCode` +* :c:func:`otCoapMessageGetMessageId` +* :c:func:`otCoapMessageGetToken` +* :c:func:`otCoapMessageGetTokenLength` +* :c:func:`otCoapMessageGetType` +* :c:func:`otCoapMessageInit` +* :c:func:`otCoapMessageInitResponse` +* :c:func:`otCoapMessageSetPayloadMarker` +* :c:func:`otCoapNewMessage` +* :c:func:`otCoapRemoveResource` +* :c:func:`otCoapSendRequest` +* :c:func:`otCoapSendRequestWithParameters` +* :c:func:`otCoapSendResponse` +* :c:func:`otCoapSendResponseWithParameters` +* :c:func:`otCoapSetDefaultHandler` +* :c:func:`otCoapStart` +* :c:func:`otCoapStop` +* :c:func:`otDatasetGetActive` +* :c:func:`otDatasetGetActiveTlvs` +* :c:func:`otDatasetIsCommissioned` +* :c:func:`otDatasetSetActive` +* :c:func:`otDatasetSetActiveTlvs` +* :c:func:`otDnsAddressResponseGetAddress` +* :c:func:`otDnsAddressResponseGetHostName` +* :c:func:`otDnsBrowseResponseGetHostAddress` +* :c:func:`otDnsBrowseResponseGetServiceInfo` +* :c:func:`otDnsBrowseResponseGetServiceInstance` +* :c:func:`otDnsBrowseResponseGetServiceName` +* :c:func:`otDnsClientBrowse` +* :c:func:`otDnsClientGetDefaultConfig` +* :c:func:`otDnsClientResolveAddress` +* :c:func:`otDnsClientResolveIp4Address` +* :c:func:`otDnsClientResolveService` +* :c:func:`otDnsClientResolveServiceAndHostAddress` +* :c:func:`otDnsClientSetDefaultConfig` +* :c:func:`otDnsServiceResponseGetHostAddress` +* :c:func:`otDnsServiceResponseGetServiceInfo` +* :c:func:`otDnsServiceResponseGetServiceName` +* :c:func:`otGetVersionString` +* :c:func:`otInstanceErasePersistentInfo` +* :c:func:`otInstanceFinalize` +* :c:func:`otInstanceGetId` +* :c:func:`otInstanceInitSingle` +* :c:func:`otInstanceIsInitialized` +* :c:func:`otIp6GetMulticastAddresses` +* :c:func:`otIp6GetUnicastAddresses` +* :c:func:`otIp6IsEnabled` +* :c:func:`otIp6SetEnabled` +* :c:func:`otIp6SubscribeMulticastAddress` +* :c:func:`otIp6UnsubscribeMulticastAddress` +* :c:func:`otLinkGetChannel` +* :c:func:`otLinkGetExtendedAddress` +* :c:func:`otLinkGetFactoryAssignedIeeeEui64` +* :c:func:`otLinkGetPanId` +* :c:func:`otLinkGetPollPeriod` +* :c:func:`otLinkSetEnabled` +* :c:func:`otLinkSetMaxFrameRetriesDirect` +* :c:func:`otLinkSetMaxFrameRetriesIndirect` +* :c:func:`otLinkSetPollPeriod` +* :c:func:`otMessageAppend` +* :c:func:`otMessageFree` +* :c:func:`otMessageGetLength` +* :c:func:`otMessageGetOffset` +* :c:func:`otMessageRead` +* :c:func:`otNetDataGet` +* :c:func:`otNetDataGetNextOnMeshPrefix` +* :c:func:`otNetDataGetNextService` +* :c:func:`otNetDataGetStableVersion` +* :c:func:`otNetDataGetVersion` +* :c:func:`otRemoveStateChangeCallback` +* :c:func:`otSetStateChangedCallback` +* :c:func:`otSrpClientAddService` +* :c:func:`otSrpClientClearHostAndServices` +* :c:func:`otSrpClientClearService` +* :c:func:`otSrpClientDisableAutoStartMode` +* :c:func:`otSrpClientEnableAutoHostAddress` +* :c:func:`otSrpClientEnableAutoStartMode` +* :c:func:`otSrpClientRemoveHostAndServices` +* :c:func:`otSrpClientRemoveService` +* :c:func:`otSrpClientSetCallback` +* :c:func:`otSrpClientSetHostName` +* :c:func:`otSrpClientSetKeyLeaseInterval` +* :c:func:`otSrpClientSetLeaseInterval` +* :c:func:`otSrpClientSetTtl` +* :c:func:`otThreadDiscover` +* :c:func:`otThreadErrorToString` +* :c:func:`otThreadGetDeviceRole` +* :c:func:`otThreadGetExtendedPanId` +* :c:func:`otThreadGetLeaderRouterId` +* :c:func:`otThreadGetLeaderWeight` +* :c:func:`otThreadGetLinkMode` +* :c:func:`otThreadGetMeshLocalPrefix` +* :c:func:`otThreadGetMleCounters` +* :c:func:`otThreadGetNetworkName` +* :c:func:`otThreadGetPartitionId` +* :c:func:`otThreadGetVersion` +* :c:func:`otThreadSetEnabled` +* :c:func:`otThreadSetLinkMode` +* :c:func:`otUdpBind` +* :c:func:`otUdpClose` +* :c:func:`otUdpConnect` +* :c:func:`otUdpNewMessage` +* :c:func:`otUdpOpen` +* :c:func:`otUdpSend` + +The libraries will be extended to support more functions in the future. + +Dependencies +************ + +The libraries have the following dependencies: + + * :ref:`nrf_rpc` + * :ref:`ug_thread` + +.. _ot_rpc_api: + +API documentation +***************** + +This library does not define a new OpenThread API. +Please refer to `OpenThread Reference`_ for the OpenThread C API documentation. diff --git a/doc/nrf/libraries/networking/wifi_credentials.rst b/doc/nrf/libraries/networking/wifi_credentials.rst index ca12a94538fe..44141e62ad32 100644 --- a/doc/nrf/libraries/networking/wifi_credentials.rst +++ b/doc/nrf/libraries/networking/wifi_credentials.rst @@ -7,7 +7,7 @@ Wi-Fi credentials :local: :depth: 2 -The Wi-Fi credentials library provides means to load and store Wi-Fi network credentials. +The Wi-Fi credentials library provides means to load and store Wi-Fi® network credentials. Overview ******** diff --git a/doc/nrf/libraries/networking/wifi_mgmt_ext.rst b/doc/nrf/libraries/networking/wifi_mgmt_ext.rst index 9010c023bb88..48fe40d7ef7f 100644 --- a/doc/nrf/libraries/networking/wifi_mgmt_ext.rst +++ b/doc/nrf/libraries/networking/wifi_mgmt_ext.rst @@ -7,7 +7,7 @@ Wi-Fi management extension :local: :depth: 2 -The Wi-Fi management extension library adds an automatic connection feature to the Wi-Fi stack. +The Wi-Fi management extension library adds an automatic connection feature to the Wi-Fi® stack. Overview ******** diff --git a/doc/nrf/libraries/nfc/rpc/index.rst b/doc/nrf/libraries/nfc/rpc/index.rst new file mode 100644 index 000000000000..4c9bbef12ac0 --- /dev/null +++ b/doc/nrf/libraries/nfc/rpc/index.rst @@ -0,0 +1,95 @@ +.. _nfc_rpc: + +NFC Remote Procedure Call +######################### + +.. contents:: + :local: + :depth: 2 + +The :ref:`NFC ` Remote Procedure Call (RPC) solution is a set of libraries that allows using the NFC stack running entirely on a separate device or CPU. + +Overview +******** + +The solution allows calling the NFC API (both :ref:`Type 2 Tag ` and :ref:`Type 4 Tag `) on a different CPU or device. +This is accomplished by running the full NFC functionality on one device and serializing the API from another device. +Use this solution when you do not want your firmware to include the NFC stack, for example to offload the application CPU, save memory, or to be able to build your application in a different environment. + +Implementation +============== + +The NFC RPC solution consists of the following components: + + * NFC RPC Client and common software libraries. + These libraries serialize the NFC API and enable RPC communication, and need to be part of the user application. + * NFC RPC Server, common libraries, and the Type 4 Tag library, Type 2 Tag library, or both. + These libraries enable communication with NFC RPC Client, and need to run on a device or CPU that has an NFC radio hardware peripheral. + +You can add support for serializing NFC-related custom APIs by implementing your own client and server procedures. +You can use the following files as examples: + + * :file:`subsys/nfc/rpc/client/nfc_rpc_t2t_client.c` + * :file:`subsys/nfc/rpc/server/nfc_rpc_t2t_server.c` + +Requirements +************ + +These configuration options must be enabled to use the library: + + * :kconfig:option:`CONFIG_NFC_RPC` + * :kconfig:option:`CONFIG_NFC_RPC_CLIENT` - for the NFC RPC client + * :kconfig:option:`CONFIG_NFC_RPC_SERVER` - for the NFC RPC server + +These configuration options related to NFC Data Exchange Format must be enabled on the client for the Type 4 Tag: + + * :kconfig:option:`CONFIG_NFC_NDEF` + * :kconfig:option:`CONFIG_NFC_NDEF_MSG` + * :kconfig:option:`CONFIG_NFC_NDEF_RECORD` + * :kconfig:option:`CONFIG_NFC_NDEF_TEXT_RECORD` + +These configuration options related to NFC must be enabled on the server: + + * :kconfig:option:`CONFIG_NFC_T2T_NRFXLIB` - for Type 2 Tag + * :kconfig:option:`CONFIG_NFC_T4T_NRFXLIB` - for Type 4 Tag + +Samples using the library +************************* + +The following |NCS| samples use this library: + +* :ref:`nrf_rpc_protocols_serialization_client` +* :ref:`nrf_rpc_protocols_serialization_server` + +Limitations +*********** + +The library currently supports serialization of the following: + + * :ref:`nrfxlib:type_2_tag` + * :ref:`nrfxlib:type_4_tag` + +The behavior of NFC with RPC is almost the same as without it, with the following exceptions: + + * Some NFC API functions get data by pointer, for example :c:func:`nfc_t4t_ndef_rwpayload_set`. + After calling the functions on the client, the data is sent to the server. + Any manipulation of data over the pointer will not affect the server's data instance. + * Even though the maximum payload for Type 4 Tag can be 65520 bytes, the real length is limited by :c:macro:`NDEF_FILE_SIZE`. + +Dependencies +************ + +The library has the following dependencies: + + * :ref:`nrf_rpc` + * :ref:`nfc` + +.. _nfc_rpc_api: + +API documentation +***************** + +This library does not define a new NFC API. + +| Header files: :file:`nrfxlib/nfc/include/nfc_t2t_lib.h`, :file:`nrfxlib/nfc/include/nfc_t4t_lib.h` +| Source files: :file:`subsys/nfc/rpc/` diff --git a/doc/nrf/libraries/nrf_rpc/nrf_rpc_dev_info.rst b/doc/nrf/libraries/nrf_rpc/nrf_rpc_dev_info.rst new file mode 100644 index 000000000000..4be628df0ce1 --- /dev/null +++ b/doc/nrf/libraries/nrf_rpc/nrf_rpc_dev_info.rst @@ -0,0 +1,24 @@ +.. _nrf_rpc_dev_info: + +nRF RPC device information +########################## + +.. contents:: + :local: + :depth: 2 + +This library allows you to obtain the device information functions of the :ref:`nrfxlib:nrf_rpc` on a remote server. + +Configuration +************* + +Use the :kconfig:option:`CONFIG_NRF_RPC_DEV_INFO` Kconfig option to enable this library. +To enable it for the client, use the :kconfig:option:`CONFIG_NRF_RPC_DEV_INFO_CLIENT` Kconfig option and respectively, +:kconfig:option:`CONFIG_NRF_RPC_DEV_INFO_SERVER` for the server. + +API documentation +***************** + +| Header file: :file:`include/nrf_rpc/nrf_rpc_dev_info.h` + +.. doxygengroup:: nrf_rpc_dev_info diff --git a/doc/nrf/libraries/nrf_rpc/nrf_rpc_uart.rst b/doc/nrf/libraries/nrf_rpc/nrf_rpc_uart.rst index 7d436dba55ee..bb0381bafcae 100644 --- a/doc/nrf/libraries/nrf_rpc/nrf_rpc_uart.rst +++ b/doc/nrf/libraries/nrf_rpc/nrf_rpc_uart.rst @@ -8,7 +8,23 @@ nRF RPC UART transport :depth: 2 The nRF RPC UART transport allows you to use the :ref:`nrf_rpc` library to execute procedures on a remote processor that is connected with the local processor using the UART interface. -This transport is used in the :ref:`nrf_rpc_ps_samples` samples. +This transport is used in the :ref:`nrf_rpc_ps_samples`. + +Configuration +************* + +Use the :kconfig:option:`CONFIG_NRF_RPC_UART_TRANSPORT` Kconfig option to enable the nRF RPC UART transport. + +Define the ``nordic,rpc-uart`` property in a devicetree overlay file. +The property is used to select the UART peripheral that is used by the API serialization libraries within the |NCS|, such as :ref:`ble_rpc` or :ref:`nfc_rpc`. + +.. code-block:: devicetree + + / { + chosen { + nordic,rpc-uart = &uart1; + }; + }; Frame encoding ************** @@ -17,22 +33,21 @@ Frame encoding The current frame format is experimental and is a subject to change. -An nRF RPC packet that is sent using the nRF RPC UART transport is encoded within a frame whose format resembles the one used by the HDLC protocol. - -Each frame shall start and end with the **delimiter** octet (``0b01111110`` = ``0x7e``). -Each two subsequent frames may be separated by more than one delimiter octet. +An nRF RPC packet that is sent using the nRF RPC UART transport is encoded within a frame whose format resembles the one used by the HDLC protocol: -Each byte of the nRF RPC packet shall be encoded according to the following rules: +* Each frame shall start and end with the **delimiter** octet (``0b01111110`` = ``0x7e``). +* Each two subsequent frames may be separated by more than one delimiter octet. +* Each byte of the nRF RPC packet shall be encoded according to the following rules: -* If the byte matches one of the :ref:`special octets `, it shall be encoded as the following two octets: + * If the byte matches one of the :ref:`special octets `, it shall be encoded as the following two octets: - * the **escape** octet (``0x7d``), - * the input byte XORed with ``0x20``. + * the **escape** octet (``0x7d``), + * the input byte XORed with ``0x20``. -* Otherwise, the byte shall be encoded into a frame’s octet without changes. + * Otherwise, the byte shall be encoded into a frame’s octet without changes. -The last two bytes of the frame contain the nRF RPC packet checksum, in little-endian byte order. -The checksum is calculated using the CRC16_CCITT function with the initial value ``0xffff``. +* The last two bytes of the frame contain the nRF RPC packet checksum, in little-endian byte order. + The checksum is calculated using the CRC16_CCITT function with the initial value ``0xffff``. .. _nrf_rpc_uart_special_octets: @@ -67,6 +82,25 @@ Then the following octets are transmitted over the UART interface: 7e 80 01 ff 00 00 61 7d 5e f6 6d 72 7e +Reliability +*********** + +When the :kconfig:option:`CONFIG_NRF_RPC_UART_RELIABLE` Kconfig option is selected, the nRF RPC UART transport enables the reliability feature. + +The reliability feature introduces the following changes to the transport protocol: + +* The receiver of a valid frame acknowledges the frame by replying to the sender with the frame's checksum field. +* If a sender has not received an acknowledgment within a certain time, it retransmits the frame. + The time (in milliseconds) is defined using the :kconfig:option:`CONFIG_NRF_RPC_UART_ACK_WAITING_TIME` Kconfig option. +* If the sender has not received an acknowledgment after a certain number of attempts, it gives up and reports the transmission error. + The number of attempts is defined using the :kconfig:option:`CONFIG_NRF_RPC_UART_TX_ATTEMPTS` Kconfig option. +* The frame's checksum field is composed of two values: + + * the most significant bit is the sequence bit that is flipped by the sender for each new transmission. + * the remaining bits are 15 least significant bits of the nRF RPC packet checksum. + +* If the received frame has the same checksum field as the previous one, it is rejected as a duplicate. + API documentation ***************** diff --git a/doc/nrf/libraries/others/contin_array.rst b/doc/nrf/libraries/others/contin_array.rst index b48f71df6040..9c2ae9661623 100644 --- a/doc/nrf/libraries/others/contin_array.rst +++ b/doc/nrf/libraries/others/contin_array.rst @@ -11,7 +11,7 @@ The continuous array library introduces an array that you can loop over, for exa You can use it to test playback with applications that support audio development kits, for example the :ref:`nrf53_audio_app`. The library introduces the :c:func:`contin_array_create` function, which takes an array that the user wants to loop over. -For more information, see `API documentation`_. +For more information, see the following API documentation section. Configuration ************* diff --git a/doc/nrf/libraries/others/data_fifo.rst b/doc/nrf/libraries/others/data_fifo.rst index b8e4b5b2252f..1daba2e44e15 100644 --- a/doc/nrf/libraries/others/data_fifo.rst +++ b/doc/nrf/libraries/others/data_fifo.rst @@ -10,7 +10,7 @@ Data FIFO This library combines the Zephyr memory slab and message queue mechanisms. The purpose is to be able to allocate a memory slab, use it, and signal to a receiver when the write operation has completed. The reader can then read and free the memory slab when done. -For more information, see `API documentation`_. +For more information, see the following API documentation section. Configuration ************* diff --git a/doc/nrf/libraries/others/date_time.rst b/doc/nrf/libraries/others/date_time.rst index 456715cd6de9..2d4a669a2ec8 100644 --- a/doc/nrf/libraries/others/date_time.rst +++ b/doc/nrf/libraries/others/date_time.rst @@ -34,7 +34,7 @@ If all time requests fail and the :kconfig:option:`CONFIG_DATE_TIME_RETRY_COUNT` The interval before each retry is defined by the :kconfig:option:`CONFIG_DATE_TIME_RETRY_INTERVAL_SECONDS` Kconfig option, and the :kconfig:option:`CONFIG_DATE_TIME_RETRY_COUNT` Kconfig option sets how many consecutive retries are attempted before giving up. If the :kconfig:option:`CONFIG_DATE_TIME_UPDATE_INTERVAL_SECONDS` Kconfig option is greater than zero, periodic updates at the defined interval resume after all retries have been attempted. -The current date-time information is stored as Zephyr time when it has been retrieved and hence, applications can also get the time using the POSIX function ``clock_gettime``. +The current date-time information is stored as Zephyr time when it has been retrieved and hence, applications can also get the time using the POSIX function ``clock_gettime()``. It is also stored as modem time if the modem does not have valid time. Implementation @@ -47,7 +47,7 @@ The option :kconfig:option:`CONFIG_DATE_TIME_AUTO_UPDATE` determines whether dat Libraries that require date-time information can just enable this library to get updated time information. Applications do not need to do anything to trigger time update when they start because this library handles it automatically. -Retrieving date-time information using the POSIX function ``clock_gettime`` is encouraged when feasible. +Retrieving date-time information using the POSIX function ``clock_gettime()`` is encouraged when feasible. You can obtain the information also from the library by calling either the :c:func:`date_time_uptime_to_unix_time_ms` function or the :c:func:`date_time_now` function. See the API documentation for more information on these functions. diff --git a/doc/nrf/libraries/others/dm.rst b/doc/nrf/libraries/others/dm.rst index 457832c97e4f..3a809dee1a00 100644 --- a/doc/nrf/libraries/others/dm.rst +++ b/doc/nrf/libraries/others/dm.rst @@ -39,8 +39,8 @@ To use the Distance Measurement module, complete the following steps: 1. Enable the :kconfig:option:`CONFIG_DM_MODULE` Kconfig option. #. Set the ``ncs,dm-timer`` :ref:`chosen node ` to the TIMER peripheral you wish this module to use. #. Include :file:`dm.h` in your :file:`main.c` file. -#. Call :c:func:`dm_init()` to initialize the module. -#. Call :c:func:`dm_request_add()` to perform the measurement. +#. Call :c:func:`dm_init` to initialize the module. +#. Call :c:func:`dm_request_add` to perform the measurement. For example, to use the ``TIMER2`` peripheral, set ``ncs,dm-timer`` as follows in a devicetree overlay: diff --git a/doc/nrf/libraries/others/dult.rst b/doc/nrf/libraries/others/dult.rst index 5a403fed03e9..a754129532a2 100644 --- a/doc/nrf/libraries/others/dult.rst +++ b/doc/nrf/libraries/others/dult.rst @@ -44,6 +44,25 @@ The following Kconfig options are also available for this module: * :kconfig:option:`CONFIG_DULT_BT_ANOS_INDICATION_COUNT` - This option allows to configure the number of simultaneously processed GATT indications by the ANOS. The default value is set to ``2``. +* :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR` - This option enables support for motion detector. + The motion detector is an optional feature in the DULT specification. + For more details see the `DULT motion detector`_ section of the DULT specification. + This option is disabled by default. + + * :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_TEST_MODE` - This option allows to configure motion detector parameters for testing purposes. + These values are defined in the DULT specification and should not be changed in the production code. + This option is disabled by default. + + * :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_BACKOFF_PERIOD` - This option allows to configure the period in minutes to disable the motion detector if the accessory is in the separated state. + If this option is configurable, its default value is set to ``2``. + Otherwise, its default value is set to ``360`` according to the DULT specification. + * :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MIN` - This option allows to configure the minimum time span in minutes in separated state before enabling motion detector. + If this option is configurable, its default value is set to ``3``. + Otherwise, its default value is set to ``480`` according to the DULT specification. + * :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR_SEPARATED_UT_TIMEOUT_PERIOD_MAX` - This option allows to configure the maximum time span in minutes in separated state before enabling motion detector. + If this option is configurable, its default value is set to ``3``. + Otherwise, its default value is set to ``1440`` according to the DULT specification. + See the Kconfig help for details. Implementation details diff --git a/doc/nrf/libraries/others/emds.rst b/doc/nrf/libraries/others/emds.rst index b95bbe247b2f..6582606ba54d 100644 --- a/doc/nrf/libraries/others/emds.rst +++ b/doc/nrf/libraries/others/emds.rst @@ -7,36 +7,34 @@ Emergency data storage :local: :depth: 2 -Overview -******** -The emergency data storage (EMDS) library provides persistent storage functionality designed to prevent the wear and tear of the flash memory. +The emergency data storage (EMDS) library provides persistent storage functionality designed to prevent the wear and tear of the flash memory or RRAM (persistent memory). Its intended use is for storing of data undergoing frequent changes during runtime. Implementation -============== +************** The :kconfig:option:`CONFIG_EMDS` Kconfig option enables the emergency data storage. -The application must initialize the pre-allocated flash area by using the :c:func:`emds_init` function. +The application must initialize the pre-allocated storage area by using the :c:func:`emds_init` function. The :kconfig:option:`CONFIG_EMDS_SECTOR_COUNT` option defines how many sectors should be used to store data. The allocated storage space must be larger than the combined data stored by the application. -Allocating a larger flash area will demand more resources, but also increase the life expectancy of the flash. -The chosen size should reflect the amount of data stored, the available flash resources, and how the application calls the :c:func:`emds_store` function. -In general, it should not be necessary to allocate a large flash area, since only a limited set of data should be stored to ensure swift completion of writing the flash on shutdown. +Allocating a larger storage area will demand more resources, but also increase the life expectancy of the persistent memory. +The chosen size should reflect the amount of data stored, the available persistent memory and how the application calls the :c:func:`emds_store` function. +In general, it should not be necessary to allocate a large storage area, since only a limited set of data should be stored to ensure swift completion of writing the data on shutdown. The memory location that is going to be stored must be added on initialization. All memory areas must be provided through entries containing an ID, data pointer, and data length, using the :c:func:`emds_entry_add` function and the :c:macro:`EMDS_STATIC_ENTRY_DEFINE` macro. Entries to be stored when the emergency data storage is triggered need their own unique IDs that are not changed after a reboot. -When all entries are added, the :c:func:`emds_load` function restores the entries into the memory areas from the flash. +When all entries are added, the :c:func:`emds_load` function restores the entries into the memory areas from the persistent memory. -After restoring the previous data, the application must run the :c:func:`emds_prepare` function to prepare the flash area for receiving new entries. -If the remaining empty flash area is smaller than the required data size, the flash area will be automatically erased to increase the available flash area. +After restoring the previous data, the application must run the :c:func:`emds_prepare` function to prepare the storage area for receiving new entries. +If the remaining empty storage area is smaller than the required data size, the storage area will be automatically erased to increase the available storage area. The storage is done in deterministic time, so it is possible to know how long it takes to store all registered entries. However, this is chip-dependent, so it is important to measure the time. Find timing values under the "Electrical specification" section for the non-volatile memory controller in the Product Specification for the relevant SoC or the SiP you are using. -For example, for the nRF9160 SiP, see the `Electrical specification of nRF9160`_ page. +For example, for the nRF52840 SiP, see the `nRF52840 Product Specification`_ page. The following Kconfig options can be configured: @@ -44,10 +42,12 @@ The following Kconfig options can be configured: * :kconfig:option:`CONFIG_EMDS_FLASH_TIME_ENTRY_OVERHEAD_US` * :kconfig:option:`CONFIG_EMDS_FLASH_TIME_BASE_OVERHEAD_US` -When configuring these values, consider the time for erase when doing garbage collection in NVS. +When configuring these values, consider the time for erase when doing garbage collection in NVS using flash. If partial erase is not enabled or supported, the time of a complete sector erase has to be included in the :kconfig:option:`CONFIG_EMDS_FLASH_TIME_BASE_OVERHEAD_US`. When partial erase is enabled and supported by the hardware, include the time it takes for the scheduler to trigger, which is depending on the time defined in :kconfig:option:`CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE_MS`. When changing the :kconfig:option:`CONFIG_EMDS_FLASH_TIME_BASE_OVERHEAD_US` option, it is important that the worst time is considered. +When configuring these values using RRAM, you do not need to consider garbage collection in the same way as for flash, as it can be written to regardless of value. +However, avoid the ERASEALL functionality, because that can increase the time before the EMDS store functions are called. The application must call the :c:func:`emds_store` function to store all entries. This can only be done once, before the :c:func:`emds_prepare` function must be called again. @@ -64,7 +64,7 @@ The :c:func:`emds_is_ready` function can be called to check if EMDS is prepared Once the data storage has completed, a callback is called if provided in :c:func:`emds_init`. This callback notifies the application that the data storage has completed, and can be used to reboot the CPU or execute another function that is needed. -After completion of :c:func:`emds_store`, the :c:func:`emds_is_ready` function call will return error, since it can no longer guarantee that the data will fit into the flash area. +After completion of :c:func:`emds_store`, the :c:func:`emds_is_ready` function call will return an error, because it can no longer guarantee that the data will fit into the persistent memory area. The above described process is summarized in a message sequence diagram. @@ -90,7 +90,7 @@ The above described process is summarized in a message sequence diagram. Requirements ************ -To prevent frequent writes to flash memory, the EMDS library can write data to flash only when the device is shutting down. +To prevent frequent writes to persistent memory, the EMDS library can write data only when the device is shutting down. EMDS restores the application data to RAM at reboot. EMDS can store data within a guaranteed time, based on the amount of data being stored. @@ -128,9 +128,9 @@ The :c:func:`emds_store_time_get` function estimates the required worst-case tim t_\text{store} = t_\text{base} + \sum_{i = 1}^n \left(t_\text{entry} + t_\text{word}\left(\left\lceil\frac{s_\text{ate}}{s_\text{block}}\right\rceil + \left\lceil\frac{s_i}{s_\text{block}}\right\rceil \right)\right) where :math:`t_\text{base}` is the value specified by :kconfig:option:`CONFIG_EMDS_FLASH_TIME_BASE_OVERHEAD_US`, :math:`t_\text{entry}` is the value specified by :kconfig:option:`CONFIG_EMDS_FLASH_TIME_ENTRY_OVERHEAD_US` and :math:`t_\text{word}` is the value specified by :kconfig:option:`CONFIG_EMDS_FLASH_TIME_WRITE_ONE_WORD_US`. -:math:`s_i` is the size of the :math:`i`\ th entry in bytes and :math:`s_\text{block}` is the number of bytes in one word of flash. +:math:`s_i` is the size of the :math:`i`\ th entry in bytes and :math:`s_\text{block}` is the number of bytes in one word (4 bytes) of flash or the write-buffer size (16 bytes) of RRAM. These can be found by looking at datasheets, driver documentation, and the configuration of the application. -:math:`s_\text{ate}` is the size of the allocation table entry used by the EMDS flash module, which is 8 B. +:math:`s_\text{ate}` is the size of the allocation table entry used by the EMDS, which is 8 B. Example of time estimation ========================== @@ -157,7 +157,7 @@ Calling the :c:func:`emds_store_time_get` function in the sample automatically c Limitations *********** - The power-fail comparator for the nRF528xx cannot be used with EMDS, as it will prevent the NVMC from performing write operations to flash. + The power-fail comparator cannot be active when EMDS is used, as it will prevent the NVMC or RRAMC from performing write operations to persistent memory. Dependencies ************ diff --git a/doc/nrf/libraries/others/pcm_stream_channel_modifier.rst b/doc/nrf/libraries/others/pcm_stream_channel_modifier.rst index 32c2d5b215a9..8c08080327a3 100644 --- a/doc/nrf/libraries/others/pcm_stream_channel_modifier.rst +++ b/doc/nrf/libraries/others/pcm_stream_channel_modifier.rst @@ -8,7 +8,7 @@ PCM Stream Channel Modifier :depth: 2 PCM Stream Channel Modifier library enables users to split pulse-code modulation (PCM) streams from stereo to mono or combine mono streams to form a stereo stream. -For more information, see `API documentation`_. +For more information, see the following API documentation section. Configuration ************* diff --git a/doc/nrf/libraries/others/tone.rst b/doc/nrf/libraries/others/tone.rst index 40853caf1b96..671130107ad6 100644 --- a/doc/nrf/libraries/others/tone.rst +++ b/doc/nrf/libraries/others/tone.rst @@ -8,7 +8,7 @@ Tone generator :depth: 2 The tone generator library creates an array of pulse-code modulation (PCM) data of a one-period sine tone, with a given tone frequency and sampling frequency. -For more information, see `API documentation`_. +For more information, see the following API documentation section. Configuration ************* diff --git a/doc/nrf/libraries/security/bootloader/fw_info.rst b/doc/nrf/libraries/security/bootloader/fw_info.rst index 053d54576bf5..211610263b55 100644 --- a/doc/nrf/libraries/security/bootloader/fw_info.rst +++ b/doc/nrf/libraries/security/bootloader/fw_info.rst @@ -17,10 +17,10 @@ Purpose The purpose of the firmware information is to allow other images such as bootloaders, or infrastructure such as firmware servers, to gain information about the firmware image. The firmware information structure has a 12-byte magic header and a verified binary layout to ensure that the format is portable and identifiable. -It must be located at one of the following offsets from the start of the image: 0x0, 0x200, 0x400, 0x800, 0x1000. +It must be located at one of the following offsets from the start of the image: 0x0, 0x200, 0x400, 0x600, 0x800, 0xe00, 0x1000. The reason that the structure is not located at 0x00 is that this can be problematic in some use cases, such as when the vector table must be located at 0x00. -These rules make it simple to retrieve the information by checking for each possible offset (0x0, 0x200, 0x400, 0x800, 0x1000) if the first 12 bytes match the magic value. +These rules make it simple to retrieve the information by checking for each possible offset (0x0, 0x200, 0x400, 0x600, 0x800, 0xe00, 0x1000) if the first 12 bytes match the magic value. If they do, the information can be retrieved according to the definition in :c:struct:`fw_info`. Information structure diff --git a/doc/nrf/libraries/security/fatal_error.rst b/doc/nrf/libraries/security/fatal_error.rst index aec72d136987..2afd6f3194a1 100644 --- a/doc/nrf/libraries/security/fatal_error.rst +++ b/doc/nrf/libraries/security/fatal_error.rst @@ -12,13 +12,13 @@ The |NCS| provides an implementation of the fatal error handler that overrides Z Overview ******** -The library defines the :c:func:`k_sys_fatal_error_handler()` function, which is declared in Zephyr's :ref:`fatal error handling API `. +The library defines the :c:func:`k_sys_fatal_error_handler` function, which is declared in Zephyr's :ref:`fatal error handling API `. Its implementation in the |NCS| is standardized for most samples. Configuration ************* -When building for an embedded target, the default behavior of the :c:func:`k_sys_fatal_error_handler()` function in case of a fatal error is to reboot the application. +When building for an embedded target, the default behavior of the :c:func:`k_sys_fatal_error_handler` function in case of a fatal error is to reboot the application. You can modify the default behavior of the library not to reboot the application. To have the application enter an endless loop, change the :kconfig:option:`CONFIG_RESET_ON_FATAL_ERROR` Kconfig option to ``n``. diff --git a/doc/nrf/libraries/security/nrf_security/doc/backend_config.rst b/doc/nrf/libraries/security/nrf_security/doc/backend_config.rst index 29bb8c413e83..d3a00c45d97e 100644 --- a/doc/nrf/libraries/security/nrf_security/doc/backend_config.rst +++ b/doc/nrf/libraries/security/nrf_security/doc/backend_config.rst @@ -10,6 +10,13 @@ Legacy configurations and supported features This section covers the configurations available when using :ref:`legacy_crypto_support`. +.. caution:: + Legacy crypto toolbox APIs are marked as deprecated in the |NCS| version 2.8.0, and will be removed in a future version. + It is not recommended to use the legacy crypto toolbox APIs and the related configurations in any new designs. + +.. note:: + Legacy crypto toolbox APIs are not supported on nRF54L Series devices. + .. _nrf_security_backend_config_multiple: Configuring backends diff --git a/doc/nrf/libraries/security/nrf_security/doc/configuration.rst b/doc/nrf/libraries/security/nrf_security/doc/configuration.rst index 100653336975..d77bb81b3924 100644 --- a/doc/nrf/libraries/security/nrf_security/doc/configuration.rst +++ b/doc/nrf/libraries/security/nrf_security/doc/configuration.rst @@ -19,25 +19,27 @@ PSA crypto support is included by default when you enable nRF Security through t PSA crypto support is provided through PSA Crypto APIs and is implemented by PSA core. PSA core uses PSA drivers to implement the cryptographic features either in software, or using hardware accelerators. -.. caution:: - The PSA Crypto APIs are only thread safe when provided by TF-M. - .. _legacy_crypto_support: Legacy crypto support ********************* -To enable the legacy crypto support mode of nRF Security, set both the :kconfig:option:`CONFIG_NORDIC_SECURITY_BACKEND` and :kconfig:option:`CONFIG_NRF_SECURITY` Kconfig options along with additional configuration options, as described in :ref:`nrf_security_legacy_config`. +To enable the legacy crypto support mode of nRF Security, set the :kconfig:option:`CONFIG_NORDIC_SECURITY_BACKEND` Kconfig option along with additional configuration options, as described in :ref:`nrf_security_legacy_config`. The legacy crypto support allows backwards compatibility for software that requires usage of Mbed TLS crypto toolbox functions prefixed with ``mbedtls_``. +.. caution:: + Mbed TLS legacy crypto toolbox APIs are marked as deprecated in the |NCS| version 2.8.0, and will be removed in a future version. + It is not recommended to use crypto toolbox functions prefixed with ``mbedtls_`` for any new designs. + Use the equivalent functionality from PSA crypto APIs instead. + + Setting the Kconfig option :kconfig:option:`CONFIG_NORDIC_SECURITY_BACKEND` will also enable the Kconfig option :kconfig:option:`MBEDTLS_LEGACY_CRYPTO_C`, which will show a deprecation warning in the build output. + Use the Kconfig option :kconfig:option:`CONFIG_NRF_SECURITY` instead. + Custom Mbed TLS configuration files *********************************** The nRF Security Kconfig options are used to generate an Mbed TLS configuration file. -Although not recommended, it is possible to provide a custom Mbed TLS configuration file by disabling :kconfig:option:`CONFIG_GENERATE_MBEDTLS_CFG_FILE`. -See :ref:`nrf_security_tls_header`. - Building with TF-M ****************** diff --git a/doc/nrf/libraries/security/nrf_security/doc/driver_config.rst b/doc/nrf/libraries/security/nrf_security/doc/driver_config.rst index 686ba4876cfd..9902632f82df 100644 --- a/doc/nrf/libraries/security/nrf_security/doc/driver_config.rst +++ b/doc/nrf/libraries/security/nrf_security/doc/driver_config.rst @@ -23,10 +23,10 @@ To enable a PSA driver, set the configurations in the following table: +===============+==================================================+=====================================================+ | nrf_cc3xx | :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_CC3XX` | Only on nRF52840, nRF91 Series, and nRF5340 devices | +---------------+--------------------------------------------------+-----------------------------------------------------+ -| nrf_oberon | :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_OBERON`| | -+---------------+--------------------------------------------------+-----------------------------------------------------+ | nrf_cracen | :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_CRACEN`| Only on nRF54L Series devices | +---------------+--------------------------------------------------+-----------------------------------------------------+ +| nrf_oberon | :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_OBERON`| | ++---------------+--------------------------------------------------+-----------------------------------------------------+ If multiple drivers are enabled, the first ordered item in this table takes precedence for an enabled cryptographic feature, unless the driver does not enable or support it. @@ -106,7 +106,9 @@ The following table shows key type support for each driver: | DH Public Key | Not supported | Not supported | Not supported | +-----------------------+---------------------------+----------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_KEY_MANAGEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported key types. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_KEY_MANAGEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported key types. + +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_KEY_MANAGEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported key types. Cipher configurations ********************* @@ -122,12 +124,8 @@ To enable cipher modes, set one or more of the Kconfig options in the following +-----------------------+------------------------------------------------------+ | CBC PKCS#7 padding | :kconfig:option:`CONFIG_PSA_WANT_ALG_CBC_PKCS7` | +-----------------------+------------------------------------------------------+ -| CFB | :kconfig:option:`CONFIG_PSA_WANT_ALG_CFB` | -+-----------------------+------------------------------------------------------+ | CTR | :kconfig:option:`CONFIG_PSA_WANT_ALG_CTR` | +-----------------------+------------------------------------------------------+ -| OFB | :kconfig:option:`CONFIG_PSA_WANT_ALG_OFB` | -+-----------------------+------------------------------------------------------+ | CCM* no tag | :kconfig:option:`CONFIG_PSA_WANT_ALG_CCM_STAR_NO_TAG`| +-----------------------+------------------------------------------------------+ | XTS | :kconfig:option:`CONFIG_PSA_WANT_ALG_XTS` | @@ -149,12 +147,8 @@ The following table shows cipher algorithm support for each driver: +-----------------------+---------------------------+----------------------------+---------------------------+ | CBC PKCS#7 padding | Supported | Supported | Supported | +-----------------------+---------------------------+----------------------------+---------------------------+ -| CFB | Not supported | Not supported | Not supported | -+-----------------------+---------------------------+----------------------------+---------------------------+ | CTR | Supported | Supported | Supported | +-----------------------+---------------------------+----------------------------+---------------------------+ -| OFB | Supported | Not supported | Supported | -+-----------------------+---------------------------+----------------------------+---------------------------+ | CCM* no tag | Not supported | Supported | Not supported | +-----------------------+---------------------------+----------------------------+---------------------------+ | XTS | Not supported | Not supported | Not supported | @@ -162,10 +156,12 @@ The following table shows cipher algorithm support for each driver: | Stream cipher | Supported | Supported | Supported | +-----------------------+---------------------------+----------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_CIPHER_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_CIPHER_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. The configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `Cipher configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_CIPHER_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. + Key size configuration is supported as described in `AES key size configuration`_, for all algorithms except the stream cipher. .. note:: @@ -197,7 +193,9 @@ The following table shows Key agreement support for each driver: | FFDH | Not supported | Not supported | Not supported | +-------------------------+---------------------------+----------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_KEY_AGREEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_KEY_AGREEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. + +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_KEY_AGREEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. The algorithm support when using ECC key types is dependent on one or more Kconfig options enabling curve support according to `ECC curve configurations`_. @@ -209,25 +207,27 @@ Key derivation function configurations To enable key derivation function (KDF) support, set one or more of the Kconfig options in the following table: -+--------------------------+---------------------------------------------------------------+ -| KDF algorithm | Configuration option | -+==========================+===============================================================+ -| HKDF | :kconfig:option:`CONFIG_PSA_WANT_ALG_HKDF` | -+--------------------------+---------------------------------------------------------------+ -| HKDF-Extract | :kconfig:option:`CONFIG_PSA_WANT_ALG_HKDF_EXTRACT` | -+--------------------------+---------------------------------------------------------------+ -| HKDF-Expand | :kconfig:option:`CONFIG_PSA_WANT_ALG_HKDF_EXPAND` | -+--------------------------+---------------------------------------------------------------+ -| PBKDF2-HMAC | :kconfig:option:`CONFIG_PSA_WANT_ALG_PBKDF2_HMAC` | -+--------------------------+---------------------------------------------------------------+ -| PBKDF2-AES-CMAC-PRF-128 | :kconfig:option:`CONFIG_PSA_WANT_ALG_PBKDF2_AES_CMAC_PRF_128` | -+--------------------------+---------------------------------------------------------------+ -| TLS 1.2 PRF | :kconfig:option:`CONFIG_PSA_WANT_ALG_TLS12_PRF` | -+--------------------------+---------------------------------------------------------------+ -| TLS 1.2 PSK to MS | :kconfig:option:`CONFIG_PSA_WANT_ALG_TLS12_PSK_TO_MS` | -+--------------------------+---------------------------------------------------------------+ -| TLS 1.2 EC J-PAKE to PMS | :kconfig:option:`CONFIG_PSA_WANT_ALG_TLS12_ECJPAKE_TO_PMS` | -+--------------------------+---------------------------------------------------------------+ ++-----------------------------+---------------------------------------------------------------+ +| KDF algorithm | Configuration option | ++=============================+===============================================================+ +| HKDF | :kconfig:option:`CONFIG_PSA_WANT_ALG_HKDF` | ++-----------------------------+---------------------------------------------------------------+ +| HKDF-Extract | :kconfig:option:`CONFIG_PSA_WANT_ALG_HKDF_EXTRACT` | ++-----------------------------+---------------------------------------------------------------+ +| HKDF-Expand | :kconfig:option:`CONFIG_PSA_WANT_ALG_HKDF_EXPAND` | ++-----------------------------+---------------------------------------------------------------+ +| PBKDF2-HMAC | :kconfig:option:`CONFIG_PSA_WANT_ALG_PBKDF2_HMAC` | ++-----------------------------+---------------------------------------------------------------+ +| PBKDF2-AES-CMAC-PRF-128 | :kconfig:option:`CONFIG_PSA_WANT_ALG_PBKDF2_AES_CMAC_PRF_128` | ++-----------------------------+---------------------------------------------------------------+ +| TLS 1.2 PRF | :kconfig:option:`CONFIG_PSA_WANT_ALG_TLS12_PRF` | ++-----------------------------+---------------------------------------------------------------+ +| TLS 1.2 PSK to MS | :kconfig:option:`CONFIG_PSA_WANT_ALG_TLS12_PSK_TO_MS` | ++-----------------------------+---------------------------------------------------------------+ +| TLS 1.2 EC J-PAKE to PMS | :kconfig:option:`CONFIG_PSA_WANT_ALG_TLS12_ECJPAKE_TO_PMS` | ++-----------------------------+---------------------------------------------------------------+ +| SP 800-108r1 CMAC w/counter | :kconfig:option:`CONFIG_PSA_WANT_ALG_SP800_108_COUNTER_CMAC` | ++-----------------------------+---------------------------------------------------------------+ Key derivation function support @@ -235,28 +235,32 @@ Key derivation function support The following table shows key derivation function (KDF) support for each driver: -+--------------------------+--------------------------+----------------------------+---------------------------+ -| KDF algorithm | nrf_cc3xx driver support | nrf_oberon driver support | nrf_cracen driver support | -+==========================+==========================+============================+===========================+ -| HKDF | Not supported | Supported | Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ -| HKDF-Extract | Not supported | Supported | Not Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ -| HKDF-Expand | Not supported | Supported | Not Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ -| PBKDF2-HMAC | Not supported | Supported | Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ -| PBKDF2-AES-CMAC-PRF-128 | Not supported | Supported | Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ -| TLS 1.2 PRF | Not supported | Supported | Not Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ -| TLS 1.2 PSK to MS | Not supported | Supported | Not Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ -| TLS 1.2 EC J-PAKE to PMS | Not supported | Supported | Supported | -+--------------------------+--------------------------+----------------------------+---------------------------+ ++------------------------------+--------------------------+----------------------------+---------------------------+ +| KDF algorithm | nrf_cc3xx driver support | nrf_oberon driver support | nrf_cracen driver support | ++==============================+==========================+============================+===========================+ +| HKDF | Not supported | Supported | Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| HKDF-Extract | Not supported | Supported | Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| HKDF-Expand | Not supported | Supported | Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| PBKDF2-HMAC | Not supported | Supported | Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| PBKDF2-AES-CMAC-PRF-128 | Not supported | Supported | Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| TLS 1.2 PRF | Not supported | Supported | Not Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| TLS 1.2 PSK to MS | Not supported | Supported | Not Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| TLS 1.2 EC J-PAKE to PMS | Not supported | Supported | Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ +| SP 800-108r1 CMAC w/counter | Not supported | Not supported | Supported | ++------------------------------+--------------------------+----------------------------+---------------------------+ The configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `Key derivation function configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_KEY_DERIVATION_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. + MAC configurations ****************** @@ -287,10 +291,12 @@ The following table shows MAC algorithm support for each driver: | CBC-MAC | Not supported | Not supported | Not Supported | +----------------+--------------------------+----------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_MAC_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_MAC_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. The configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `MAC configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_MAC_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. + Key size configuration for CMAC is supported as described in `AES key size configuration`_. .. note:: @@ -327,10 +333,12 @@ The following table shows AEAD algorithm support for each driver: | ChaCha20-Poly1305 | Supported | Supported | Supported | +-----------------------+---------------------------+---------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_AEAD_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_AEAD_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. Configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `AEAD configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_AEAD_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. + Key size configuration for CCM and GCM is supported as described in `AES key size configuration`_. .. note:: @@ -383,7 +391,7 @@ The following table shows asymmetric signature algorithm support for each driver +---------------------------------+---------------------------+----------------------------+---------------------------+ | PureEdDSA | Supported | Supported | Supported | +---------------------------------+---------------------------+----------------------------+---------------------------+ -| HashEdDSA Edwards25519 | Not supported | Not supported | Not supported | +| HashEdDSA Edwards25519 | Not supported | Not supported | Supported | +---------------------------------+---------------------------+----------------------------+---------------------------+ | HashEdDSA Edwards448 | Not supported | Not supported | Not supported | +---------------------------------+---------------------------+----------------------------+---------------------------+ @@ -396,9 +404,11 @@ The following table shows asymmetric signature algorithm support for each driver | RSA PSS any salt | Not supported | Supported | Not Supported | +---------------------------------+---------------------------+----------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_ASYMMETRIC_SIGNATURE_DRIVER` enables the driver :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_ASYMMETRIC_SIGNATURE_DRIVER` enables the driver :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. + +Configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `Asymmetric signature configurations`_. -Configuration of the :ref:`nrf_security_drivers_oberon` driver is automatically generated based on the user-enabled algorithms in `Asymmetric signature configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_ASYMMETRIC_SIGNATURE_DRIVER` enables the driver :ref:`nrf_security_drivers_cracen` for all supported algorithms. The algorithm support when using ECC key types is dependent on one or more Kconfig options enabling curve support according to `ECC curve configurations`_. @@ -436,10 +446,12 @@ The following table shows asymmetric encryption algorithm support for each drive | RSA PKCS#1 v1.5 crypt | Supported | Supported | Supported | +---------------------------------+---------------------------+----------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_ASYMMETRIC_ENCRYPTION_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_ASYMMETRIC_ENCRYPTION_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. Configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `Asymmetric encryption configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_ASYMMETRIC_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. + RSA key size configuration is supported as described in `RSA key size configuration`_. .. note:: @@ -596,7 +608,9 @@ The following table shows ECC curve support for each driver: | FRP256v1 | Not supported | Not supported | Not supported | +--------------------------+---------------------------+----------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_KEY_MANAGEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for key management using ECC curves. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_KEY_MANAGEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for key management using ECC curves. + +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_KEY_MANAGEMENT_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for key management using ECC curves. RNG configurations ****************** @@ -622,15 +636,16 @@ When RNG is enabled, set at least one of the configurations in the following tab RNG support =========== -There are no public configurations for entropy and PRNG algorithm support and the choice of drivers that provide support is automatic. - -The PSA drivers using the Arm CryptoCell peripheral is enabled by default for nRF52840, nRF91 Series, and nRF5340 devices. - -For devices without a hardware-accelerated cryptographic engine, entropy is provided by the nRF RNG peripheral. PRNG support is provided by the Oberon PSA driver, which is implemented using software. +The PSA drivers using the Arm CryptoCell peripheral are enabled by default for nRF52840, nRF91 Series, and nRF5340 devices. .. note:: When using CryptoCell, only 1024 bytes can be requested at a time. +For devices without a hardware-accelerated cryptographic engine, entropy is provided by the nRF RNG peripheral. +PRNG support is provided by the Oberon PSA driver, which is implemented using software. + +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_CTR_DRBG_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for the CTR-DRBG algorithm. + Hash configurations ******************* @@ -721,10 +736,12 @@ The following table shows hash algorithm support for each driver: | RIPEMD160 | Not supported | Not supported | Not supported | +-----------------------+----------------------------+---------------------------+---------------------------+ -The option :kconfig:option:`CONFIG_PSA_USE_CC3XX_HASH_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CC3XX_HASH_DRIVER` enables the :ref:`nrf_security_drivers_cc3xx` for all supported algorithms. The configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `Hash configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_HASH_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. + Password-authenticated key exchange configurations ************************************************** @@ -766,6 +783,8 @@ The following table shows PAKE algorithm support for each driver: Configuration of the :ref:`nrf_security_drivers_oberon` is automatically generated based on the user-enabled algorithms in `Password-authenticated key exchange configurations`_. +The Kconfig option :kconfig:option:`CONFIG_PSA_USE_CRACEN_PAKE_DRIVER` enables the :ref:`nrf_security_drivers_cracen` for all supported algorithms. + Key size configurations *********************** diff --git a/doc/nrf/libraries/security/nrf_security/doc/drivers.rst b/doc/nrf/libraries/security/nrf_security/doc/drivers.rst index 42d9d59cc0cc..92b18965fb3a 100644 --- a/doc/nrf/libraries/security/nrf_security/doc/drivers.rst +++ b/doc/nrf/libraries/security/nrf_security/doc/drivers.rst @@ -83,7 +83,7 @@ To enable the :ref:`nrf_oberon_readme` PSA driver, set the :kconfig:option:`CONF CRACEN driver ************* -The CRACEN driver provides entropy and hardware-accelerated cryptography using the CRACEN (Crypto Accelerator Engine) peripheral. +The CRACEN driver provides entropy and hardware-accelerated cryptography using the Crypto Accelerator Engine (CRACEN) peripheral. This driver is only available on nRF54L Series devices. Enabling the CRACEN driver @@ -93,6 +93,8 @@ The CRACEN driver can be enabled by setting the :kconfig:option:`CONFIG_PSA_CRYP The nrf_oberon driver may then be disabled by using the Kconfig option :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_OBERON` (``CONFIG_PSA_CRYPTO_DRIVER_OBERON=n``). +For more details on nRF54L Series cryptography operations and the related configuration, see :ref:`ug_nrf54l_cryptography`. + .. note:: On nRF54L Series devices, CRACEN is the only source of entropy. Therefore, it is not possible to disable the :kconfig:option:`CONFIG_PSA_CRYPTO_DRIVER_CRACEN` option when the Zephyr entropy driver is enabled. diff --git a/doc/nrf/libraries/security/nrf_security/index.rst b/doc/nrf/libraries/security/nrf_security/index.rst index e4f913496283..997ba32dde5d 100644 --- a/doc/nrf/libraries/security/nrf_security/index.rst +++ b/doc/nrf/libraries/security/nrf_security/index.rst @@ -5,7 +5,7 @@ nRF Security ############ The nRF Security subsystem (nrf_security) provides an integration between `Mbed TLS`_ and software libraries that provide hardware-accelerated cryptographic functionality on selected Nordic Semiconductor SoCs as well as alternate software-based implementations of the Mbed TLS APIs. -These libraries include the binary versions of accelerated cryptographic libraries listed in :ref:`nrfxlib:crypto`, and the open source Mbed TLS implementation in |NCS| located in `sdk-mbedtls`_. +These libraries include the binary versions of accelerated cryptographic libraries listed in :ref:`nrfxlib:crypto`, and the open source Mbed TLS implementation in the |NCS| located in `sdk-mbedtls`_. The subsystem includes a PSA driver abstraction layer to enable both hardware-accelerated and software-based implementation at the same time. The nRF Security subsystem can interface with the :ref:`nrf_cc3xx_mbedcrypto_readme`. diff --git a/doc/nrf/libraries/security/trusted_storage.rst b/doc/nrf/libraries/security/trusted_storage.rst index 0bec266211e3..7a9a02aa3d49 100644 --- a/doc/nrf/libraries/security/trusted_storage.rst +++ b/doc/nrf/libraries/security/trusted_storage.rst @@ -83,8 +83,11 @@ Before using the trusted storage library with its default settings and options, * The hardware unique key (HUK) :ref:`library ` and :ref:`sample ` are enabled and ready for use to derive an AEAD key. * Zephyr's settings subsystem has to be enabled for use by setting the Kconfig option :kconfig:option:`CONFIG_SETTINGS`. - * The settings subsystem uses the :ref:`zephyr:nvs_api` file system by default. - This file system has to be mounted to a mount point at application startup. For more information about this, see :ref:`zephyr:file_system_api`. + * The library supports two storage options for the settings subsystem, :ref:`zephyr:zms_api` and :ref:`zephyr:nvs_api`. + ZMS is the only allowed storage option for nRF54L Series devices, while other devices using the trusted storage library can choose between the two options. + * You have to mount the file system to a mount point at application startup. + For more information about how to do this, see :ref:`zephyr:file_system_api`. + Also, see the Mounting the Storage system section of the :ref:`ZMS documentation `. .. _trusted_storage_configuration: @@ -107,7 +110,7 @@ The following options are used to configure the AEAD backend and its behavior: :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_CRYPTO` Selects what implementation is used to perform the AEAD cryptographic operations. - This option defaults to :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_CRYPTO_PSA_CHACHAPOLY` using the ChaCha20Poly1305 AEAD scheme via PSA APIs. + This option defaults to :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_CRYPTO_PSA_CHACHAPOLY` using the ChaCha20Poly1305 AEAD scheme using PSA APIs. :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_NONCE` Selects what implementation provides AEAD nonce. diff --git a/doc/nrf/libraries/zigbee/index.rst b/doc/nrf/libraries/zigbee/index.rst index b6b20b4458ee..5bba1bae8a90 100644 --- a/doc/nrf/libraries/zigbee/index.rst +++ b/doc/nrf/libraries/zigbee/index.rst @@ -3,6 +3,8 @@ Libraries for Zigbee #################### +.. include:: /includes/zigbee_deprecation.txt + |zigbee_description| See the :ref:`ug_zigbee` user guide for an overview of the technology. diff --git a/doc/nrf/libraries/zigbee/osif.rst b/doc/nrf/libraries/zigbee/osif.rst index 50c90cf8b309..5f1653baa2fb 100644 --- a/doc/nrf/libraries/zigbee/osif.rst +++ b/doc/nrf/libraries/zigbee/osif.rst @@ -7,6 +7,8 @@ Zigbee ZBOSS OSIF :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The Zigbee ZBOSS OSIF layer subsystem acts as the linking layer between the :ref:`nrfxlib:zboss` and the |NCS|. .. _zigbee_osif_configuration: diff --git a/doc/nrf/libraries/zigbee/shell.rst b/doc/nrf/libraries/zigbee/shell.rst index 69eae788f91a..1cb92c79e20d 100644 --- a/doc/nrf/libraries/zigbee/shell.rst +++ b/doc/nrf/libraries/zigbee/shell.rst @@ -7,6 +7,8 @@ Zigbee shell :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The Zigbee shell library implements a set of Zigbee shell commands that allow you to control the device behavior and perform operations in the Zigbee network, such as steering the network, discovering devices, and reading the network properties. Enabling a device to work with these commands simplifies testing and debugging of an existing network and reduces the amount of reprogramming operations. diff --git a/doc/nrf/libraries/zigbee/zigbee_app_utils.rst b/doc/nrf/libraries/zigbee/zigbee_app_utils.rst index 9134a977adf6..a74fcd81134a 100644 --- a/doc/nrf/libraries/zigbee/zigbee_app_utils.rst +++ b/doc/nrf/libraries/zigbee/zigbee_app_utils.rst @@ -7,6 +7,8 @@ Zigbee application utilities :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + Zigbee application utilities library provides a set of components that are ready for use in Zigbee applications: * :ref:`lib_zigbee_signal_handler` for handling common ZBOSS stack signals. diff --git a/doc/nrf/libraries/zigbee/zigbee_error_handler.rst b/doc/nrf/libraries/zigbee/zigbee_error_handler.rst index ec97d8a4777b..15b689f2c8b1 100644 --- a/doc/nrf/libraries/zigbee/zigbee_error_handler.rst +++ b/doc/nrf/libraries/zigbee/zigbee_error_handler.rst @@ -7,6 +7,8 @@ Zigbee error handler :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The Zigbee error handler library provides a set of macros that can be used to assert on nrfxlib's :ref:`nrfxlib:zboss` API return codes. The assertion is implemented by a call to the :c:func:`zb_osif_abort` function. Additionally, you can enable the library to log the error code name before the assertion. diff --git a/doc/nrf/libraries/zigbee/zigbee_fota.rst b/doc/nrf/libraries/zigbee/zigbee_fota.rst index 5637184a5798..de3aef2354dd 100644 --- a/doc/nrf/libraries/zigbee/zigbee_fota.rst +++ b/doc/nrf/libraries/zigbee/zigbee_fota.rst @@ -7,6 +7,8 @@ Zigbee FOTA :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The Zigbee firmware over-the-air (Zigbee FOTA) library provides Zigbee endpoint definition, which implements clusters responsible for transferring a firmware file through the Zigbee network. The received data is passed as an upgrade candidate through the :ref:`lib_dfu_multi_image` library API to the :ref:`lib_dfu_target`. @@ -102,7 +104,7 @@ Additionally, the following limitations apply on the nRF5340 SoCs: Disable the :kconfig:option:`CONFIG_NRF53_ENFORCE_IMAGE_VERSION_EQUALITY` Kconfig option to build update images without inter-dependencies so that they can be applied independently. * It is impossible to enable ``SB_CONFIG_MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH`` Kconfig option. As a result, the fallback recovery is not available and any valid upgrade will overwrite the previous image. - The call to the :c:func:`boot_write_img_confirmed()` will have no effect. + The call to the :c:func:`boot_write_img_confirmed` will have no effect. * The current DFU limitations and dependencies are enforced by the :kconfig:option:`CONFIG_NRF53_MULTI_IMAGE_UPDATE` Kconfig option. * The version of the network core image is always set to the same value as the application core image. Its value can be configured using the :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` Kconfig option. diff --git a/doc/nrf/libraries/zigbee/zigbee_logger_eprxzcl.rst b/doc/nrf/libraries/zigbee/zigbee_logger_eprxzcl.rst index bf659c8d75d4..654662286f68 100644 --- a/doc/nrf/libraries/zigbee/zigbee_logger_eprxzcl.rst +++ b/doc/nrf/libraries/zigbee/zigbee_logger_eprxzcl.rst @@ -7,6 +7,8 @@ Zigbee endpoint logger :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + .. zigbee_logger_endpoint_intro_start The Zigbee endpoint logger library provides the :c:func:`zigbee_logger_eprxzcl_ep_handler` function. diff --git a/doc/nrf/libraries/zigbee/zigbee_zcl_scenes.rst b/doc/nrf/libraries/zigbee/zigbee_zcl_scenes.rst index a8aa37ca416b..4d0a69b5b045 100644 --- a/doc/nrf/libraries/zigbee/zigbee_zcl_scenes.rst +++ b/doc/nrf/libraries/zigbee/zigbee_zcl_scenes.rst @@ -7,6 +7,8 @@ Zigbee ZCL scene helper :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The Zigbee ZCL scene helper library provides a set of functions that implement the callbacks required by the ZCL scene cluster in the application. You can use this library to implement these mandatory callbacks and save the configured scenes in the non-volatile memory. For this purpose, it uses Zephyr's :ref:`settings_api` subsystem. @@ -28,16 +30,16 @@ To enable the Zigbee ZCL scene helper library, set the :kconfig:option:`CONFIG_Z Because the library uses Zephyr's :ref:`settings_api` subsystem, the application must call the following functions for the library to work correctly: -* :c:func:`zcl_scenes_init()` -* :c:func:`zcl_scenes_cb()` -* :c:func:`settings_subsys_init()` -* :c:func:`settings_load()` +* :c:func:`zcl_scenes_init` +* :c:func:`zcl_scenes_cb` +* :c:func:`settings_subsys_init` +* :c:func:`settings_load` You must implement these functions in the following manner: -* :c:func:`settings_subsys_init()` must be called before :c:func:`zcl_scenes_init()` -* :c:func:`settings_load()` must be called after :c:func:`zcl_scenes_init()` -* :c:func:`zcl_scenes_cb()` must be called in the ZCL device callback: +* :c:func:`settings_subsys_init` must be called before :c:func:`zcl_scenes_init` +* :c:func:`settings_load` must be called after :c:func:`zcl_scenes_init` +* :c:func:`zcl_scenes_cb` must be called in the ZCL device callback: .. code-block:: C diff --git a/doc/nrf/links.txt b/doc/nrf/links.txt index da00faf28954..3e1214828b5e 100644 --- a/doc/nrf/links.txt +++ b/doc/nrf/links.txt @@ -23,6 +23,9 @@ .. _`Zephyr net capture`: https://docs.zephyrproject.org/latest/samples/net/capture/README.html .. _`Zephyr net capture Linux setup`: https://docs.zephyrproject.org/latest/connectivity/networking/usbnet_setup.html#usb-device-networking-setup .. _`Zephyr net DHCPv4 server`: https://docs.zephyrproject.org/apidoc/latest/group__dhcpv4__server.html +.. _`Zephyr Wi-Fi NM API`: https://docs.zephyrproject.org/apidoc/latest/wifi__nm_8h.html +.. _`Zephyr Wi-Fi management`: https://docs.zephyrproject.org/latest/connectivity/networking/api/wifi.html +.. _`Zephyr PR #83028`: https://github.com/zephyrproject-rtos/zephyr/pull/83028 .. ### Source: github.com @@ -45,6 +48,9 @@ .. _`Zephyr pull request #50305`: https://github.com/zephyrproject-rtos/zephyr/pull/50305 .. _`Zephyr issue #69546`: https://github.com/zephyrproject-rtos/zephyr/issues/69546 +.. _`print_toolchain_checksum.sh`: https://github.com/nrfconnect/sdk-nrf/blob/main/scripts/print_toolchain_checksum.sh +.. _`JLink License Agreement`: https://github.com/nrfconnect/sdk-nrf/blob/main/scripts/docker/jlink/license.txt + .. _`sdk-mcuboot`: https://github.com/nrfconnect/sdk-mcuboot .. _`MCUboot design`: https://github.com/mcu-tools/mcuboot/blob/main/docs/design.md .. _`MCUboot repository`: https://github.com/mcu-tools/mcuboot @@ -56,7 +62,6 @@ .. _`Arm Mbed TLS project`: https://github.com/ARMmbed/mbedtls .. _`nrfconnect GitHub organization`: https://github.com/nrfconnect -.. |ncs_repo| replace:: https://github.com/nrfconnect/sdk-nrf .. _`sdk-nrf`: https://github.com/nrfconnect/sdk-nrf .. _`ncs-example-application`: https://github.com/nrfconnect/ncs-example-application .. _`manifest group filter`: https://github.com/nrfconnect/sdk-nrf/blob/20f40501f69bc9bfd2b321704917da1769411936/west.yml#L42 @@ -68,10 +73,10 @@ .. _`sdk-nrf PR #14474`: https://github.com/nrfconnect/sdk-nrf/pull/14474 .. _`sdk-nrf PR #16242`: https://github.com/nrfconnect/sdk-nrf/pull/16242 -.. |ncs_nrfxlib_repo| replace:: https://github.com/nrfconnect/sdk-nrfxlib .. _`sdk-nrfxlib`: https://github.com/nrfconnect/sdk-nrfxlib .. _`nRF Blinky`: https://github.com/NordicSemiconductor/Android-nRF-Blinky +.. _`nRF Blinky documentation`: https://github.com/NordicSemiconductor/Android-nRF-Blinky?tab=readme-ov-file#nrf-blinky-for-android .. _`Source code for nRF Wi-Fi Provisioner mobile app for Android`: https://github.com/NordicSemiconductor/Android-nRF-Wi-Fi-Provisioner .. _`Source code for nRF Wi-Fi Provisioner mobile app for iOS`: https://github.com/NordicSemiconductor/IOS-nRF-Wi-Fi-Provisioner @@ -99,8 +104,6 @@ .. _`HIDAPI releases`: https://github.com/libusb/hidapi/releases .. _`pyhidapi Python wrapper`: https://github.com/apmorton/pyhidapi -.. _`nrf9160dk_nrf9160_partition_conf.dts`: https://github.com/nrfconnect/sdk-zephyr/blob/main/boards/arm/nrf9160dk_nrf9160/nrf9160dk_nrf9160_partition_conf.dts - .. _`west manifest file`: https://github.com/nrfconnect/sdk-nrf/blob/main/west.yml .. _`LICENSE file`: https://github.com/nrfconnect/sdk-nrf/blob/main/LICENSE @@ -111,6 +114,7 @@ .. _`OpenThread CLI Reference`: https://github.com/openthread/openthread/blob/main/src/cli/README.md .. _`OpenThread CLI Reference - csl command`: https://github.com/openthread/openthread/blob/main/src/cli/README.md#csl .. _`OpenThread CLI Reference - pollperiod command`: https://github.com/openthread/openthread/blob/main/src/cli/README.md#pollperiod +.. _`OpenThread Factory Diagnostics Module Reference`: https://github.com/openthread/openthread/blob/main/src/core/diags/README.md .. _`Commissioner CLI commands`: https://github.com/openthread/openthread/blob/main/src/cli/README_COMMISSIONER.md .. _`Joiner CLI commands`: https://github.com/openthread/openthread/blob/main/src/cli/README_JOINER.md .. _`BBTC Client`: https://github.com/nrfconnect/sdk-openthread/tree/main/tools/tcat_ble_client @@ -142,6 +146,7 @@ .. _`Matter nRF Connect releases`: https://github.com/nrfconnect/sdk-connectedhomeip/releases .. _`Matter SDK tagged as v1.0.0`: https://github.com/project-chip/connectedhomeip/releases/tag/v1.0.0 .. _`Testing with Apple Devices`: https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/darwin.md +.. _`chip-tool`: https://docs.nordicsemi.com/bundle/ncs-latest/page/matter/chip_tool_guide.html .. _`CoreMark GitHub`: https://github.com/eembc/coremark @@ -198,9 +203,12 @@ .. _`nRF Asset Tracker Memfault integration for AWS IoT`: https://github.com/NordicSemiconductor/asset-tracker-cloud-memfault-aws-js .. _`nRF Asset Tracker Memfault integration for Azure IoT Hub`: https://github.com/NordicSemiconductor/asset-tracker-cloud-memfault-azure-js +.. _`Memfault-SDK`: .. _`Memfault firmware SDK`: https://github.com/memfault/memfault-firmware-sdk .. _`Memfault WebBluetooth Client source code`: https://github.com/memfault/web-ble-example/blob/main/mds.js -.. _`Memfault-SDK`: https://github.com/memfault/memfault-firmware-sdk + + +.. _`Zephyr hostap fork`: https://github.com/zephyrproject-rtos/hostap .. ### Source: github.io @@ -210,8 +218,7 @@ .. _`Azure SDK for Embedded C`: https://azure.github.io/azure-sdk-for-c/ -.. _`Memfault WebBluetooth Client`: https://memfault.github.io/web-ble-example/ - +.. _`PSA Certified Crypto API`: https://arm-software.github.io/psa-api/crypto/ .. _`PSA Cryptography API 1.0.1`: https://armmbed.github.io/mbed-crypto/1.0.1/html/index.html .. _`PSA Certified Crypto API 1.2.1`: https://arm-software.github.io/psa-api/crypto/1.2/ .. _`PSA Certified Crypto API 1.2 PAKE Extension Final 1`: https://arm-software.github.io/psa-api/crypto/1.2/ext-pake/ @@ -220,6 +227,7 @@ .. _`Memfault WebBluetooth Client`: https://memfault.github.io/web-ble-example/ .. _`nRF Connect SDK Add-ons`: https://nrfconnect.github.io/ncs-app-index/ +.. _`ncs-app-index`: https://github.com/nrfconnect/ncs-app-index .. ### Source: githubusercontent.com @@ -310,6 +318,10 @@ .. _`Cellular IoT SiPs`: https://www.nordicsemi.com/Products/Low-power-cellular-IoT/Products?lang=en#infotabs .. _`nRF54L15 System-on-Chip`: https://www.nordicsemi.com/Products/nRF54L15 +.. _`nRF54L15 DK`: https://www.nordicsemi.com/Products/Development-hardware/nRF54L15-DK +.. _`nRF54L15 DK distributors`: https://www.nordicsemi.com/About-us/BuyOnline?search_token=nRF54L15%20DK +.. _`nRF54L05`: https://www.nordicsemi.com/Products/nRF54L05 +.. _`nRF54L10`: https://www.nordicsemi.com/Products/nRF54L10 .. _`nRF52840 DK Downloads`: https://www.nordicsemi.com/Products/Development-hardware/nRF52840-DK/Download#infotabs .. _`nRF52840 DK product page`: https://www.nordicsemi.com/Products/Development-hardware/nRF52840-DK/ @@ -327,12 +339,14 @@ .. _`Nordic Thingy:53`: .. _`Thingy:53 product page`: https://www.nordicsemi.com/thingy53 .. _`Nordic Thingy:53 Downloads`: https://www.nordicsemi.com/Products/Development-hardware/Nordic-Thingy-53/Downloads#infotabs +.. _`Nordic Thingy:53 get started`: https://www.nordicsemi.com/Products/Development-hardware/Nordic-Thingy-53/GetStarted?lang=en#infotabs .. _`Nordic Thingy:52`: https://www.nordicsemi.com/Software-and-tools/Prototyping-platforms/Nordic-Thingy-52 .. _`Nordic Thingy:91`: https://www.nordicsemi.com/Software-and-tools/Prototyping-platforms/Nordic-Thingy-91 .. _`Thingy:91 product page`: https://www.nordicsemi.com/Products/Development-hardware/Nordic-Thingy-91 .. _`Thingy:91 Downloads`: .. _`Thingy:91 product website (downloads)`: https://www.nordicsemi.com/Software-and-tools/Prototyping-platforms/Nordic-Thingy-91/Download#infotabs +.. _`Thingy:91 X product page`: https://www.nordicsemi.com/Products/Development-hardware/Nordic-Thingy-91-X .. _`nRF21540 DK product page`: https://www.nordicsemi.com/Products/Low-power-short-range-wireless/nRF21540 .. _`nRF21540 DB product page`: https://www.nordicsemi.com/Products/Development-hardware/nRF21540-DB @@ -357,6 +371,8 @@ .. #### Source: www.nordicsemi.com/Events/ +.. _`nRF Connect SDK v2.9.0 webinar`: +.. _`nRF Connect SDK v2.8.0 webinar`: https://webinars.nordicsemi.com/events .. _`nRF Connect SDK v2.7.0 webinar`: https://www.nordicsemi.com/Events/2024/Webinar-Exciting-new-features-in-nRF-Connect-SDK-v270 .. _`nRF Connect SDK v2.6.0 webinar`: https://www.nordicsemi.com/Events/2024/Webinar-Exciting-new-features-in-nRF-Connect-SDK-v260 .. _`nRF Connect SDK v2.5.0 webinar`: https://www.nordicsemi.com/Events/2023/Webinar-Exciting-new-features-in-nRF-Connect-SDK-v250 @@ -367,6 +383,7 @@ .. _`nRF Connect SDK v2.0.0 webinar`: https://www.nordicsemi.com/Events/2022/Webinar-Exciting-new-features-in-nRF-Connect-SDK-v2?utm_campaign=2022%20Webinars&utm_source=developer.nordicsemi.com&utm_medium=Webinar%20registration%20%7C%20nRF%20Connect%20SDK%20v2.0&utm_content=Webinar%20registration%20%7C%20nRF%20Connect%20SDK%20v2.0 .. _`nRF Connect SDK v1.9.0 webinar`: https://www.nordicsemi.com/Events/2022/Webinar-Exciting-new-features-in-nRF-Connect-SDK-v19?utm_campaign=2022%20Webinars&utm_source=developer.nordicsemi.com&utm_medium=In-line%20text%20%7C%20nRF%20Connect%20SDK%20v1.9%20%7C%20Link%20to%20webinar .. _`Adding Device Firmware Update (DFU/FOTA) Support in nRF Connect SDK`: https://www.nordicsemi.com/Events/2024/Webinar-Adding-Device-Firmware-Update-DFU-FOTA-Support-in-nRF-Connect-SDK + .. #### Source: www.nordicsemi.com/*/Development-Tools .. _`nRF Command Line Tools`: @@ -381,6 +398,7 @@ .. _`nRF Connect for Desktop`: https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-desktop .. _`Download nRF Connect for Desktop`: https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-desktop/Download#infotabs +.. _`nRF Connect for Desktop's additional requirements`: https://docs.nordicsemi.com/bundle/nrf-connect-desktop/page/download_cfd.html#additional-requirements .. _`nRF Connect for Mobile`: https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Connect-for-mobile @@ -393,7 +411,7 @@ .. _`nRF Toolbox`: https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Toolbox -.. _`nRF Edge Impulse mobile app`: https://cm.nordicsemi.com/Products/Development-tools/nrf-edge-impulse +.. _`nRF Edge Impulse mobile app`: https://www.nordicsemi.com/Products/Development-tools/nRF-Edge-Impulse .. ### Source: infocenter.nordicsemi.com @@ -414,6 +432,9 @@ .. _`nRF Connect SDK latest documentation`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/index.html .. _`known issues page on the main branch`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/known_issues.html +.. _`known issues for nRF Connect SDK v2.9.0-nRF54H20-rc1`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/known_issues.html?v=v2-9-0-nRF54H20-rc1 +.. _`known issues for nRF Connect SDK v2.9.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/known_issues.html?v=v2-9-0 +.. _`known issues for nRF Connect SDK v2.8.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/known_issues.html?v=v2-8-0 .. _`known issues for nRF Connect SDK v2.7.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/known_issues.html?v=v2-7-0 .. _`known issues for nRF Connect SDK v2.6.2`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/known_issues.html?v=v2-6-2 .. _`known issues for nRF Connect SDK v2.6.1`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/known_issues.html?v=v2-6-1 @@ -462,6 +483,9 @@ .. _`nRF socket options`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrfxlib/nrf_modem/doc/sockets.html +.. _`Repositories and revisions for v2.9.0-nRF54H20-rc1`: https://docs.nordicsemi.com/bundle/ncs-2.9.0-nrf54h20-rc1/page/nrf/releases_and_maturity/repository_revisions.html +.. _`Repositories and revisions for v2.9.0`: https://docs.nordicsemi.com/bundle/ncs-2.9.0/page/nrf/releases_and_maturity/repository_revisions.html +.. _`Repositories and revisions for v2.8.0`: https://docs.nordicsemi.com/bundle/ncs-2.8.0/page/nrf/releases_and_maturity/repository_revisions.html .. _`Repositories and revisions for v2.7.99-cs2`: https://docs.nordicsemi.com/bundle/ncs-2.7.99-cs2/page/nrf/releases_and_maturity/repository_revisions.html .. _`Repositories and revisions for v2.7.99-cs1`: https://docs.nordicsemi.com/bundle/ncs-2.7.99-cs1/page/nrf/releases_and_maturity/repository_revisions.html .. _`Repositories and revisions for v2.7.0`: https://docs.nordicsemi.com/bundle/ncs-2.7.0/page/nrf/releases_and_maturity/repository_revisions.html @@ -492,6 +516,8 @@ .. _`Repositories and revisions for v1.9.1`: https://docs.nordicsemi.com/bundle/ncs-1.9.1/page/nrf/introduction.html#repositories_and_revisions .. _`Repositories and revisions`: https://docs.nordicsemi.com/bundle/ncs-1.9.0/page/nrf/introduction.html#repositories_and_revisions +.. _`Modem library changelog for v2.9.0`: https://docs.nordicsemi.com/bundle/ncs-2.9.0/page/nrfxlib/nrf_modem/doc/CHANGELOG.html#nrf-modem-changelog +.. _`Modem library changelog for v2.8.0`: https://docs.nordicsemi.com/bundle/ncs-2.8.0/page/nrfxlib/nrf_modem/doc/CHANGELOG.html#nrf-modem-changelog .. _`Modem library changelog for v2.7.0`: https://docs.nordicsemi.com/bundle/ncs-2.7.0/page/nrfxlib/nrf_modem/doc/CHANGELOG.html#nrf-modem-changelog .. _`Modem library changelog for v2.6.2`: https://docs.nordicsemi.com/bundle/ncs-2.6.2/page/nrfxlib/nrf_modem/doc/CHANGELOG.html#nrf-modem-changelog .. _`Modem library changelog for v2.6.1`: https://docs.nordicsemi.com/bundle/ncs-2.6.1/page/nrfxlib/nrf_modem/doc/CHANGELOG.html#nrf-modem-changelog @@ -519,6 +545,8 @@ .. _`Modem library changelog for v1.9.1`: https://docs.nordicsemi.com/bundle/ncs-1.9.1/page/nrfxlib/nrf_modem/doc/CHANGELOG.html .. _`Modem library changelog for v1.9.0`: https://docs.nordicsemi.com/bundle/ncs-1.9.0/page/nrfxlib/nrf_modem/doc/CHANGELOG.html +.. _`LwM2M carrier library changelog for v2.9.0`: https://docs.nordicsemi.com/bundle/ncs-2.9.0/page/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.html#liblwm2m-carrier-changelog +.. _`LwM2M carrier library changelog for v2.8.0`: https://docs.nordicsemi.com/bundle/ncs-2.8.0/page/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.html#liblwm2m-carrier-changelog .. _`LwM2M carrier library changelog for v2.7.0`: https://docs.nordicsemi.com/bundle/ncs-2.7.0/page/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.html#liblwm2m-carrier-changelog .. _`LwM2M carrier library changelog for v2.6.2`: https://docs.nordicsemi.com/bundle/ncs-2.6.2/page/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.html#liblwm2m-carrier-changelog .. _`LwM2M carrier library changelog for v2.6.1`: https://docs.nordicsemi.com/bundle/ncs-2.6.1/page/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.html#liblwm2m-carrier-changelog @@ -546,7 +574,10 @@ .. _`LwM2M carrier library changelog for v1.9.1`: https://docs.nordicsemi.com/bundle/ncs-1.9.1/page/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.html .. _`LwM2M carrier library changelog for v1.9.0`: https://docs.nordicsemi.com/bundle/ncs-1.9.0/page/nrf/libraries/bin/lwm2m_carrier/CHANGELOG.html - +.. _`Migration guide for nRF Connect SDK v3.0.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/migration/migration_guide_3.0.html +.. _`Migration guide for nRF Connect SDK v2.9.0-nRF54H20-rc1`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/migration/migration_guide_2.9.0-nrf54h20-rc1.html +.. _`Migration guide for nRF Connect SDK v2.9.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/migration/migration_guide_2.9.html +.. _`Migration guide for nRF Connect SDK v2.8.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/migration/migration_guide_2.8.html .. _`Migration guide for nRF Connect SDK v2.7.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/migration/migration_guide_2.7.html .. _`Migration guide for nRF Connect SDK v2.6.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/migration/migration_guide_2.6.html .. _`Migration guide for nRF Connect SDK v2.5.0`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/releases_and_maturity/migration/migration_guide_2.5.html @@ -594,25 +625,26 @@ .. _`Getting started guide for nRF Asset Tracker for Azure`: https://docs.nordicsemi.com/bundle/nrf-asset-tracker-saga/page/docs/azure/GettingStarted/Index.html .. _`nRF Asset Tracker Memfault integration`: https://docs.nordicsemi.com/bundle/nrf-asset-tracker-saga/page/docs/memfault/Index.html -.. _`nRF Connect Board Configurator`: https://docs.nordicsemi.com/bundle/nrf-connect-board-configurator/page/index.html +.. _`Board Configurator app`: https://docs.nordicsemi.com/bundle/nrf-connect-board-configurator/page/index.html -.. _`Serial Terminal from nRF Connect for Desktop`: https://docs.nordicsemi.com/bundle/nrf-connect-serial-terminal/page/index.html -.. _`nRF Connect Serial Terminal`: https://docs.nordicsemi.com/bundle/nrf-connect-serial-terminal/page/index.html -.. _`Connecting using Serial Terminal`: https://docs.nordicsemi.com/bundle/nrf-connect-serial-terminal/page/connecting.html -.. _`Serial Terminal configuration`: https://docs.nordicsemi.com/bundle/nrf-connect-serial-terminal/page/configuration.html -.. _`nRF Connect Bluetooth Low Energy`: https://docs.nordicsemi.com/bundle/nrf-connect-ble/page/index.html -.. _`Cellular Monitor`: https://docs.nordicsemi.com/bundle/nrf-connect-cellularmonitor/page/index.html -.. _`nPM PowerUP`: https://docs.nordicsemi.com/bundle/nrf-connect-npm/page/index.html -.. _`Quick Start`: https://docs.nordicsemi.com/bundle/nrf-connect-quickstart/page/index.html -.. _`RSSI Viewer`: https://docs.nordicsemi.com/bundle/nrf-connect-rssi-viewer/page/index.html +.. _`Bluetooth Low Energy app`: https://docs.nordicsemi.com/bundle/nrf-connect-ble/page/index.html +.. _`Cellular Monitor app`: https://docs.nordicsemi.com/bundle/nrf-connect-cellularmonitor/page/index.html .. _`Managing credentials`: https://docs.nordicsemi.com/bundle/nrf-connect-cellularmonitor/page/managing_credentials.html -.. _`nRF Connect Direct Test Mode`: https://docs.nordicsemi.com/bundle/nrf-connect-direct-test-mode/page/index.html +.. _`nPM PowerUP app`: https://docs.nordicsemi.com/bundle/nrf-connect-npm/page/index.html +.. _`Quick Start app`: https://docs.nordicsemi.com/bundle/nrf-connect-quickstart/page/index.html +.. _`RSSI Viewer app`: https://docs.nordicsemi.com/bundle/nrf-connect-rssi-viewer/page/index.html -.. _`nRF Connect Programmer`: https://docs.nordicsemi.com/bundle/nrf-connect-programmer/page/index.html +.. _`Direct Test Mode app`: https://docs.nordicsemi.com/bundle/nrf-connect-direct-test-mode/page/index.html + +.. _`Programmer app`: https://docs.nordicsemi.com/bundle/nrf-connect-programmer/page/index.html .. _`Programming the nRF52840 Dongle`: .. _`Programming a Development Kit`: https://docs.nordicsemi.com/bundle/nrf-connect-programmer/page/programming_dk.html +.. _`Programming Nordic Thingy:53`: https://docs.nordicsemi.com/bundle/nrf-connect-programmer/page/programming_dk.html#programming-nordic-thingy53 + +.. _`Serial Terminal app`: https://docs.nordicsemi.com/bundle/nrf-connect-serial-terminal/page/index.html +.. _`Connecting using the Serial Terminal app`: https://docs.nordicsemi.com/bundle/nrf-connect-serial-terminal/page/connecting.html .. _`nRF Thread Topology Monitor`: https://docs.nordicsemi.com/bundle/ug_nrf_ttm/page/UG/nrf_ttm/ttm_introduction.html .. _`nRF Sniffer for 802.15.4`: https://docs.nordicsemi.com/bundle/ug_sniffer_802154/page/UG/sniffer_802154/intro_802154.html @@ -621,7 +653,7 @@ .. _`Power Profiler Kit II (PPK2)`: https://docs.nordicsemi.com/bundle/ug_ppk2/page/UG/ppk/PPK_user_guide_Intro.html .. _`Install the Power Profiler app`: https://docs.nordicsemi.com/bundle/ug_ppk2/page/UG/common/nrf_connect_app_installing.html .. _`Using the Power Profiler app`: https://docs.nordicsemi.com/bundle/ug_ppk2/page/UG/ppk/PPK_user_guide_Running_the_software.html -.. _`nRF Connect Power Profiler`: https://docs.nordicsemi.com/bundle/nrf-connect-ppk/page/index.html +.. _`Power Profiler app`: https://docs.nordicsemi.com/bundle/nrf-connect-ppk/page/index.html .. _`Electrical specification for nRF7002`: https://docs.nordicsemi.com/bundle/ps_nrf7002/page/chapters/elspec/doc/electrical_specification.html @@ -629,14 +661,14 @@ .. _`nRF pynrfjprog`: https://docs.nordicsemi.com/bundle/ug_pynrfjprog/page/UG/pynrfjprog/pynrfjprog_lpage.html -.. _`Amazon Sidewalk documentation`: https://docs.nordicsemi.com/bundle/sidewalk_2.6.0/page/index.html -.. _`Setting up the SDK for Amazon Sidewalk`: https://docs.nordicsemi.com/bundle/sidewalk_2.6.0/page/setting_up_sidewalk_environment/setting_up_sdk.html +.. _`Amazon Sidewalk documentation`: https://docs.nordicsemi.com/bundle/sidewalk_latest/page/index.html +.. _`Setting up the SDK for Amazon Sidewalk`: https://docs.nordicsemi.com/bundle/sidewalk_latest/page/setting_up_sidewalk_environment/setting_up_sdk.html .. _`nRF9160 Product Specification`: https://docs.nordicsemi.com/bundle/ps_nrf9160/page/nRF9160_html5_keyfeatures.html +.. _`nRF9160 DK GPS`: .. _`nRF9160 GPS receiver specification`: https://docs.nordicsemi.com/bundle/ps_nrf9160/page/gps.html .. _`nRF9160 SiP pin configuration`: https://docs.nordicsemi.com/bundle/ref_at_commands/page/REF/at_commands/sip_pin_configuration/sip_pin_configuration.html -.. _`nRF9160 DK GPS`: https://docs.nordicsemi.com/bundle/ps_nrf9160/page/gps.html .. _`nWP044 - Best practices for cellular IoT development`: https://docs.nordicsemi.com/bundle/nwp_044/page/WP/nwp_044/lte_technology.html .. _`Security protocol for cellular IoT`: https://docs.nordicsemi.com/bundle/nwp_044/page/WP/nwp_044/security_protocols.html @@ -694,6 +726,9 @@ .. _`nRF91x1 Power saving mode setting`: https://docs.nordicsemi.com/bundle/ref_at_commands_nrf91x1/page/REF/at_commands/nw_service/cpsms.html .. _`nRF91x1 modem trace activation %XMODEMTRACE`: https://docs.nordicsemi.com/bundle/ref_at_commands_nrf91x1/page/REF/at_commands/mob_termination_ctrl_status/xmodemtrace.html +.. _`nRF54L15 Datasheet`: https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/keyfeatures_html5.html +.. _`nRF54L15 DK User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf54l15_dk/page/UG/nRF54L15_DK/intro/intro.html + .. _`nRF53 Series`: https://docs.nordicsemi.com/category/nrf-53-series .. _`nRF5340 Product Specification`: https://docs.nordicsemi.com/bundle/ps_nrf5340/page/keyfeatures_html5.html @@ -710,6 +745,7 @@ .. _`System OFF mode`: https://docs.nordicsemi.com/bundle/ps_nrf52840/page/power.html#ariaid-title10 .. _`nRF52840 DK User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf52840_dk/page/UG/dk/intro.html .. _`nRF52840 Dongle User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf52840_dongle/page/UG/nrf52840_Dongle/intro.html +.. _`nRF52840 DK Debug output`: https://docs.nordicsemi.com/bundle/ug_nrf52840_dk/page/UG/dk/hw_debug_out.html .. _`nRF52840 DK Compatibility Matrix`: https://docs.nordicsemi.com/bundle/comp_matrix_nrf52840/page/COMP/nrf52840/nrf52840_comp_matrix.html .. _`nRF52833 Product Specification`: https://docs.nordicsemi.com/bundle?labelkey=nrf52833&labelkey=product-specification @@ -729,7 +765,9 @@ .. _`nRF52805 Product Specification`: https://docs.nordicsemi.com/bundle?labelkey=nrf52805&labelkey=product-specification -.. _`nRF21540`: https://docs.nordicsemi.com/bundle/ug_nrf21540_dk/page/UG/nrf21540_DK/intro.html +.. _`nRF21540`: +.. _`nRF21540 DK User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf21540_dk/page/UG/nrf21540_DK/intro.html + .. _`nRF21540 Product Specification`: https://docs.nordicsemi.com/bundle/ps_nrf21540/page/keyfeatures_html5.html .. _`nRF21540 Front-End Module`: https://docs.nordicsemi.com/bundle/ug_nrf21540_dk/page/UG/nrf21540_DK/front_end_module.html @@ -738,21 +776,22 @@ .. _`Product specification for nRF70 Series devices`: https://docs.nordicsemi.com/bundle/ps_nrf7002/page/keyfeatures_html5.html .. _`nRF7002 DK Hardware`: https://docs.nordicsemi.com/bundle/ug_nrf7002_dk/page/UG/nrf7002_DK/intro.html .. _`nRF70 Series hardware documentation`: -.. _`nRF70 Series`: https://docs.nordicsemi.com/category/nrf-70-series .. _`Measuring current`: https://docs.nordicsemi.com/bundle/ug_nrf7002_dk/page/UG/nrf7002_DK/hw_measure_current.html - +.. _`nRF70 Series`: .. _`Guidelines and application notes for nRF70 Series devices`: https://docs.nordicsemi.com/category/nrf-70-series .. _`nRF70 Series power states`: https://docs.nordicsemi.com/bundle/ps_nrf7002/page/chapters/functional/doc/power_states.html +.. _`nRF7002 EK`: .. _`nRF7002 EK User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf7002_ek/page/UG/nrf7002_EK/intro.html .. _`nRF7002 EB User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf7002_eb/page/UG/nrf7002_EB/intro.html .. _`nRF7002 EB PCB edge connector`: https://docs.nordicsemi.com/bundle/ug_nrf7002_eb/page/UG/nrf7002_EB/pcb_edge_connector.html .. _`Using nRF7002 EB with the Nordic Thingy:53`: https://docs.nordicsemi.com/bundle/ug_nrf7002_eb/page/UG/nrf7002_EB/use_thingy53.html .. _`nRF7002 EB castellated edge holes`: https://docs.nordicsemi.com/bundle/ug_nrf7002_eb/page/UG/nrf7002_EB/castellated_mounting_holes.html -.. _`nRF7002 EK`: https://docs.nordicsemi.com/bundle/ug_nrf7002_ek/page/UG/nrf7002_EK/intro.html .. _`nRF7002 companion IC`: https://docs.nordicsemi.com/bundle/ug_nrf7002_ek/page/UG/nrf7002_EK/hw_wifi_companion_ic.html +.. _`Antenna gain compensation`: https://docs.nordicsemi.com/bundle/nan_046/page/APP/nan_046/antenna_compensation.html +.. _`Band edge compensation`: https://docs.nordicsemi.com/bundle/nan_046/page/APP/nan_046/band_compensation.html .. _`Programming SoCs with nrfjprog`: https://docs.nordicsemi.com/bundle/ug_nrf_cltools/page/UG/cltools/nrf_nrfjprogexe.html @@ -760,9 +799,10 @@ .. _`Nordic Thingy:53 Regulatory notices`: https://docs.nordicsemi.com/bundle/ug_thingy53/page/UG/thingy53/regulatory/regulatory_notices.html .. _`Nordic Thingy:91 User Guide`: https://docs.nordicsemi.com/bundle/ug_thingy91/page/UG/thingy91/intro/frontpage.html - .. _`Measuring Current on Thingy:91`: https://docs.nordicsemi.com/bundle/ug_thingy91/page/UG/thingy91/hw_description/hw_power_current_measurement.html +.. _`Nordic Thingy:91 X User Guide`: https://docs.nordicsemi.com/bundle/ug_thingy91x/page/UG/thingy91x/intro/frontpage.html + .. _`nPM1300`: https://docs.nordicsemi.com/category/npm1300-category .. _`nPM1300 Product Specification`: https://docs.nordicsemi.com/bundle/ps_npm1300/page/keyfeatures_html5.html @@ -772,15 +812,15 @@ .. _`nPM Fuel Gauge Board`: https://www.nordicsemi.com/Products/Development-hardware/nPM-Fuel-Gauge-board .. _`Using the nPM1300 Fuel Gauge`: https://docs.nordicsemi.com/bundle/nan_045/page/APP/nan_045/intro.html -.. _`nRF21540 Product Specification`: https://docs.nordicsemi.com/bundle/ps_nrf21540/page/keyfeatures_html5.html -.. _`nRF21540 DK User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf21540_dk/page/UG/nrf21540_DK/intro.html .. _`nRF21540 EK User Guide`: https://docs.nordicsemi.com/bundle/ug_nrf21540_ek/page/UG/nrf21540_DK/intro.html .. _`AP-Protect for nRF9151`: https://docs.nordicsemi.com/bundle/ps_nrf9151/page/dif.html#ariaid-title3 .. _`AP-Protect for nRF9161`: https://docs.nordicsemi.com/bundle/ps_nrf9161/page/dif.html#ariaid-title3 .. _`Debugger access protection for nRF9160`: https://docs.nordicsemi.com/bundle/ps_nrf9160/page/dif.html#ariaid-title2 +.. _`AP-Protect for nRF54L15`: https://docs.nordicsemi.com/bundle/ps_nrf54L15/page/ctrl-ap.html .. _`AP-Protect for nRF5340`: https://docs.nordicsemi.com/bundle/ps_nrf5340/page/debugandtrace.html#ariaid-title9 -.. _`AP-Protect for nRF52840`: https://docs.nordicsemi.com/bundle/ps_nrf52840/page/dif.html#ariaid-title3 +.. _`AP-Protect for nRF52840`: +.. _`access port protection mechanism`: https://docs.nordicsemi.com/bundle/ps_nrf52840/page/dif.html#ariaid-title3 .. _`AP-Protect for nRF52833`: https://docs.nordicsemi.com/bundle/ps_nrf52833/page/dif.html#ariaid-title3 .. _`AP-Protect for nRF52832`: https://docs.nordicsemi.com/bundle/ps_nrf52832/page/dif.html#d913e149 .. _`AP-Protect for nRF52820`: https://docs.nordicsemi.com/bundle/ps_nrf52820/page/dif.html#ariaid-title3 @@ -802,15 +842,22 @@ .. _`nAN34`: https://docs.nordicsemi.com/bundle/Application-Notes/resource/nan_34.pdf .. _`nRF Util`: https://docs.nordicsemi.com/bundle/nrfutil/page/README.html +.. _`Installing nRF Util`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides/installing.html +.. _`nRF Util prerequisites`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides/installing.html#prerequisites +.. _`Upgrading nRF Util core module`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides/installing.html#upgrading-nrf-util +.. _`Installing and upgrading nRF Util commands`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides/installing_commands.html +.. _`Installing specific versions of nRF Util commands`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides/installing_commands.html#installing-specific-versions-of-commands .. _`Installing nRF Util for nRF5 SDK`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides-nrf5sdk/installing.html .. _`DFU over Zigbee`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides-nrf5sdk/dfu_performing.html#dfu-over-zigbee .. _`Generating DFU packages`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides-nrf5sdk/dfu_generating_packages.html .. _`DFU over a serial USB connection`: https://docs.nordicsemi.com/bundle/nrfutil/page/guides-nrf5sdk/dfu_performing.html#dfu-over-a-serial-usb-connection -.. _`Toolchain Manager command`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-toolchain-manager/nrfutil-toolchain-manager_0.14.1.html#available-subcommands +.. _`Toolchain Manager command`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-toolchain-manager/nrfutil-toolchain-manager_0.14.1.html .. _`Recovering the device`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-device/guides/programming_recovery.html .. _`nrfutil-trace`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-trace/CHANGELOG.html .. _`nRF Sniffer for Bluetooth LE`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-ble-sniffer/guides/overview.html .. _`Device command overview`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-device/guides/programming.html +.. _`Programming application firmware using MCUboot serial recovery`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-device/guides/programming_firmware_thingy91.html +.. _`Programming application firmware on the nRF54L15 SoC`: https://docs.nordicsemi.com/bundle/nrfutil/page/nrfutil-device/guides/programming_nrf54L15.html .. _`anomaly 19`: https://docs.nordicsemi.com/bundle/errata_nRF5340_EngA/page/ERR/nRF5340/EngineeringA/latest/anomaly_340_19.html @@ -829,8 +876,6 @@ .. _`SWD Select`: https://docs.nordicsemi.com/bundle/ug_thingy91/page/UG/thingy91/hw_description/programming_debugging_interface.html -.. _`access port protection mechanism`: https://docs.nordicsemi.com/bundle/ps_nrf52840/page/dif.html#ariaid-title3 - .. _`Wi-Fi Alliance Certification for nRF70 Series`: https://docs.nordicsemi.com/bundle/nwp_045/page/WP/nwp_045/intro.html .. _`Errata 254`: https://docs.nordicsemi.com/bundle/errata_nRF52840_Rev3/page/ERR/nRF52840/Rev3/latest/config_840_254.html @@ -860,6 +905,7 @@ .. _`Debugging overview`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/debug_concepts.html .. _`How to debug`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/debug_use.html .. _`How to debug applications for a multi-core System on Chip`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/debug_use.html#how-to-debug-applications-for-a-multi-core-system-on-chip +.. _`How to work with the Memory Explorer`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/debug_mem_explorer.html .. _`source control with west`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/west_about.html .. _`west module management`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/west_module_management.html .. _`Custom launch and debug configurations`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/debug_custom.html @@ -883,9 +929,14 @@ .. _`nRF Connect SDK Fundamentals course`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/ .. _`Installing nRF Connect SDK and VS Code`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-1-nrf-connect-sdk-introduction/topic/exercise-1-1/ +.. _`Lesson 2 - Reading buttons and controlling LEDs`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-2-reading-buttons-and-controlling-leds/ +.. _`Lesson 6 – Serial communication (I2C)`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-6-serial-com-i2c/topic/i2c-driver/ .. _`nRF Connect SDK Intermediate course`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/ .. _`Lesson 2 - Debugging and troubleshooting`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-2-debugging/ +.. _`Lesson 3 – Adding custom board support`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-3-adding-custom-board-support/ +.. _`Lesson 5 – Serial Peripheral Interface (SPI)`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-5-serial-peripheral-interface-spi/ +.. _`Lesson 7 - Device driver model`: https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-7-device-driver-model/ .. _`Cellular IoT Fundamentals course`: https://academy.nordicsemi.com/courses/cellular-iot-fundamentals/ .. _`Power saving techniques`: https://academy.nordicsemi.com/courses/cellular-iot-fundamentals/lessons/lesson-1-cellular-fundamentals/topic/lesson-1-power-saving-techniques/ @@ -910,6 +961,8 @@ .. _`Testing the nRF Connect platform with Apple, Google and Samsung ecosystems`: https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/matter-testing-nrf-connect-sdk-platform-with-apple-google-and-samsung-ecosystems-218911247#mcetoc_1gkq24ojdf +.. _`Online Power Profiler for Wi-Fi`: https://devzone.nordicsemi.com/power/w/opp/14/online-power-profiler-for-wi-fi + .. ### Source: App stores (play.google.com & apps.apple.com) .. _`Fast Pair Validator app`: https://play.google.com/store/apps/details?id=com.google.location.nearby.apps.fastpair.validator @@ -937,6 +990,7 @@ .. ### Source: www.segger.com +.. _`Adjusting Trace Timings and General Troubleshooting`: https://wiki.segger.com/Adjusting_trace_timings_and_general_troubleshooting#Type_3:_Trace_clock_delayed .. _`SEGGER J-Link`: .. _`J-Link Software and Documentation Pack`: https://www.segger.com/downloads/jlink @@ -946,7 +1000,9 @@ .. ### Source: bluetooth.org and bluetooth.com -.. _`Bluetooth Core Specification`: https://www.bluetooth.com/specifications/specs/ +.. _`Bluetooth Core Specification`: +.. _`Bluetooth Mesh profile specification`: +.. _`Bluetooth NLC profile specifications`: https://www.bluetooth.com/specifications/specs/ .. _`Bluetooth® LE Audio specifications`: https://www.bluetooth.com/learn-about-bluetooth/recent-enhancements/le-audio/le-audio-specifications/ .. _`Join Bluetooth SIG`: https://www.bluetooth.com/develop-with-bluetooth/join/ @@ -958,6 +1014,8 @@ .. _`Current Time Service Specification`: https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=292957 .. _`Running Speed and Cadence Service Specification`: https://www.bluetooth.com/specifications/specs/running-speed-and-cadence-service-1-0/ .. _`Continuous Glucose Monitoring Service Specification`: https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=531249 +.. _`Ranging Profile Specification`: https://files.bluetooth.com/download/rap_v1-0/ +.. _`Ranging Service Specification`: https://files.bluetooth.com/download/ras_v1-0/ .. _`Bluetooth SIG company identifiers`: https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/ @@ -975,9 +1033,6 @@ .. _`Bluetooth Mesh model specification`: https://www.bluetooth.com/specifications/specs/mesh-model-1-1/ .. _`Bluetooth Mesh protocol specification`: https://www.bluetooth.com/specifications/specs/mesh-protocol/ -.. _`Bluetooth Mesh profile specification`: https://www.bluetooth.com/specifications/specs/ -.. _`Bluetooth NLC profile specifications`: https://www.bluetooth.com/specifications/specs/ - .. _`Bluetooth Mesh model overview`: https://www.bluetooth.com/bluetooth-resources/bluetooth-mesh-models/ .. _`Bluetooth Mesh glossary`: https://www.bluetooth.com/learn-about-bluetooth/recent-enhancements/mesh/mesh-glossary/ .. _`Bluetooth Mesh FAQ`: https://www.bluetooth.com/learn-about-bluetooth/bluetooth-technology/topology-options/le-mesh/mesh-faq/ @@ -989,6 +1044,9 @@ .. _`Auracast™`: https://www.bluetooth.com/auracast/how-it-works/ .. _`Basic Audio Profile specification`: https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/16212-BAP-html5/out/en/index-en.html#UUID-c9d31763-9ede-2270-6b9c-c042ae684cc3 +.. _`Distance estimation based on phase and amplitude information`: https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Core-60/out/en/architecture,-change-history,-and-conventions/architecture.html#UUID-a8d03618-5fcf-3043-2198-559653272b1b +.. _`Distance estimation based on RTT packets`: https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Core-60/out/en/architecture,-change-history,-and-conventions/architecture.html#UUID-9d4969af-baa6-b7e4-03ca-70b340877adf + .. ### Source: openmobilealliance.org .. _`SUPL context model`: https://www.openmobilealliance.org/release/SUPL/V1_0-20060127-C/OMA-AD-SUPL-V1_0-20060127-C.pdf#page=16 @@ -1064,7 +1122,7 @@ .. _`Windows Hardware Lab Kit`: https://docs.microsoft.com/en-us/windows-hardware/test/hlk/ -.. _`Swift Pair`: https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/bluetooth-swift-pair +.. _`Swift Pair`: https://learn.microsoft.com/en-us/windows-hardware/design/component-guidelines/bluetooth-swift-pair .. _`Windows path length limitations`: https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation @@ -1117,6 +1175,7 @@ .. _`DULT Manufacturer Network ID Registry`: https://www.ietf.org/archive/id/draft-detecting-unwanted-location-trackers-01.html#name-manufacturer-network-id-reg .. _`DULT Accessory Category Values table`: https://www.ietf.org/archive/id/draft-detecting-unwanted-location-trackers-01.html#_table-accessory-category-values .. _`DULT Sound maker`: https://www.ietf.org/archive/id/draft-detecting-unwanted-location-trackers-01.html#name-sound-maker +.. _`DULT motion detector`: https://www.ietf.org/archive/id/draft-detecting-unwanted-location-trackers-01.html#name-motion-detector .. ### Source: *.amazon.com @@ -1125,7 +1184,8 @@ .. _`Set up your AWS account`: https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html .. _`AWS Command Line Interface`: https://aws.amazon.com/cli/ .. _`AWS IoT Core policy examples`: https://docs.aws.amazon.com/iot/latest/developerguide/example-iot-policies.html -.. _`Security best practices in AWS IoT Core`: https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html +.. _`Security best practices in AWS IoT Core`: +.. _`AWS IoT Developer Guide: Security Best Practices`: https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html .. _`AWS IoT Core Server Authentication`: https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html .. _`CA certificates for server authentication in AWS IoT Core`: https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html#server-authentication-certs .. _`Authentication and access credentials`: https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html @@ -1140,7 +1200,6 @@ .. _`AWS IoT Developer Guide`: https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html .. _`AWS IoT MQTT`: https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html .. _`AWS IoT Developer Guide: Basic Policy Variables`: https://docs.aws.amazon.com/iot/latest/developerguide/basic-policy-variables.html -.. _`AWS IoT Developer Guide: Security Best Practices`: https://docs.aws.amazon.com/iot/latest/developerguide/security-best-practices.html .. _`AWS IoT jobs`: .. _`AWS IoT Developer Guide: Jobs`: https://docs.aws.amazon.com/iot/latest/developerguide/iot-jobs.html .. _`AWS IoT Developer Guide: Managing Jobs`: https://docs.aws.amazon.com/iot/latest/developerguide/create-manage-jobs.html @@ -1159,6 +1218,7 @@ .. ### Source: openthread.io .. _`OpenThread.io`: https://openthread.io/ +.. _`OpenThread Reference`: https://openthread.io/reference .. _`Device Types in the OpenThread portal`: https://openthread.io/guides/thread-primer/node-roles-and-types#device_types .. _`Thread Commissioning on OpenThread portal`: https://openthread.io/guides/build/commissioning .. _`OpenThread logging`: https://openthread.io/guides/build/logs @@ -1192,6 +1252,7 @@ .. _`Thread Group members`: https://www.threadgroup.org/thread-group .. _`Thread Group's certification information`: https://www.threadgroup.org/What-is-Thread/Certification .. _`Thread 1.3.0 Features White Paper`: https://www.threadgroup.org/Portals/0/documents/support/Thread1.3.0WhitePaper_07192022_3990_1.pdf +.. _`Thread 1.4 Features White Paper`: https://www.threadgroup.org/Portals/0/Documents/Thread_1.4_Features_White_Paper_September_2024.pdf .. _`Thread Group's Confluence wiki page`: https://threadgroup.atlassian.net/wiki/spaces/THREADTEST/pages/25900869/Supporting+Material @@ -1259,7 +1320,6 @@ .. _`Memfault: Error Tracking with Trace Events`: https://docs.memfault.com/docs/embedded/trace-events/ .. _`Memfault Demo CLI`: https://docs.memfault.com/docs/mcu/demo-cli/ -.. _`Memfault Dashboards`: https://app.memfault.com .. _`Memfault debugging`: https://docs.memfault.com/docs/platform/introduction#debugging .. _`Memfault OTA`: https://docs.memfault.com/docs/platform/introduction#ota .. _`Memfault monitoring`: https://docs.memfault.com/docs/platform/introduction#metrics @@ -1282,9 +1342,9 @@ .. _`nRF Cloud Device ID`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Properties/DeviceId.html .. _`nRF Cloud Device Shadows`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Properties/Shadows.html .. _`nRF Cloud Security`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Security/Security.html -.. _`nRF Cloud Auto-onboarding`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Associations/Provisioning.html#auto-onboarding +.. _`nRF Cloud Auto-onboarding`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Associations/Onboarding.html#auto-onboarding .. _`nRF Cloud device claiming`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/SecurityServices/ProvisioningService/ClaimingDevices/ClaimingDeviceOwnershipPortal.html -.. _`nRF Cloud Preconnect Provisioning`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Associations/Provisioning.html#preconnect-provisioning +.. _`nRF Cloud Preconnect Provisioning`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Associations/Onboarding.html#preconnect-onboarding .. _`nRF Cloud Just-In-Time-Provisioning`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Associations/Provisioning.html#just-in-time-provisioning .. _`nRF Cloud Onboarding`: .. _`nRF Cloud Provisioning`: https://docs.nordicsemi.com/bundle/nrf-cloud/page/Devices/Associations/Provisioning.html @@ -1340,6 +1400,7 @@ .. _`Distributed Compliance Ledger`: https://webui.dcl.csa-iot.org/ .. _`Matter 1.3 CSA blog post`: https://csa-iot.org/newsroom/matter-1-3-specification-released/ +.. _`CSA press release for Matter 1.4`: https://csa-iot.org/newsroom/matter-1-4-enables-more-capable-smart-homes/ .. ### Source: Chocolatey @@ -1480,13 +1541,13 @@ .. _`Developing Matter 1.0 products with nRF Connect SDK`: https://www.youtube.com/watch?v=9Ar13rMxGIk .. _`Accelerate cellular product development`: https://youtu.be/b1YW1J4aUps -.. _`How nRF9160 enables cellular IoT asset tracking`: https://webinars.nordicsemi.com/how-nrf9160-enables-cellular-iot-4 +.. _`How nRF9160 enables cellular IoT asset tracking`: https://webinars.nordicsemi.com/events/12113311018?n=How+nRF9160+enables+cellular+IoT+asset+tracking&event_id=12113311018 .. ### Source: onomondo.com .. _`Onomondo LTE-M coverage`: https://onomondo.com/product/coverage/lte-m-networks/ .. _`Onomondo NB-IoT coverage`: https://onomondo.com/product/coverage/nb-iot-networks/ -.. _`Onomondo SoftSIM integration with the nRF91 Series`: https://help.onomondo.com/en/how-to-integrate-the-onomondo-softsim-with-the-nrf9160-from-nordic-semiconductor +.. _`Onomondo SoftSIM integration with the nRF91 Series`: https://github.com/onomondo/nrf-softsim .. ### Source: bosch-sensortec.com @@ -1508,6 +1569,16 @@ .. _`ADXL372`: https://www.analog.com/en/products/adxl372.html#product-overview .. _`ADXL367`: https://www.analog.com/en/products/ADXL367.html#product-overview +.. ### Source: files.nordicsemi.com + +.. _`Twister test report for nRF Connect SDK v2.9.0-nRF54H20-rc1`: https://files.nordicsemi.com/ui/api/v1/download/contentBrowsing/NCS/external/release/v2.9.0-nrf54h20-rc1/test-report/twister_test_results_report.html?isNativeBrowsing=true +.. _`Hardware test report for nRF Connect SDK v2.9.0-nRF54H20-rc1`: https://files.nordicsemi.com/ui/api/v1/download/contentBrowsing/NCS/external/release/v2.9.0-nrf54h20-rc1/test-report/common_ncs_test_results_report.html?isNativeBrowsing=true +.. _`Twister test report for nRF Connect SDK v2.9.0`: https://files.nordicsemi.com/ui/api/v1/download/contentBrowsing/NCS/external/release/v2.9.0/test-report/twister_test_results_report.html?isNativeBrowsing=true +.. _`Hardware test report for nRF Connect SDK v2.9.0`: https://files.nordicsemi.com/ui/api/v1/download/contentBrowsing/NCS/external/release/v2.9.0/test-report/common_ncs_test_results_report.html?isNativeBrowsing=true +.. _`Twister test report for nRF Connect SDK v2.8.0`: https://files.nordicsemi.com/ui/api/v1/download/contentBrowsing/NCS/external/release/v2.8.0/test-report/twister_test_results_report.html?isNativeBrowsing=true +.. _`Hardware test report for nRF Connect SDK v2.8.0`: https://files.nordicsemi.com/ui/api/v1/download/contentBrowsing/NCS/external/release/v2.8.0/test-report/common_ncs_test_results_report.html?isNativeBrowsing=true +.. _`nRF Auracast configuration files`: https://files.nordicsemi.com/ui/repos/tree/General/ncs-audio/external/nRF-Aura-Config + .. ### Source: other (2 links or less from the same URL) .. _`Amazon Root CA 1`: https://www.amazontrust.com/repository/AmazonRootCA1.pem @@ -1529,7 +1600,7 @@ .. _`NFC Forum specification overview`: https://nfc-forum.org/build/specifications .. _`Bluetooth Secure Simple Pairing Using NFC`: https://nfc-forum.org/build/specifications#application-documents -.. _`ISO/IEC 7816-4`: https://www.iso.org/standard/54550.html +.. _`ISO/IEC 7816-4`: https://www.iso.org/standard/77180.html .. _`802.15.2-2003 specification`: https://standards.ieee.org/standard/802_15_2-2003.html @@ -1551,7 +1622,7 @@ .. _`Platform Security Architecture (PSA)`: https://www.psacertified.org/what-is-psa-certified/ -.. _`Mbed TLS`: https://developer.trustedfirmware.org/w/mbed-tls/ +.. _`Mbed TLS`: https://www.trustedfirmware.org/projects/mbed-tls/ .. _`Trusted Firmware M`: https://www.trustedfirmware.org/projects/tf-m/ .. _`Nanopb`: https://jpa.kapsi.fi/nanopb/ @@ -1660,7 +1731,7 @@ .. _`BICR register's PDF file`: https://res.developer.nordicsemi.com/res/nrf54H20/BICR/nRF54H20_BICR_0_11_0.pdf .. _`nRF Command Line Tools 10.22.1`: https://www.nordicsemi.com/Products/Development-tools/nrf-command-line-tools/download -.. _`documentation page on Github Authentication`: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-authentication-to-github +.. _`documentation page on Github Authentication`: .. _`documentation page on authentication methods`: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/about-authentication-to-github .. _`ssh-agent`: https://www.ssh.com/ssh/agent .. _`Connecting to GitHub with SSH`: https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh @@ -1695,6 +1766,9 @@ .. _`nRF54H20 SoC Binaries v0.5.0`: https://files.nordicsemi.com/artifactory/SDSC/external/nrf54h20_soc_binaries_v0.5.0.zip .. _`nRF54H20 SoC Binaries v0.6.2`: https://files.nordicsemi.com/artifactory/SDSC/external/nrf54h20_soc_binaries_v0.6.2.zip .. _`nRF54H20 SoC binaries v0.6.5`: https://files.nordicsemi.com/artifactory/SDSC/external/nrf54h20_soc_binaries_v0.6.5.zip +.. _`nRF54H20 SoC Binaries v0.7.0 for EngC DKs`: https://files.nordicsemi.com/artifactory/SDSC/external/nrf54h20_soc_binaries_v0.7.0_engc.zip +.. _`nRF54H20 SoC Binaries v0.7.0 for EngB DKs`: https://files.nordicsemi.com/artifactory/SDSC/external/nrf54h20_soc_binaries_v0.7.0_engb.zip +.. _`nRF54H20 SoC binaries v0.8.0`: https://files.nordicsemi.com/ui/native/SDSC/external/nrf54h20_soc_binaries_v0.8.0.zip .. _`BICR binary file`: https://files.nordicsemi.com/artifactory/SDSC/external/bicr_ext_loadcap.hex .. _`BICR new binary file`: https://files.nordicsemi.com/artifactory/SDSC/external/bicr/bicr.hex diff --git a/doc/nrf/nrf.doxyfile.in b/doc/nrf/nrf.doxyfile.in index 358e62635e3c..f0f758a67a04 100644 --- a/doc/nrf/nrf.doxyfile.in +++ b/doc/nrf/nrf.doxyfile.in @@ -279,13 +279,7 @@ TAB_SIZE = 8 # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) -ALIASES = "rst=\verbatim embed:rst" \ - "endrst=\endverbatim" \ - "rststar=\verbatim embed:rst:leading-asterisk" \ - "endrststar=\endverbatim" \ - "r=\verbatim embed:rst:leading-asterisk" \ - "er=\endverbatim" \ - "kconfig{1}=\verbatim embed:rst:inline :kconfig:option:`\1` \endverbatim" \ +ALIASES = "kconfig{1}=\verbatim \1 \endverbatim" \ "req=\xrefitem req \"Requirement\" \"Requirements\"" # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources @@ -2464,7 +2458,15 @@ PREDEFINED = __DOXYGEN__ \ "CONFIG_ZIGBEE_ROLE_END_DEVICE=y" \ "CONFIG_ZIGBEE_FACTORY_RESET=y" \ "CONFIG_NRF_CLOUD_GATEWAY=y" \ - "CONFIG_BT_CENTRAL" + "CONFIG_BT_CENTRAL" \ + "CONFIG_LTE_LC_CONN_EVAL_MODULE=y" \ + "CONFIG_LTE_LC_EDRX_MODULE=y" \ + "CONFIG_LTE_LC_NEIGHBOR_CELL_MEAS_MODULE=y" \ + "CONFIG_LTE_LC_PERIODIC_SEARCH_MODULE=y" \ + "CONFIG_LTE_LC_PSM_MODULE=y" \ + "CONFIG_LTE_LC_RAI_MODULE=y" \ + "CONFIG_LTE_LC_MODEM_SLEEP_MODULE=y" \ + "CONFIG_LTE_LC_TAU_PRE_WARNING_MODULE=y" # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The diff --git a/doc/nrf/protocols/bt/bt_mesh/configuring.rst b/doc/nrf/protocols/bt/bt_mesh/configuring.rst index 7eaf6d10a514..f88737707fb7 100644 --- a/doc/nrf/protocols/bt/bt_mesh/configuring.rst +++ b/doc/nrf/protocols/bt/bt_mesh/configuring.rst @@ -68,7 +68,6 @@ The provided values are meant as suggestions only, and should be individually ad * :kconfig:option:`CONFIG_HWINFO` - Enables the hardware information driver. The hardware information driver must be enabled to perform provisioning of the device. See the UUID section of :ref:`bt_mesh_dk_prov`. -* :kconfig:option:`CONFIG_PM_SINGLE_IMAGE` - Enables the use of :ref:`partition_manager` for single-image builds. * :kconfig:option:`CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE` - Sets the size of the partition used for settings storage. Use the option to increase the size if necessary. * :kconfig:option:`CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE` - Enables partial erase on supported hardware platforms. diff --git a/doc/nrf/protocols/bt/bt_mesh/overview/architecture.rst b/doc/nrf/protocols/bt/bt_mesh/overview/architecture.rst index 2f199a56e997..a48a044cf003 100644 --- a/doc/nrf/protocols/bt/bt_mesh/overview/architecture.rst +++ b/doc/nrf/protocols/bt/bt_mesh/overview/architecture.rst @@ -140,7 +140,7 @@ Destination node with a light bulb (Generic OnOff Server model) The following process takes place at this stage: 1. The broadcast is received by a node, and is passed from the bearer layer to its network layer. - #. The network layer will decript the packet and pass it to the transport layer. + #. The network layer will decrypt the packet and pass it to the transport layer. #. Once all transport layer segments are received in this manner, the assembled message is decrypted with an application key, and passed on to the access layer. #. The access layer checks the opcode, application key and destination address, and passes the message to all eligible models. #. If one of these models is a Generic OnOff Server model, the model parses the contents of the message, and notifies the application to turn the light bulb on or off. diff --git a/doc/nrf/protocols/bt/bt_mesh/overview/models.rst b/doc/nrf/protocols/bt/bt_mesh/overview/models.rst index 61f1feb79afe..4bc35d59646e 100644 --- a/doc/nrf/protocols/bt/bt_mesh/overview/models.rst +++ b/doc/nrf/protocols/bt/bt_mesh/overview/models.rst @@ -3,6 +3,10 @@ Bluetooth Mesh models ##################### +.. contents:: + :local: + :depth: 2 + To standardize communication between devices from different vendors, the Bluetooth® Mesh protocol specification defines an access layer, which routes mesh messages between the various *models* in a device. A Bluetooth Mesh model is a standardized software component that defines a series of states and related behaviors. The end-user applications are implemented as a set of mesh models. @@ -81,7 +85,7 @@ Server Client An element accessing a state is referred to as a client. In other words, a client reads and writes the server's states. - For example, the simplest client is a Generic OnOff Client (a binary switch) that is able to control a Generic OnOff Server via messages accepted by the Generic OnOff Server model. + For example, the simplest client is a Generic OnOff Client (a binary switch) that is able to control a Generic OnOff Server using messages accepted by the Generic OnOff Server model. Some models also include a *Setup Server* model instance. The two server model instances share the states of the server model, but accept different messages. diff --git a/doc/nrf/protocols/bt/bt_qualification/index.rst b/doc/nrf/protocols/bt/bt_qualification/index.rst index c5e89c71fa2e..1dd5c31a2235 100644 --- a/doc/nrf/protocols/bt/bt_qualification/index.rst +++ b/doc/nrf/protocols/bt/bt_qualification/index.rst @@ -7,6 +7,9 @@ Bluetooth qualification :local: :depth: 2 +.. note:: + This page has not been updated to reflect the new process defined in Qualification Program Reference Document (QPRD) v3. + Every product using the *Bluetooth®* Low Energy technology must be certified (qualified) by Bluetooth Special Interest Group (SIG). Only when your product is qualified, you will be authorized to do the following: @@ -134,4 +137,4 @@ Support For details about the qualification process, see the `Qualifications and listings`_ page or ask `Bluetooth Qualification Consultants`_ for advice. -In case of any questions regarding Nordic Semicondutor's qualified designs and their use in your products, contact Nordic Semiconductor's technical support on `DevZone`_. +In case of any questions regarding Nordic Semiconductor's qualified designs and their use in your products, contact Nordic Semiconductor's technical support on `DevZone`_. diff --git a/doc/nrf/protocols/bt/bt_solutions.rst b/doc/nrf/protocols/bt/bt_solutions.rst index 341341fd79eb..36b818dec2c5 100644 --- a/doc/nrf/protocols/bt/bt_solutions.rst +++ b/doc/nrf/protocols/bt/bt_solutions.rst @@ -1,6 +1,12 @@ +.. _ug_bt_solution: + Bluetooth solution areas ######################## +.. contents:: + :local: + :depth: 2 + Bluetooth® technology provides full stack support for a wide and expanding range of use cases. Audio streaming @@ -29,7 +35,7 @@ Support in the |NCS|: * :ref:`peripheral_uart` and :ref:`central_uart`: These samples implement a Nordic-defined GATT service and profile that give a simple TX/RX generic data pipe, providing UART communication over Bluetooth LE. -* :ref:`bluetooth-samples` (Zephyr Project): The Zephyr Project offers additional Bluetooth samples. +* :zephyr:code-sample-category:`bluetooth` (Zephyr Project): The Zephyr Project offers additional Bluetooth samples. These samples are not guaranteed to work as part of the |NCS|, but are helpful as starting point for a relevant use case. Device networks diff --git a/doc/nrf/protocols/bt/bt_stack_arch.rst b/doc/nrf/protocols/bt/bt_stack_arch.rst index 140265eb23e5..838b4650790d 100644 --- a/doc/nrf/protocols/bt/bt_stack_arch.rst +++ b/doc/nrf/protocols/bt/bt_stack_arch.rst @@ -1,3 +1,5 @@ +.. _ug_bt_stack_arch: + Bluetooth stack architecture ############################ diff --git a/doc/nrf/protocols/coexistence/index.rst b/doc/nrf/protocols/coexistence/index.rst index 68b699f34f06..be7d7eb2c30a 100644 --- a/doc/nrf/protocols/coexistence/index.rst +++ b/doc/nrf/protocols/coexistence/index.rst @@ -12,10 +12,10 @@ The following table lists wireless coexistence between protocols: :header-rows: 1 * - Wireless coexistence - - Bluetooth LE + - Bluetooth® LE - Thread - Zigbee - - Wi-Fi + - Wi-Fi® - LTE-M/NB-IoT * - Bluetooth LE - N/A diff --git a/doc/nrf/protocols/gazell/gzll.rst b/doc/nrf/protocols/gazell/gzll.rst index 757093600f64..1122fa2cd207 100644 --- a/doc/nrf/protocols/gazell/gzll.rst +++ b/doc/nrf/protocols/gazell/gzll.rst @@ -109,12 +109,12 @@ Gazell automatically notifies the application when a packet is received. To set up a Gazell application, complete the following steps: -1. Initialize Gazell Link Layer glue code using :c:func:`gzll_glue_init()`. -#. Initialize Gazell using :c:func:`nrf_gzll_init()` and choose either Host or Device. +1. Initialize Gazell Link Layer glue code using :c:func:`gzll_glue_init`. +#. Initialize Gazell using :c:func:`nrf_gzll_init` and choose either Host or Device. #. Reconfigure Gazell's default parameters. At a minimum, reconfigure the addresses and channels to avoid interfering with other Gazell networks. -#. Enable Gazell using :c:func:`nrf_gzll_enable()`. +#. Enable Gazell using :c:func:`nrf_gzll_enable`. #. Continue to either `Setting up a Device`_ to set up a Device, or `Setting up a Host`_ to setup a Host. @@ -123,11 +123,11 @@ Setting up a Device If the node is a Device, complete the following steps: -1. Add payloads to the TX FIFO using :c:func:`nrf_gzll_add_packet_to_tx_fifo()`. -#. Handle the returned ACK packet when the :c:func:`nrf_gzll_device_tx_success()` callback is called. +1. Add payloads to the TX FIFO using :c:func:`nrf_gzll_add_packet_to_tx_fifo`. +#. Handle the returned ACK packet when the :c:func:`nrf_gzll_device_tx_success` callback is called. - Fetch the payloads from the RX FIFO using :c:func:`nrf_gzll_fetch_packet_from_rx_fifo()`. -#. Handle the failed packet transmissions when the :c:func:`nrf_gzll_device_tx_failed()` callback is called. + Fetch the payloads from the RX FIFO using :c:func:`nrf_gzll_fetch_packet_from_rx_fifo`. +#. Handle the failed packet transmissions when the :c:func:`nrf_gzll_device_tx_failed` callback is called. Failed packets are automatically removed from the TX FIFO. @@ -136,19 +136,19 @@ Setting up a Host If the node is a Host, start listening by completing the following steps: -1. Handle the received data packets when the :c:func:`nrf_gzll_host_rx_data_ready()` callback is called. +1. Handle the received data packets when the :c:func:`nrf_gzll_host_rx_data_ready` callback is called. - Fetch the packets from the RX FIFO using :c:func:`nrf_gzll_fetch_from_rx_fifo()`. -#. Add any payloads to send to the TX FIFO using :c:func:`nrf_gzll_add_packet_to_tx_fifo()`. + Fetch the packets from the RX FIFO using :c:func:`nrf_gzll_fetch_from_rx_fifo`. +#. Add any payloads to send to the TX FIFO using :c:func:`nrf_gzll_add_packet_to_tx_fifo`. Disabling Gazell **************** -You can also disable Gazell at any time using the :c:func:`nrf_gzll_disable()` function. +You can also disable Gazell at any time using the :c:func:`nrf_gzll_disable` function. When this is called, Gazell completes any ongoing transmission or reception before being disabled. (That is, until the end of the current timeslot, see :ref:`gazell_timeslots`). -When the disabling operation is complete, Gazell calls the :c:func:`nrf_gzll_disabled()` function. +When the disabling operation is complete, Gazell calls the :c:func:`nrf_gzll_disabled` function. When this callback is completed, the Gazell CPU context, radio and Gazell timer stop. You can now call any of the configuration set functions, which will be valid, once Gazell is enabled again. @@ -158,9 +158,9 @@ Packet transactions A typical packet transaction between a Device and a Host consists of a Device initiating the transaction by sending a data packet to the Host and the Host sending an ACK packet in return. -When the Device receives an ACK packet, it knows that the initial packet was successfully transmitted and the :c:func:`nrf_gzll_device_tx_success()` callback function is called to notify the application of this. +When the Device receives an ACK packet, it knows that the initial packet was successfully transmitted and the :c:func:`nrf_gzll_device_tx_success` callback function is called to notify the application of this. -Similarly, when the Host receives the initial packet, the :c:func:`nrf_gzll_host_rx_data_ready()` callback function is called to notify to the application that a new packet has been received. +Similarly, when the Host receives the initial packet, the :c:func:`nrf_gzll_host_rx_data_ready` callback function is called to notify to the application that a new packet has been received. .. note:: @@ -176,7 +176,7 @@ A transaction can fail if the Host did not receive the initial packet from the D Gazell ignores packets with a failing Cyclic Redundancy Check (CRC). If a transaction fails, the Device makes an attempt to retransmit the initial packet to the Host until the ACK is finally received or the maximum number of transmission attempts is reached. -If the maximum number of transmission attempts is reached, the retransmissions stop and the :c:func:`nrf_gzll_device_tx_failed()` callback is called. +If the maximum number of transmission attempts is reached, the retransmissions stop and the :c:func:`nrf_gzll_device_tx_failed` callback is called. If only the ACK packet sent from the Host to the Device is lost, but the Host receives successfully both the initial packet and the subsequent retransmission attempts, the Host discards the repeated packets. The ACK packets are still sent in return to the Device. @@ -265,10 +265,10 @@ Callback queueing Gazell has an internal callback queue for queueing pending callbacks. This queue steps in when Gazell attempts to call a new callback function while the application is already servicing the previous one. -For example, if a new packet is received by the Host while the application is already servicing the :c:func:`nrf_gzll_host_rx_data_ready()` callback from a previously received packet, the callback for the latest packet is added to the callback queue and serviced at a later opportunity. -In this case, :c:func:`nrf_gzll_host_rx_data_ready()` is called once for every received packet, and the application does not need to handle the potential race condition scenario where a new packet is being received just before the application is about to exit the :c:func:`nrf_gzll_host_rx_data_ready()` function. +For example, if a new packet is received by the Host while the application is already servicing the :c:func:`nrf_gzll_host_rx_data_ready` callback from a previously received packet, the callback for the latest packet is added to the callback queue and serviced at a later opportunity. +In this case, :c:func:`nrf_gzll_host_rx_data_ready` is called once for every received packet, and the application does not need to handle the potential race condition scenario where a new packet is being received just before the application is about to exit the :c:func:`nrf_gzll_host_rx_data_ready` function. -In a Device, the :c:func:`nrf_gzll_device_tx_success()` callback is called once for every packet receiving an ACK, even when a new packet is receiving an ACK while the application is servicing the callback of a previously transmitted packet. +In a Device, the :c:func:`nrf_gzll_device_tx_success` callback is called once for every packet receiving an ACK, even when a new packet is receiving an ACK while the application is servicing the callback of a previously transmitted packet. The size of the callback queue is given by :c:macro:`NRF_GZLL_CONST_CALLBACK_QUEUE_LENGTH` but it cannot be configured. @@ -295,12 +295,12 @@ In addition, it may optionally change the RF channel it listens to. Relation between Host operation and timeslot -To set the period for the heartbeat, use the :c:func:`nrf_gzll_set_timeslot_period()` function. +To set the period for the heartbeat, use the :c:func:`nrf_gzll_set_timeslot_period` function. Frequency hopping ***************** -To ensure good coexistence performance with other radio products operating in the same 2.4 GHz frequency band as Gazell, such as Wi-Fi or Bluetooth, Gazell implements mechanisms for hopping between various radio frequency channels. +To ensure good coexistence performance with other radio products operating in the same 2.4 GHz frequency band as Gazell, such as Wi-Fi® or Bluetooth®, Gazell implements mechanisms for hopping between various radio frequency channels. When enabled, Gazell picks channels from a predefined channel table. @@ -338,7 +338,7 @@ This is because there is at least one transmission attempt for every timeslot. The ``channel_selection_policy`` parameter is used by a Device in sync to decide the initial channel to be used when sending a new packet to a Host (that is, for the first time the new packet is sent, not for the retransmission attempts). Once synchronized with the Host, the Device can send either on the current channel that it believes the Host is on or on the last successful channel. -To configure this, use the :c:func:`nrf_gzll_set_device_channel_selection_policy()` function. +To configure this, use the :c:func:`nrf_gzll_set_device_channel_selection_policy` function. The ``channel_selection_policy`` parameter can take the following two values: @@ -400,7 +400,7 @@ Once the ``sync_lifetime`` has expired on a Device, the internal timer is stoppe If you set the ``sync_lifetime`` to zero, the Device will never be in sync. The ``sync_lifetime`` should be chosen with regard to how often packets are required to be sent and the fact that synchronization can only be maintained for a finite time due to clock drift and radio interference. -To configure the sync lifetime, use the :c:func:`nrf_gzll_set_sync_lifetime()` function. +To configure the sync lifetime, use the :c:func:`nrf_gzll_set_sync_lifetime` function. The Device knows it is in sync when the number of retransmissions gets close to zero. The :c:struct:`nrf_gzll_device_tx_info_t` structure is passed to the Device callback functions, and it contains the number of transmit attempts required for the current packet. @@ -423,7 +423,7 @@ The default channel tables require adjustment. Depending on your project, do one of the following: * Edit the :file:`gzll_params.h` file used in the nRF24L IC projects. -* Use the :c:func:`nrf_gzll_set_channel_table()` function in the nRF52 Series projects. +* Use the :c:func:`nrf_gzll_set_channel_table` function in the nRF52 Series projects. Timeslot periods ================ @@ -446,7 +446,7 @@ In addition, the relation between the Device and Host timing parameters should b Depending on your project, do one of the following: * Edit the :file:`gzll_params.h` file used in the nRF24L IC projects. -* Use the :c:func:`nrf_gzll_set_timeslot_period()` function in the nRF52 Series projects (nRF52 Series Gazell timeslot period = 0.5*GZLL_RX_PERIOD). +* Use the :c:func:`nrf_gzll_set_timeslot_period` function in the nRF52 Series projects (nRF52 Series Gazell timeslot period = 0.5*GZLL_RX_PERIOD). Emulating legacy Gazell roles ============================= diff --git a/doc/nrf/protocols/lte/index.rst b/doc/nrf/protocols/lte/index.rst index c115ddf1fa85..aa3a047dc7c2 100644 --- a/doc/nrf/protocols/lte/index.rst +++ b/doc/nrf/protocols/lte/index.rst @@ -38,7 +38,7 @@ It is designed for indoor coverage, low cost, and long battery life. NB-IoT operates in a small radio frequency band of 200 kHz. It is ideal for applications like smart metering, environmental monitoring, and smart lighting. -nRF91 Series devices such as nRF9151 DK, nRF9161 DK, nRF9160 DK, and Thingy:91 support both LTE-M and NB-IoT technologies. +nRF91 Series devices such as nRF9151 DK, nRF9161 DK, nRF9160 DK, Thingy:91, and Thingy:91 X support both LTE-M and NB-IoT technologies. Comparison between LTE-M and NB-IoT =================================== @@ -128,7 +128,7 @@ SIM card support ================ SIMs that are used with the nRF91 Series devices must support LTE-M, NB-IoT, or both. -The iBasis SIM is bundled with the nRF9160 DK and Thingy:91, the Onomondo SIM with an nRF91x1 DK, and the Wireless Logic SIM card with the nRF9151 DK. +The iBasis SIM is bundled with the nRF9160 DK and Thingy:91, the Onomondo SIM with an nRF91x1 DK and Thingy:91 X, and the Wireless Logic SIM card with the nRF9151 DK and Thingy:91 X. Check the `iBasis IoT network coverage`_, `Onomondo LTE-M coverage`_, `Onomondo NB-IoT coverage`_, or `Wireless Logic LTE-M/NB-IoT network coverage`_ pages to see the network coverage for different countries, depending on the SIM card you are using. Software SIM diff --git a/doc/nrf/protocols/matter/end_product/bootloader.rst b/doc/nrf/protocols/matter/end_product/bootloader.rst index edc24066e9ad..aa9fb399b96f 100644 --- a/doc/nrf/protocols/matter/end_product/bootloader.rst +++ b/doc/nrf/protocols/matter/end_product/bootloader.rst @@ -57,7 +57,7 @@ Consider the following when defining partitions for your end product: Trying to perform DFU between applications that use incompatible partition sizes can result in unwanted application behavior, depending on which partitions are overlapping. In some cases, this may corrupt some partitions; in others, this can lead to a DFU failure. * The MCUboot requires its `mcuboot_primary` and `mcuboot_secondary` partitions to be located under offsets being aligned to the 4 kB flash page size. - Selecting offset values that are not aligned to 4 kB for these partititions will lead to erase failures, and result in a DFU failure. + Selecting offset values that are not aligned to 4 kB for these partitions will lead to erase failures, and result in a DFU failure. Settings partition ================== diff --git a/doc/nrf/protocols/matter/end_product/certification.rst b/doc/nrf/protocols/matter/end_product/certification.rst index 3c4e71e4ec45..7abe007c1a75 100644 --- a/doc/nrf/protocols/matter/end_product/certification.rst +++ b/doc/nrf/protocols/matter/end_product/certification.rst @@ -217,8 +217,8 @@ You can also find more information about the Bluetooth QDID in the :ref:`Bluetoo .. _ug_matter_device_certification_reqs_mowifi: -Matter over Wi-Fi certification requirements -============================================ +Matter over Wi-Fi® certification requirements +============================================= The following table lists Matter over Wi-Fi certification requirements for when a product moves to production. @@ -357,7 +357,7 @@ Especially, make sure that: * ``ClusterRevision`` attributes for all clusters match the value of the Matter stack version that you want to use for your application certification. * ``Attribute List``, ``Accepted Command List`` and ``Generated Command List`` attributes for all clusters contain all the values that need to be there and nothing more. * Only the clusters, attributes and commands required by your application are enabled. - For example, the default configurations for the samples use both Thread Network Diagnostics and Wi-Fi Network Diagnostics clusters. + For example, the default configurations for the samples use both Thread Network Diagnostics and Wi-Fi Network Diagnostics clusters, and the Network Commissioning cluster has attributes for both Thread and Wi-Fi protocols enabled. This is done due to the Thread and Wi-Fi platforms common maintenance reasons, but should not be used in the final product. See the :ref:`ug_matter_creating_accessory` page for how to configure your application using the ZAP Tool. diff --git a/doc/nrf/protocols/matter/end_product/ecosystems_certification.rst b/doc/nrf/protocols/matter/end_product/ecosystems_certification.rst index 8b4bba96d696..e9c4b50c54c4 100644 --- a/doc/nrf/protocols/matter/end_product/ecosystems_certification.rst +++ b/doc/nrf/protocols/matter/end_product/ecosystems_certification.rst @@ -53,12 +53,12 @@ This means that if you create a Matter product based on the |NCS|, you can appro You can do this by filling the Reference APID field when you register your product on Amazon's developer page. Use one of the following values: -+----------------------------------------------------------+-----------------------+ -| Matter platform variant | Reference Design APID | -+==========================================================+=======================+ -| :ref:`nRF52840 DK ` (Matter over Thread) | ZNwt | -+----------------------------------------------------------+-----------------------+ -| :ref:`nRF5340 DK ` (Matter over Thread) | xzNd | -+----------------------------------------------------------+-----------------------+ -| :ref:`nRF7002 DK ` (Matter over Wi-Fi)| jyjh | -+----------------------------------------------------------+-----------------------+ ++-----------------------------------------------------------+-----------------------+ +| Matter platform variant | Reference Design APID | ++===========================================================+=======================+ +| :ref:`nRF52840 DK ` (Matter over Thread) | ZNwt | ++-----------------------------------------------------------+-----------------------+ +| :ref:`nRF5340 DK ` (Matter over Thread) | xzNd | ++-----------------------------------------------------------+-----------------------+ +| :ref:`nRF7002 DK ` (Matter over Wi-Fi®)| jyjh | ++-----------------------------------------------------------+-----------------------+ diff --git a/doc/nrf/protocols/matter/end_product/last_fabric_removal_delegate.rst b/doc/nrf/protocols/matter/end_product/last_fabric_removal_delegate.rst index 8c57bafbf0de..6ab8881e1f43 100644 --- a/doc/nrf/protocols/matter/end_product/last_fabric_removal_delegate.rst +++ b/doc/nrf/protocols/matter/end_product/last_fabric_removal_delegate.rst @@ -55,7 +55,7 @@ You can choose one of the following reactions to the last fabric removal and ins * Remove all stored non-volatile data (both network credentials and application-specific data) and reboot. * Remove the network credentials, keep application-specific non-volatile data, and start advertising Bluetooth LE Matter service. -To read more about the reactions to the last fabric and learn how to set the related Kconfigs, see the :ref:`ug_matter_device_advanced_kconfigs` page. +To read more about the reactions to the last fabric and learn how to set the related Kconfig options, see the :ref:`ug_matter_device_advanced_kconfigs` page. Custom last fabric removal delegate =================================== diff --git a/doc/nrf/protocols/matter/end_product/security.rst b/doc/nrf/protocols/matter/end_product/security.rst index fffb990d79fe..9c19f80f3e98 100644 --- a/doc/nrf/protocols/matter/end_product/security.rst +++ b/doc/nrf/protocols/matter/end_product/security.rst @@ -7,21 +7,46 @@ Security :local: :depth: 3 -Nordic Matter samples leverage security features supported in the |NCS| that can be divided into three major categories: +Nordic Matter samples leverage :ref:`security` features supported in the |NCS| that can be divided into four major categories: +* Secure processing environment * Cryptography * Trusted storage * Securing production devices In the following sections you will learn more details about each listed category. +Secure processing environment +***************************** + +Depending on the board, Matter samples can use a secure processing environment. + +nRF54L with Trusted Firmware-M (TF-M) +===================================== + +On the nRF54L SoC, Matter samples support :ref:`app_boards_spe_nspe` with Trusted Firmware-M (TF-M). +All cryptographic operations within the Matter stack are performed by utilizing the `Platform Security Architecture (PSA)`_ API and executed in the secure TF-M environment. +The secure materials like Matter Session keys and other keys, except for the DAC private key, are stored in the TF-M secure storage using the :ref:`tfm_encrypted_its` module. +Matter samples use the full TF-M library, so you cannot use the :ref:`tfm_minimal_build` version of TF-M. + +To build a Matter sample with the TF-M support, :ref:`build ` for the :ref:`board target ` with the ``/ns`` variant. + +To configure partition layout for your application, you can edit the :file:`pm_static_nrf54l15dk_nrf54l15_cpuapp_ns.yml` file that is available in each sample directory. +To read more about the TF-M partitioning, see :ref:`ug_tfm_partition_alignment_requirements`. +While using TF-M, the application partition size and available RAM space for the application is lower than without TF-M. +You must keep this in mind and calculate the available space for the application partition. +The recommended values are provided in the :ref:`ug_matter_hw_requirements_layouts` section. + +By default, the DAC private key is stored in the KMU storage while using TF-M. +See the :ref:`matter_platforms_security_dac_priv_key_kmu` section for more information. + Cryptography ************ Depending on the networking backend, the |NCS| Matter samples currently use the following APIs to implement cryptographic operations: * PSA Cryptography API for Thread networking. -* Mbed TLS for Wi-Fi networking. +* Mbed TLS for Wi-Fi® networking. Support for PSA Cryptography API for the Wi-Fi backend is planned for a future release. Both APIs are integrated in the :ref:`nrf_security` library. @@ -56,9 +81,9 @@ An important setting, that depends on the hardware platform in use, is the way o The recommended and the most secure option is to use :ref:`lib_hw_unique_key` (HUK) library. HUK support is automatically enabled with the :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_KEY_DERIVE_FROM_HUK` Kconfig option for compatible configurations. -The HUK library is supported for the nRF52840, nRF5340, and nRF54L15 platforms, but for :ref:`matter_samples` in the |NCS|, it is only enabled for the nRF5340 and NRF54L15 platforms: +The HUK library is supported for the nRF52840, nRF5340, and nRF54L platforms, but for :ref:`matter_samples` in the |NCS|, it is only enabled for the nRF5340 and nRF54L platforms: -* For the nRF5340 and nRF54L15 platforms, the HUK is generated at first boot and stored in the Key Management Unit (KMU). +* For the nRF5340, nRF54L platforms, the HUK is generated at first boot and stored in the Key Management Unit (KMU). No changes to the existing partition layout are needed for products in the field. * For the nRF54L15 NS platform, the HUK generation and management is handled by the Trusted Firmware-M (TF-M) library. * For the nRF52840 platform, AEAD keys are derived with a SHA-256 hash (:kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_KEY_HASH_UID`). @@ -111,13 +136,20 @@ This is a reference configuration that can be modified in the production firmwar - PSA Crypto API - CRACEN [2]_ - Yes - - Trusted Storage library + Hardware Unique Key (HUK) + - Trusted Storage library + Hardware Unique Key (HUK) + Key Management Unit (KMU) * - nRF54L15 SoC + Trusted Firmware-M (TF-M) - Thread - PSA Crypto API - CRACEN - Yes - - Trusted Firmware-M (TF-M) + - Trusted Firmware-M (TF-M) + Key Management Unit (KMU) + * - nRF54L10 SoC + - Thread + - PSA Crypto API + - CRACEN [2]_ + - Yes + - Trusted Storage library + Hardware Unique Key (HUK) + Key Management Unit (KMU) + .. [1] The CryptoCell backend is used in parallel with the Oberon backend. By default, the CryptoCell backend is used only for Random Number Generation (RNG) and the AEAD key derivation driver. @@ -129,6 +161,95 @@ This is a reference configuration that can be modified in the production firmwar To use the Oberon backend for specific cryptographic operations supported by both drivers, disable those operations in the CRACEN driver, as it takes priority when both are enabled. See the :ref:`nrf_security_drivers` documentation for more information. +.. _matter_platforms_security_dac_priv_key: + +Storing Device Attestation Certificate private key +************************************************** + +In Matter samples based on the PSA crypto API, the Device Attestation Certificate's private key, which exists in the factory data set, can be migrated to secure storage. +The secure storage used depends on the platform and the cryptographic backend. + +The migration of the DAC private key from the factory data set to secure storage is controlled by the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY` Kconfig option and set to ``y`` by default. + +Currently, this feature is available only for the PSA crypto API. +See the following table to learn about the default secure storage backends for the DAC private key and the available secure storage backends for each platform: + +.. list-table:: Matter secure storage + :widths: auto + :header-rows: 1 + + * - Platform + - Default secure storage backend for DAC private key + - Available secure storage backends + * - nRF52840 SoC + - Trusted Storage library + SHA-256 hash (Zephyr Settings) + - Trusted Storage library + SHA-256 hash (Zephyr Settings) + * - nRF5340 SoC + - Trusted Storage library + Hardware Unique Key (Zephyr Settings) + - | Trusted Storage library + Hardware Unique Key (Zephyr Settings), + | Trusted Storage library + SHA-256 hash (Zephyr Settings) + * - nRF5340 SoC + nRF7002 companion IC + - Not available + - Not available + * - nRF54L15 SoC + - Key Management Unit (KMU) + - | Key Management Unit (KMU), + | Trusted Storage library + Hardware Unique Key (Zephyr Settings), + | Trusted Storage library + SHA-256 hash (Zephyr Settings) + * - nRF54L15 SoC + Trusted Firmware-M (TF-M) + - Key Management Unit (KMU) + - | Key Management Unit (KMU), + | Trusted Firmware-M Storage (TF-M) + * - nRF54L10 SoC + - Key Management Unit (KMU) + - | Key Management Unit (KMU), + | Trusted Storage library + Hardware Unique Key (Zephyr Settings), + | Trusted Storage library + SHA-256 hash (Zephyr Settings) + +If you migrate the DAC private key to storage based on Zephyr Settings storage, you cannot use the :kconfig:option:`CONFIG_CHIP_FACTORY_RESET_ERASE_SETTINGS` Kconfig option. +This is because the factory reset feature will erase the secure storage, including the DAC private key, which has been removed from the factory data. +In this case, the DAC private key will be lost, and the device will not be able to authenticate to the network. + +You can use the :kconfig:option:`CONFIG_CHIP_FACTORY_RESET_ERASE_SETTINGS` Kconfig option if you store the DAC private key in the KMU or TF-M secure storage (available on nRF54L SoCs only). + +.. _matter_platforms_security_dac_priv_key_its: + +DAC in Trusted Storage library +============================== + +The Device Attestation Certificates private key can be stored in the Trusted Storage library. +The key is encrypted with the AEAD key derived from the Hardware Unique Key (HUK) or a SHA-256 hash. +This storage backend is selected by default for all platforms that support the PSA crypto API, except for the nRF54L Series, which uses Key Management Unit (KMU). + +To enable storing the DAC private key in the Trusted Storage library, set the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_ITS` Kconfig option to ``y``. +To select which encryption to use, set one of the following Kconfig options: + +- To use key derivation from HUK, set :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_KEY_DERIVE_FROM_HUK` to ``y``. +- To use key derivation from a SHA-256 hash, set :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_KEY_HASH_UID` to ``y``. + +Encryption with the AEAD key derived from the Hardware Unique Key (HUK) is available only on the nRF5340 and nRF54L platforms. + +.. _matter_platforms_security_dac_priv_key_kmu: + +DAC in Key Management Unit (KMU) +================================ + +The Key Management Unit (KMU) is a hardware peripheral that provides secure storage for cryptographic keys. +It is available in the nRF54L Series SoCs and can be used to store the DAC private key. +This storage backend can be used with Trusted Firmware-M (TF-M). + +Storing the DAC private key in the KMU is controlled by the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU` Kconfig option and set to ``y`` by default. + +You can additionally encrypt the DAC private key in the KMU storage by setting the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED` Kconfig option to ``y``. +This operation requires two additional KMU slots to store the nonce and the authentication tag, making the total number of slots used four. +If the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_ENCRYPTED` Kconfig option is set to ``n``, then the DAC private key is stored in the KMU without encryption and utilizes two KMU slots. + +By default, the DAC private key occupies the last slots dedicated for application purposes. +For the non-encrypted version, it occupies last two slots (178 and 179), and for the encrypted version, it occupies the last four slots (176-179). +You can change the default slots by setting the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA_DAC_PRIV_KEY_KMU_SLOT` Kconfig option to the first slot number of the desired slots, making sure that all slots fit within the possible range. +This means you can set it to slot numbers 0-176 for encrypted, or 0-178 for non-encrypted. +To read more about KMU slots, see the :ref:`ug_nrf54l_crypto_kmu_slots` section of the :ref:`ug_nrf54l_cryptography` page, which details the KMU peripheral. + Securing production devices *************************** diff --git a/doc/nrf/protocols/matter/end_product/test_event_triggers.rst b/doc/nrf/protocols/matter/end_product/test_event_triggers.rst index 417234ab7f9d..a1373305690f 100644 --- a/doc/nrf/protocols/matter/end_product/test_event_triggers.rst +++ b/doc/nrf/protocols/matter/end_product/test_event_triggers.rst @@ -37,7 +37,7 @@ Default test event triggers *************************** You can use the pre-defined common test event triggers in your application. -To disable them, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS_REGISTER_DEFAULTS` Kconfig option to ``n``. +To disable them, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS_REGISTER_DEFAULTS` Kconfig option to ``n``. The following table lists the available triggers and their activation codes: @@ -65,7 +65,7 @@ The following table lists the available triggers and their activation codes: The maximum time delay is UINT16_MAX ms. The value is provided in HEX format. * - Block the Matter thread - - :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` = ``y``, and :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_DEFAULT` = ``y`` + - :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` = ``y``, and :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_DEFAULT` = ``y`` - Block the Matter thread for specific amount of time. You can use this event trigger to check the :ref:`Matter Watchdog ` functionality. - ``0xFFFFFFFF20000000`` - ``0xFFFFFFFF2000FFFF`` @@ -73,7 +73,7 @@ The following table lists the available triggers and their activation codes: The maximum time is UINT16_MAX s. The value is provided in HEX format. * - Block the Main thread - - :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` = ``y``, and :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_DEFAULT` = ``y`` + - :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` = ``y``, and :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_DEFAULT` = ``y`` - Block the Main thread for specific amount of time. You can use this event trigger to check the :ref:`Matter Watchdog ` functionality. - ``0xFFFFFFFF30000000`` - ``0xFFFFFFFF3000FFFF`` @@ -81,21 +81,21 @@ The following table lists the available triggers and their activation codes: The maximum time is UINT16_MAX s. The value is provided in HEX format. * - Diagnostic Logs User Data - - Enabled ``Diagnostic Logs`` cluster, and either the snippet `diagnostic-logs` attached (``-D_SNIPPET=diagnostic-logs``) or both :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` = ``y`` and :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_END_USER_LOGS` = ``y``. + - Enabled ``Diagnostic Logs`` cluster, and either the snippet ``matter-diagnostic-logs`` attached (``-D_SNIPPET=matter-diagnostic-logs``) or both :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` = ``y`` and :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_END_USER_LOGS` = ``y``. - Trigger writing a specific number of ``u`` characters to the user diagnostics logs. The number of characters is determined by the value at the end of the event trigger value. The current supported maximum is 1023 bytes for single trigger call, and 4096 bytes of total data written. - ``0xFFFFFFFF40000000`` - ``0xFFFFFFFF40000400`` - The range of ``0x0000`` - ``0x0400`` (from 1 Bytes to 1024 Bytes), ``0x0000`` to clear logs. * - Diagnostic Logs Network Data - - Enabled ``Diagnostic Logs`` cluster, and either the snippet `diagnostic-logs` attached (``-D_SNIPPET=diagnostic-logs``) or both :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` = ``y`` and :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_NETWORK_LOGS` = ``y``. - - Trigger writing a specific amount of ``n`` characters to the network diagnostics logs. - The amount of characters is determined by the value at the end of the event trigger value. + - Enabled ``Diagnostic Logs`` cluster, and either the snippet ``matter-diagnostic-logs`` attached (``-D_SNIPPET=matter-diagnostic-logs``) or both :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` = ``y`` and :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_NETWORK_LOGS` = ``y``. + - Trigger writing a specific number of ``n`` characters to the network diagnostics logs. + The number of characters is determined by the value at the end of the event trigger value. The current supported maximum is 1023 bytes for single trigger call, and 4096 bytes of total data written. - ``0xFFFFFFFF50000000`` - ``0xFFFFFFFF50000400`` - The range of ``0x0000`` - ``0x0400`` (from 1 Bytes to 1024 Bytes), ``0x0000`` to clear logs. * - Diagnostic Crash Logs - - Either the snippet `diagnostic-logs` attached (``-D_SNIPPET=diagnostic-logs``) or both :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` = ``y`` and :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_CRASH_LOGS` = ``y``, and enabled ``Diagnostic Logs`` cluster. + - Either the snippet ``matter-diagnostic-logs`` attached (``-D_SNIPPET=matter-diagnostic-logs``) or both :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` = ``y`` and :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_CRASH_LOGS` = ``y``, and enabled ``Diagnostic Logs`` cluster. - Trigger a simple crash that relies on execution of the undefined instruction attempt. - ``0xFFFFFFFF60000000`` - No additional value supported. @@ -107,54 +107,66 @@ The following table lists the available triggers and their activation codes: The maximum fabric index value depends on the current device's settings. * - Smoke CO alarm - Smoke critical alarm - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger a smoke alarm with critical severity level + - Trigger a smoke alarm with critical severity level. - ``0x005c00000000009c`` - No additional value supported. * - Smoke CO alarm - Smoke alarm clean - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger an action that ceases smoke alarm + - Trigger an action that ceases smoke alarm. - ``0x005c0000000000a0`` - No additional value supported. * - Smoke CO alarm - CO critical alarm - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger a CO alarm with critical severity level + - Trigger a CO alarm with critical severity level. - ``0x005c00000000009d`` - No additional value supported. * - Smoke CO alarm - CO alarm clean - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger an action that ceases CO alarm + - Trigger an action that ceases CO alarm. - ``0x005c0000000000a1`` - No additional value supported. * - Smoke CO alarm - battery low level alarm - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger a battery low level alarm + - Trigger a battery low level alarm. - ``0x005c00000000009e`` - No additional value supported. * - Smoke CO alarm - battery low level alarm clean - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger an action that ceases battery low level alarm + - Trigger an action that ceases battery low level alarm. - ``0x005c0000000000a5`` - No additional value supported. * - Smoke CO alarm - hardware fault alarm - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger a hardware fault alarm + - Trigger a hardware fault alarm. - ``0x005c000000000093`` - No additional value supported. * - Smoke CO alarm - hardware fault alarm clean - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger an action that ceases hardware fault alarm + - Trigger an action that ceases hardware fault alarm. - ``0x005c0000000000a3`` - No additional value supported. * - Smoke CO alarm - end of service alarm - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger a end of service alarm + - Trigger an end of service alarm. - ``0x005c00000000009a`` - No additional value supported. * - Smoke CO alarm - end of service alarm clean - Only for :ref:`Matter Smoke CO Alarm ` - - Trigger an action that ceases end of service alarm + - Trigger an action that ceases end of service alarm. - ``0x005c0000000000aa`` - No additional value supported. + * - Power source on + - Only for :ref:`Matter Smoke CO Alarm ` + - Trigger an action that changes power source state to active. + - ``0xFFFFFFFF80000000`` - ``0xFFFFFFFF80000001`` + - The range of ``0x0`` - ``0x1`` is the endpoint ID that has power source cluster instance enabled. + An endpoint with ID ``0x0`` uses a wired power source and endpoint with ID ``0x1`` uses a battery power source. + * - Power source off + - Only for :ref:`Matter Smoke CO Alarm ` + - Trigger an action that changes power source state to unavailable. + - ``0xFFFFFFFF80010000`` - ``0xFFFFFFFF80010001`` + - The range of ``0x0`` - ``0x1`` is the endpoint ID that has power source cluster instance enabled. + An endpoint with ID ``0x0`` uses a wired power source and endpoint with ID ``0x1`` uses a battery power source. * - Door lock jammed - :kconfig:option:`CONFIG_CHIP_DEVICE_PRODUCT_ID` = ``32774`` - Simulate the jammed lock state. @@ -261,7 +273,7 @@ A new event trigger consists of two fields: ``Mask``, and ``Callback``. * The ``Callback`` field is a callback function that will be invoked when the device receives a corresponding activation code. The maximum number of event triggers that can be registered is configurable. -To adjust this limit, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS_MAX` Kconfig option to the desired value. +To adjust this limit, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS_MAX` Kconfig option to the desired value. To register a new test event trigger, follow these steps: @@ -341,7 +353,7 @@ Use the following example as a guide to register an existing event trigger handl /* Remember to check the CHIP_ERROR return code */ -If the returning ``CHIP_ERROR`` code is equal to ``CHIP_ERROR_NO_MEMORY``, you need to increase the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS_MAX_TRIGGERS_DELEGATES` Kconfig option to the higher value. +If the returning ``CHIP_ERROR`` code is equal to ``CHIP_ERROR_NO_MEMORY``, you need to increase the :ref:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS_MAX_TRIGGERS_DELEGATES` Kconfig option to the higher value. For example, you can register and use the ``OTATestEventTriggerHandler`` handler and trigger pre-defined Matter OTA DFU behaviors using the following code: @@ -355,7 +367,7 @@ Usage ***** The Matter test event triggers feature is enabled by default for all Matter samples. -To disable it, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS` Kconfig option to ``n``. +To disable it, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_TEST_EVENT_TRIGGERS` Kconfig option to ``n``. To trigger a specific event on the device, run the following command: diff --git a/doc/nrf/protocols/matter/end_product/versioning.rst b/doc/nrf/protocols/matter/end_product/versioning.rst index 3f572e3b7e4b..fe88bbed809c 100644 --- a/doc/nrf/protocols/matter/end_product/versioning.rst +++ b/doc/nrf/protocols/matter/end_product/versioning.rst @@ -16,13 +16,14 @@ There are two primary approaches for maintaining versioning: * Utilizing a :file:`VERSION` file as detailed on the :ref:`app-version-details` page of the Zephyr Project documentation. This method involves defining the version information in a specific file format. -* Implementing dedicated Kconfig configurations. - This approach uses Kconfig system configurations to set and manage the versioning details. +* Utilizing dedicated Kconfig configurations. + This approach uses Kconfig options to set and manage the versioning details. Choose the approach that best aligns with your project requirements and infrastructure. .. note:: - These approaches should not be used simultaneously. + These approaches cannot be used simultaneously. + The Kconfig options for configuring the versioning details are unavailable if the :file:`VERSION` file is present. Using :file:`VERSION` file ************************** @@ -35,6 +36,7 @@ To implement versioning based on a :file:`VERSION` file, you must create a file VERSION_MINOR = PATCHLEVEL = VERSION_TWEAK = + EXTRAVERSION = .. note:: You must assign a value to at least one of the variables. @@ -48,13 +50,20 @@ For example: VERSION_MINOR = 5 PATCHLEVEL = 99 VERSION_TWEAK = 0 + EXTRAVERSION = dev -A :file:`VERSION` file is responsible for assigning values in the following format for: +The :file:`VERSION` file is used to derive the firmware version in the following format for: -* MCUboot version: ``MAJOR . MINOR . PATCHLEVEL + TWEAK``. - The above example would be formatted as ``2 . 5 . 99 + 0``. -* Matter OTA: in the 32-bit integer where each variable is 8 bits long. +* MCUboot image: ``MAJOR.MINOR.PATCHLEVEL+TWEAK``. + The above example would be formatted as ``2.5.99+0``. +* Matter OTA image: 32-bit integer where each numeric variable is represented by 8 bits within the integer. The above example would be formatted as ``0x02056300``. +* Informational purposes, for example displayed in the ecosystem applications: + + * If ``EXTRAVERSION`` is non-empty: ``MAJOR.MINOR.PATCHLEVEL-EXTRA+TWEAK``. + The above example would be formatted as ``2.5.99-dev+0``. + * Otherwise: ``MAJOR.MINOR.PATCHLEVEL+TWEAK``. + The above example would be formatted as ``2.5.99+0``. Using Kconfig options ********************* diff --git a/doc/nrf/protocols/matter/end_product/watchdog.rst b/doc/nrf/protocols/matter/end_product/watchdog.rst index 1f184b377cf1..ac1672504df1 100644 --- a/doc/nrf/protocols/matter/end_product/watchdog.rst +++ b/doc/nrf/protocols/matter/end_product/watchdog.rst @@ -27,16 +27,39 @@ This approach eliminates the need to directly call the ``Feed()`` method in your A time window specifies the period within which the feeding signal must be sent to each watchdog channel to reset the timer and prevent the device from rebooting. If the feeding signal is sent after the time window has elapsed, it does not prevent the device from rebooting. -To enable the Matter watchdog feature, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` Kconfig option to ``y``. +To enable the Matter watchdog feature in a Matter sample, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` Kconfig option to ``y``. The feature is enabled by default for the release build type in all Matter samples and applications. -To set the timeout for the watchdog timer, configure the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_TIMEOUT` with a value in milliseconds. +To set the timeout for the watchdog timer, configure the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_TIMEOUT` with a value in milliseconds. By default, the timeout is set to 10 seconds. +.. note:: + + The Matter watchdog implementation demonstrates how to use the Zephyr watchdog API and is specifically designed for Matter samples within the |NCS|. + If you want to use it in your application, refer to the source code and Kconfig options from this implementation. + +.. _ug_matter_device_watchdog_pause_mode: + +Matter watchdog pause mode +************************** + +You can set the Matter watchdog to pause when the CPU is in idle (sleep) mode or when the CPU is halted by the debugger. +This means the watchdog timer will stop counting down when the CPU is idle or halted. + +If pause mode is disabled, the watchdog must be fed within a specified time window, regardless of the CPU state, otherwise the device will reboot. +If pause mode is enabled, the device will only reboot if the task feeding the watchdog is blocked for longer than the set time window. +Pause mode is less accurate and may cause the device to reboot later than expected, but it allows feeding the watchdog only when the CPU is active. +Non-pause mode requires periodic feeding to avoid a timeout, impacting power consumption as the CPU must wake up periodically. + +To enable pause mode while CPU is in the idle state, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_PAUSE_IN_SLEEP` Kconfig option to ``y``. +To enable pause mode during debugging, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_PAUSE_ON_DEBUG` Kconfig option to ``y``. + +By default, Matter samples enable the pause mode only during debugging. + Creating a Matter watchdog source ********************************* -The Matter watchdog feature is based on the ``Nrf::WatchdogSource`` class, which is located in the :file:`samples/matter/common/watchdog/watchdog.h` file. +The Matter watchdog feature is based on the ``Nrf::WatchdogSource`` class, which is located in the :file:`samples\matter\common\src\watchdog\watchdog.h` file. Each Matter watchdog source constructor includes two optional arguments: * ``feedingInterval`` - Specifies the duration in milliseconds for automatically calling the attached feeding callback. @@ -250,7 +273,7 @@ Default Matter watchdog implementation In the Matter common module, there is a default implementation of two watchdog sources that are automatically created for the release build version of a Matter sample. One source is dedicated to monitoring the Main thread, and the other is dedicated to monitoring the Matter thread. -If at least one of the threads is blocked for a longer time than the value specified in the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_TIMEOUT` Kconfig option, a reboot will occur. +If at least one of the threads is blocked for a longer time than the value specified in the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_TIMEOUT` Kconfig option, a reboot will occur. The ``Nrf::Watchdog::Enable()``, and ``InstallSource(WatchdogSource &source)`` functions are called automatically. -To disable the default Matter watchdog implementation, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_DEFAULT` Kconfig option to ``n``. +To disable the default Matter watchdog implementation, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_DEFAULT` Kconfig option to ``n``. diff --git a/doc/nrf/protocols/matter/getting_started/adding_clusters.rst b/doc/nrf/protocols/matter/getting_started/adding_clusters.rst index 23dd1f7895ff..3e0da85f9854 100644 --- a/doc/nrf/protocols/matter/getting_started/adding_clusters.rst +++ b/doc/nrf/protocols/matter/getting_started/adding_clusters.rst @@ -245,12 +245,12 @@ To add a new timer for the measurement task, edit the :file:`src/app_task.cpp` f } The timer must be initialized in the ``Init()`` method of the ``AppTask`` class. -If :c:func:`StartSensorTimer()` is called, the ``Sensor Measure`` task is added to the tasks queue every *aTimeoutMs* milliseconds, until :c:func:`StopSensorTimer()` is called. +If :c:func:`StartSensorTimer` is called, the ``Sensor Measure`` task is added to the tasks queue every *aTimeoutMs* milliseconds, until :c:func:`StopSensorTimer` is called. Implement task handlers ----------------------- -When a task is dequeued, the ``task_executor`` module calls the task handler passed to the :c:func:`PostTask()` function. +When a task is dequeued, the ``task_executor`` module calls the task handler passed to the :c:func:`PostTask` function. Because you need to handle new tasks, you must implement the corresponding handlers. To add new task handlers, complete the following steps: @@ -276,7 +276,7 @@ To add new task handlers, complete the following steps: } With this addition, when the sensor is active, the timer expiration event happens every half a second. - This causes an invocation of :c:func:`SensorMeasureHandler()` and triggers an update of the ``MeasuredValue`` attribute of the Temperature Measurement cluster. + This causes an invocation of :c:func:`SensorMeasureHandler` and triggers an update of the ``MeasuredValue`` attribute of the Temperature Measurement cluster. .. note:: In the code fragment, the example value is updated randomly, but in a real sensor application it would be updated with the value obtained from external measurement. @@ -309,8 +309,8 @@ To implement the callback function, complete the following steps: 2. Implement the callback in this file: a. Open :file:`ncs/modules/lib/matter/src/app/util/generic-callback-stubs.cpp` to check the list of customizable callback functions, marked with ``__attribute__((weak))``. - #. Read the description of :c:func:`MatterPostAttributeChangeCallback()` in the :file:`ncs/modules/lib/matter/src/app/util/generic-callbacks.h` file. - #. Implement :c:func:`MatterPostAttributeChangeCallback()` in the :file:`src/zcl_callbacks.cpp` file. + #. Read the description of :c:func:`MatterPostAttributeChangeCallback` in the :file:`ncs/modules/lib/matter/src/app/util/generic-callbacks.h` file. + #. Implement :c:func:`MatterPostAttributeChangeCallback` in the :file:`src/zcl_callbacks.cpp` file. For example, the implementation can look as follows: diff --git a/doc/nrf/protocols/matter/getting_started/advanced_kconfigs.rst b/doc/nrf/protocols/matter/getting_started/advanced_kconfigs.rst index 02511ce1a18c..201fb58e10c0 100644 --- a/doc/nrf/protocols/matter/getting_started/advanced_kconfigs.rst +++ b/doc/nrf/protocols/matter/getting_started/advanced_kconfigs.rst @@ -17,10 +17,10 @@ These macros cannot be altered using dedicated Kconfig options. .. _ug_matter_configuring_optional_ble_advertising: -Bluetooth LE advertising -======================== +Bluetooth® LE advertising +========================= -The Matter specification requires the accessory device to advertise Matter service over Bluetooth® Low Energy (LE) for commissioning purposes. +The Matter specification requires the accessory device to advertise Matter service over Bluetooth Low Energy (LE) for commissioning purposes. By default, the Bluetooth LE advertising start has to be requested by the application (for example, as a result of a button press) and lasts for a maximum duration of 15 minutes. This is appropriate for a device with high security requirements that should not advertise its service without a direct trigger, for example a door lock. @@ -101,7 +101,7 @@ Matter Settings shell commands You can enable the Matter Settings shell commands to monitor the current usage of the Zephyr Settings using :ref:`NVS (Non-Volatile Storage) ` or :ref:`ZMS (Zephyr Memory Storage) ` backends. These commands are useful for verifying that the ``settings`` partition has the proper size and meets the application requirements. -To enable the Matter Settings shell module, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_SHELL` Kconfig option to ``y``. +To enable the Matter Settings shell module, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_SHELL` Kconfig option to ``y``. You can use the following shell commands: @@ -155,7 +155,7 @@ For more information about the factory data generation, see the :ref:`Matter Dev To read more about the FFS technology and its compatibility with Matter, see the following pages in the Amazon developer documentation: -* `Matter Simple Setup for Wi-Fi Overview`_ +* `Matter Simple Setup for Wi-Fi® Overview `_ * `Matter Simple Setup for Thread Overview`_ Reaction to the last Matter fabric removal @@ -204,7 +204,7 @@ Persistent storage ================== The persistent storage module allows for the application data and configuration to survive a device reboot. -|NCS| Matter applications use one generic Persistent Storage API that can be enabled by the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_PERSISTENT_STORAGE` Kconfig option. +|NCS| Matter applications use one generic Persistent Storage API that can be enabled by the :ref:`CONFIG_NCS_SAMPLE_MATTER_PERSISTENT_STORAGE` Kconfig option. This API consists of methods with ``Secure`` and ``NonSecure`` prefixes, which handle secure (ARM Platform Security Architecture Persistent Storage) and non-secure (raw Zephyr settings) storage operations, respectively. You can learn more details about the Persistent Storage API from the :file:`ncs/nrf/samples/matter/common/src/persistent_storage/persistent_storage.h` header file. @@ -212,21 +212,21 @@ You can learn more details about the Persistent Storage API from the :file:`ncs/ The interface is implemented by two available backends. Both can be used simultaneously by controlling the following Kconfig options: -* :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_STORAGE_BACKEND` - Activates the implementation that takes advantage of the raw :ref:`Zephyr settings`. +* :ref:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_STORAGE_BACKEND` - Activates the implementation that takes advantage of the raw :ref:`Zephyr settings`. This backend implements ``NonSecure`` methods of the Persistent Storage API and returns ``PSErrorCode::NotSupported`` for ``Secure`` methods. -* :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_SECURE_STORAGE_BACKEND` - Activates the module based on the ARM PSA Protected Storage API implementation from the :ref:`trusted_storage_readme` |NCS| library. +* :ref:`CONFIG_NCS_SAMPLE_MATTER_SECURE_STORAGE_BACKEND` - Activates the module based on the ARM PSA Protected Storage API implementation from the :ref:`trusted_storage_readme` |NCS| library. This backend implements ``Secure`` methods of the Persistent Storage API and returns ``PSErrorCode::NotSupported`` for ``NonSecure`` methods. Both backends allow you to control the maximum length of a string-type key under which an asset can be stored. -You can do this using the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_STORAGE_MAX_KEY_LEN` Kconfig option. +You can do this using the :ref:`CONFIG_NCS_SAMPLE_MATTER_STORAGE_MAX_KEY_LEN` Kconfig option. -If both backends are activated at the same time (:kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_STORAGE_BACKEND` and :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_SECURE_STORAGE_BACKEND` enabled) all methods of the generic interface are supported. +If both backends are activated at the same time (:ref:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_STORAGE_BACKEND` and :ref:`CONFIG_NCS_SAMPLE_MATTER_SECURE_STORAGE_BACKEND` enabled), all methods of the generic interface are supported. Similarly to the non-secure backend, the secure backend leverages the Zephyr Settings to interface with the FLASH memory. Additionally, in case of the secure storage backend, the following Kconfig options control the storage limits: -* :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_SECURE_STORAGE_MAX_ENTRY_NUMBER` - Defines the maximum number or assets that can be stored in the secure storage. +* :ref:`CONFIG_NCS_SAMPLE_MATTER_SECURE_STORAGE_MAX_ENTRY_NUMBER` - Defines the maximum number or assets that can be stored in the secure storage. * :kconfig:option:`CONFIG_TRUSTED_STORAGE_BACKEND_AEAD_MAX_DATA_SIZE` - Defines the maximum length of the secret that is stored. .. _ug_matter_configuration_diagnostic_logs: @@ -260,26 +260,26 @@ After receiving the read request from the Matter controller, the device reads th The device sends converted logs to the Matter controller as a response. After the crash data is successfully read, it will be removed and further read attempts will notify the user that there is no available data to read. -To keep the crash log in the memory after reading it, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REMOVE_CRASH_AFTER_READ` Kconfig option to ``n``. +To keep the crash log in the memory after reading it, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REMOVE_CRASH_AFTER_READ` Kconfig option to ``n``. -Network and end user logs +Network and end-user logs ------------------------- -The diagnostic network and end user logs are saved in the dedicated retained RAM partitions. +The diagnostic network and end-user logs are saved in the dedicated retained RAM partitions. The logs are not removed after reading, but when attempting to write new logs to an already full buffer, the oldest logs are replaced. -The diagnostic network and end user logs are designed to be pushed when requested by the user. +The diagnostic network and end-user logs are designed to be pushed when requested by the user. This can result in the same information being passed by multiple APIs, which is usually not desirable behavior. -Because of this, for the network and the end user logs the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REDIRECT` Kconfig option is enabled by default. +Because of this, for the network and the end-user logs the :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REDIRECT` Kconfig option is enabled by default. With the Kconfig option enabled, the redirect functionality takes logs passed to the Zephyr logger and saves them in the retained RAM as Matter diagnostic logs. Only the following logs are redirected: * Logs from the ``chip`` module are redirected into diagnostic network logs. -* Logs from the ``app`` module are redirected into diagnostic end user logs. +* Logs from the ``app`` module are redirected into diagnostic end-user logs. -You can disable the redirect functionality by disabling the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REDIRECT` Kconfig option. -You can then push the network or end user logs using dedicated API in your application, like in the following code snippet: +You can disable the redirect functionality by disabling the :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REDIRECT` Kconfig option. +You can then push the network or end-user logs using dedicated API in your application, like in the following code snippet: .. code-block:: C++ @@ -301,28 +301,61 @@ The partition sizes are configured using example values and may not be sufficien To change the partition sizes, you need to change the configuration in the devicetree overlay. You can, for example, increase the partition sizes to be able to store more logs. -The snippet sets the following kconfig options: +The snippet sets the following Kconfig options: - * :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` to ``y``. - * :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_CRASH_LOGS` to ``y``. - * :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REMOVE_CRASH_AFTER_READ` to ``y``. - * :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_END_USER_LOGS` to ``y``. - * :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_NETWORK_LOGS` to ``y``. + * :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` to ``y``. + * :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_CRASH_LOGS` to ``y``. + * :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REMOVE_CRASH_AFTER_READ` to ``y``. + * :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_END_USER_LOGS` to ``y``. + * :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_NETWORK_LOGS` to ``y``. * :kconfig:option:`CONFIG_LOG_MODE_DEFERRED` to ``y``. * :kconfig:option:`CONFIG_LOG_RUNTIME_FILTERING` to ``n``. -Deferred logs mode (:kconfig:option:`CONFIG_LOG_MODE_DEFERRED`) is enabled because it is required by the log redirection functionality (:kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REDIRECT`), which is enabled by default for diagnostic network and end user logs. +Deferred logs mode (:kconfig:option:`CONFIG_LOG_MODE_DEFERRED`) is enabled because it is required by the log redirection functionality (:ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS_REDIRECT`), which is enabled by default for diagnostic network and end-user logs. .. note:: - You cannot set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` Kconfig option separately without adding the devicetree overlays contained in the snippet. + You cannot set the :ref:`CONFIG_NCS_SAMPLE_MATTER_DIAGNOSTIC_LOGS` Kconfig option separately without adding the devicetree overlays contained in the snippet. Instead, if you want to use just some of the diagnostic logs functionality, use the snippet and set the Kconfig options for the other functionalities to ``n``. -To use the snippet when building a sample, add ``-D_SNIPPET=diagnostic-logs`` to the west arguments list. +To use the snippet when building a sample, add ``-D_SNIPPET=matter-diagnostic-logs`` to the west arguments list. + +Example for the ``nrf52840dk/nrf52840`` board target and the :ref:`matter_lock_sample` sample: + +.. parsed-literal:: + :class: highlight + + west build -b nrf52840dk/nrf52840 -- -Dlock_SNIPPET=matter-diagnostic-logs + +.. _ug_matter_debug_snippet: -Example for the ``nrf52840dk_nrf52840`` target board and the :ref:`matter_lock_sample` sample: +Debug snippet +============= + +The Matter debug snippet allows you to enable additional debug features while using Matter samples. + +The following features are enabled when using this snippet: + + * UART speed is increased to 1 Mbit/s. + * Log buffer size is set to high value to allow showing all logs. + * Deferred mode of logging. + * Increased verbosity of Matter logs. + * Openthread is built from sources. + * Openthread shell is enabled. + * Openthread logging level is set to INFO. + * Full shell functionalities. + * Logging source code location on VerifyOrDie failure that occurs in the Matter stack. + +To use the snippet when building a sample, add ``-D_SNIPPET=matter-debug`` to the west arguments list. + +For example, for the ``nrf52840dk/nrf52840`` board target and the :ref:`matter_lock_sample` sample, use the following command: .. parsed-literal:: :class: highlight - west build -b nrf52840dk/nrf52840 -- -Dlock_SNIPPET=diagnostic-logs + west build -b nrf52840dk/nrf52840 -- -Dlock_SNIPPET=matter-debug + +.. note:: + + You can increase the UART speed using this snippet only for Nordic Development Kits. + If you want to use the snippet for your custom board, you need to adjust the UART speed manually. diff --git a/doc/nrf/protocols/matter/getting_started/ecosystem_compatibility_testing.rst b/doc/nrf/protocols/matter/getting_started/ecosystem_compatibility_testing.rst index 518b52fefca1..729c962a4632 100644 --- a/doc/nrf/protocols/matter/getting_started/ecosystem_compatibility_testing.rst +++ b/doc/nrf/protocols/matter/getting_started/ecosystem_compatibility_testing.rst @@ -10,7 +10,7 @@ Testing with commercial Matter ecosystems Nordic Semiconductor's Matter platform and Matter applications integrated in the |NCS| follow the most recent versions of the Matter protocol and are interoperable with several commercial Matter ecosystems. Matter allows multiple ecosystems to work with each other thanks to the :ref:`multiple fabrics feature `. -It also lets you use different wireless protocols for different use cases at the same time (for example, Thread or Wi-Fi). +It also lets you use different wireless protocols for different use cases at the same time (for example, Thread or Wi-Fi®). You can test the interoperability of the Matter solution in the |NCS| with a selection of compatible Matter ecosystems by following the `Testing the nRF Connect platform with Apple, Google and Samsung ecosystems`_ tutorial on DevZone. diff --git a/doc/nrf/protocols/matter/getting_started/hw_requirements.rst b/doc/nrf/protocols/matter/getting_started/hw_requirements.rst index fe51a9ad404e..5cec91bced53 100644 --- a/doc/nrf/protocols/matter/getting_started/hw_requirements.rst +++ b/doc/nrf/protocols/matter/getting_started/hw_requirements.rst @@ -7,7 +7,7 @@ Matter hardware and memory requirements :local: :depth: 2 -Hardware that runs Matter protocol applications must meet specification requirements, including providing the right amount of flash memory and being able to run Bluetooth LE and Thread or Wi-Fi concurrently. +Hardware that runs Matter protocol applications must meet specification requirements, including providing the right amount of flash memory and being able to run Bluetooth® LE and Thread or Wi-Fi® concurrently. .. _ug_matter_hw_requirements_socs: @@ -20,6 +20,7 @@ Currently the following SoCs from Nordic Semiconductor are supported for use wit * :ref:`nRF5340 + nRF7002 ` (Matter over Thread and Matter over Wi-Fi) * :ref:`nRF52840 ` (Matter over Thread) * :ref:`nRF54L15 ` (Matter over Thread) +* :ref:`nRF54L10 ` (Matter over Thread) Front-End Modules ================= @@ -32,9 +33,13 @@ For more information about the FEM support in the |NCS|, see :ref:`ug_radio_fem` External flash ************** -For the currently supported SoCs, you must use an external memory with at least 1 MB of flash for nRF52840 and 1.5MB for nRF5340. +For the currently supported SoCs, you must use an external memory with at least 1 MB of flash for nRF52840 and nRF54L10, and 1.5 MB for nRF5340 and nRF54L15. This is required to perform the DFU operation. +.. note:: + The nRF54L15 supports DFU with image compression, which may eliminate the need for external flash. + For more details, see :ref:`mcuboot_image_compression`. + The development kits for the supported SoCs from Nordic Semiconductor are supplied with the MX25R64 type of external flash that meets these memory requirements. However, it is possible to configure the SoCs with different QSPI or SPI memory if it is supported by Zephyr. For this purpose, check the reference design for Nordic DKs for information about how to connect the external memory with SoC, specifically whether the pins are designed for the QSPI or the high-speed SPIM operations. @@ -60,41 +65,47 @@ Values are provided in kilobytes (KB). +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ | Sample | MCUboot ROM | Application ROM | Factory data | Settings | Total ROM | Total RAM (incl. static HEAP) | +======================================================================+===============+===================+================+============+=============+=================================+ - | :ref:`Light Bulb ` (Debug) | 28 | 794 | 4 | 32 | 858 | 185 | + | :ref:`Light Bulb ` (Debug) | 28 | 801 | 4 | 32 | 865 | 183 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Light Bulb ` (Debug + LTO) | 28 | 736 | 4 | 32 | 800 | 187 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Light Bulb ` (Release) | 28 | 699 | 4 | 32 | 763 | 178 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Debug + LTO) | 28 | 732 | 4 | 32 | 796 | 189 | + | :ref:`Light Switch ` (Debug) | 28 | 765 | 4 | 32 | 829 | 174 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Release) | 28 | 691 | 4 | 32 | 755 | 179 | + | :ref:`Light Switch ` (Debug + LTO) | 28 | 698 | 4 | 32 | 762 | 178 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug) | 28 | 757 | 4 | 32 | 821 | 176 | + | :ref:`Light Switch ` (Release) | 28 | 662 | 4 | 32 | 726 | 168 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug + LTO) | 28 | 693 | 4 | 32 | 757 | 180 | + | :ref:`Lock ` (Debug) | 28 | 778 | 4 | 32 | 842 | 177 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Release) | 28 | 654 | 4 | 32 | 718 | 169 | + | :ref:`Lock ` (Debug + LTO) | 28 | 711 | 4 | 32 | 775 | 181 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug) | 28 | 770 | 4 | 32 | 834 | 177 | + | :ref:`Lock ` (Release) | 28 | 663 | 4 | 32 | 727 | 173 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug + LTO) | 28 | 705 | 4 | 32 | 769 | 181 | + | :ref:`Smoke CO Alarm ` (Debug) | 28 | 756 | 4 | 32 | 820 | 175 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Release) | 28 | 655 | 4 | 32 | 719 | 172 | + | :ref:`Smoke CO Alarm ` (Debug + LTO) | 28 | 690 | 4 | 32 | 754 | 179 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug) | 28 | 710 | 4 | 32 | 774 | 174 | + | :ref:`Smoke CO Alarm ` (Release) | 28 | 655 | 4 | 32 | 719 | 171 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug + LTO) | 28 | 653 | 4 | 32 | 717 | 178 | + | :ref:`Template ` (Debug) | 28 | 718 | 4 | 32 | 782 | 172 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Release) | 28 | 615 | 4 | 32 | 679 | 168 | + | :ref:`Template ` (Debug + LTO) | 28 | 658 | 4 | 32 | 722 | 176 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug) | 28 | 761 | 4 | 32 | 825 | 175 | + | :ref:`Template ` (Release) | 28 | 623 | 4 | 32 | 687 | 168 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug + LTO) | 28 | 696 | 4 | 32 | 760 | 179 | + | :ref:`Thermostat ` (Debug) | 28 | 772 | 4 | 32 | 836 | 173 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Release) | 28 | 652 | 4 | 32 | 716 | 169 | + | :ref:`Thermostat ` (Debug + LTO) | 28 | 704 | 4 | 32 | 768 | 177 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Debug) | 28 | 742 | 4 | 32 | 806 | 175 | + | :ref:`Thermostat ` (Release) | 28 | 663 | 4 | 32 | 727 | 168 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Debug + LTO) | 28 | 680 | 4 | 32 | 744 | 178 | + | :ref:`Window Covering ` (Debug) | 28 | 749 | 4 | 32 | 813 | 173 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Release) | 28 | 641 | 4 | 32 | 705 | 169 | + | :ref:`Window Covering ` (Debug + LTO) | 28 | 684 | 4 | 32 | 748 | 177 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Window Covering ` (Release) | 28 | 649 | 4 | 32 | 713 | 168 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ .. tab:: nRF5340 DK @@ -104,41 +115,51 @@ Values are provided in kilobytes (KB). +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ | Sample | MCUboot ROM | Application ROM | Factory data | Settings | Total ROM | Total RAM (incl. static HEAP) | +======================================================================+===============+===================+================+============+=============+=================================+ - | :ref:`Light Bulb ` (Debug) | 32 | 722 | 4 | 32 | 790 | 193 | + | :ref:`Bridge ` (Debug + LTO) | 32 | 659 | 4 | 32 | 727 | 212 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Bridge ` (Release) | 32 | 643 | 4 | 32 | 711 | 206 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Light Bulb ` (Debug) | 32 | 731 | 4 | 32 | 799 | 192 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Light Bulb ` (Debug + LTO) | 32 | 667 | 4 | 32 | 735 | 196 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Debug + LTO) | 32 | 660 | 4 | 32 | 728 | 197 | + | :ref:`Light Bulb ` (Release) | 32 | 627 | 4 | 32 | 695 | 187 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Release) | 32 | 617 | 4 | 32 | 685 | 187 | + | :ref:`Light Switch ` (Debug) | 32 | 695 | 4 | 32 | 763 | 183 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug) | 32 | 685 | 4 | 32 | 753 | 184 | + | :ref:`Light Switch ` (Debug + LTO) | 32 | 628 | 4 | 32 | 696 | 187 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug + LTO) | 32 | 621 | 4 | 32 | 689 | 188 | + | :ref:`Light Switch ` (Release) | 32 | 590 | 4 | 32 | 658 | 177 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Release) | 32 | 580 | 4 | 32 | 648 | 177 | + | :ref:`Lock ` (Debug) | 32 | 708 | 4 | 32 | 776 | 187 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug) | 32 | 698 | 4 | 32 | 766 | 186 | + | :ref:`Lock ` (Debug + LTO) | 32 | 641 | 4 | 32 | 709 | 190 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug + LTO) | 32 | 633 | 4 | 32 | 701 | 190 | + | :ref:`Lock ` (Release) | 32 | 591 | 4 | 32 | 659 | 181 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Release) | 32 | 581 | 4 | 32 | 649 | 179 | + | :ref:`Smoke CO Alarm ` (Debug) | 32 | 686 | 4 | 32 | 754 | 185 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug) | 32 | 638 | 4 | 32 | 706 | 182 | + | :ref:`Smoke CO Alarm ` (Debug + LTO) | 32 | 621 | 4 | 32 | 689 | 188 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug + LTO) | 32 | 581 | 4 | 32 | 649 | 186 | + | :ref:`Smoke CO Alarm ` (Release) | 32 | 583 | 4 | 32 | 651 | 180 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Release) | 32 | 542 | 4 | 32 | 610 | 176 | + | :ref:`Template ` (Debug) | 32 | 648 | 4 | 32 | 716 | 181 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug) | 32 | 689 | 4 | 32 | 757 | 183 | + | :ref:`Template ` (Debug + LTO) | 32 | 588 | 4 | 32 | 656 | 185 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug + LTO) | 32 | 623 | 4 | 32 | 691 | 187 | + | :ref:`Template ` (Release) | 32 | 551 | 4 | 32 | 619 | 176 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Release) | 32 | 578 | 4 | 32 | 646 | 176 | + | :ref:`Thermostat ` (Debug) | 32 | 702 | 4 | 32 | 770 | 182 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Debug) | 32 | 670 | 4 | 32 | 738 | 183 | + | :ref:`Thermostat ` (Debug + LTO) | 32 | 635 | 4 | 32 | 703 | 186 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Debug + LTO) | 32 | 607 | 4 | 32 | 675 | 187 | + | :ref:`Thermostat ` (Release) | 32 | 590 | 4 | 32 | 658 | 177 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Release) | 32 | 567 | 4 | 32 | 635 | 176 | + | :ref:`Window Covering ` (Debug) | 32 | 679 | 4 | 32 | 747 | 182 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Window Covering ` (Debug + LTO) | 32 | 615 | 4 | 32 | 683 | 186 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Window Covering ` (Release) | 32 | 577 | 4 | 32 | 645 | 177 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ .. tab:: Thingy:53 @@ -148,98 +169,122 @@ Values are provided in kilobytes (KB). +-------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ | Sample | MCUboot ROM | Application ROM | Factory data | Settings | Total ROM | Total RAM (incl. static HEAP) | +===================================================================+===============+===================+================+============+=============+=================================+ - | :ref:`Weather Station ` (Debug) | 64 | 731 | 16 | 48 | 859 | 236 | + | :ref:`Weather Station ` (Debug) | 64 | 741 | 16 | 48 | 869 | 235 | +-------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Weather Station ` (Debug + LTO) | 64 | 661 | 16 | 48 | 789 | 240 | + | :ref:`Weather Station ` (Debug + LTO) | 64 | 669 | 16 | 48 | 797 | 239 | +-------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Weather Station ` (Release) | 64 | 594 | 16 | 48 | 722 | 210 | + | :ref:`Weather Station ` (Release) | 64 | 604 | 16 | 48 | 732 | 210 | +-------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ .. tab:: nRF7002 DK - The following table lists memory requirements for samples running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). + The following table lists memory requirements for samples running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ | Sample | MCUboot ROM | Application ROM | Factory data | Settings | Total ROM | Total RAM (incl. static HEAP) | +================================================================+===============+===================+================+============+=============+=================================+ - | :ref:`Bridge ` (Debug + LTO) | 48 | 810 | 4 | 32 | 894 | 282 | - +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Bridge ` (Release) | 48 | 818 | 4 | 32 | 902 | 274 | - +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Debug) | 48 | 893 | 4 | 32 | 977 | 275 | + | :ref:`Bridge ` (Debug + LTO) | 48 | 833 | 4 | 32 | 917 | 308 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Debug + LTO) | 48 | 817 | 4 | 32 | 901 | 279 | + | :ref:`Bridge ` (Release) | 48 | 843 | 4 | 32 | 927 | 302 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Release) | 48 | 797 | 4 | 32 | 881 | 267 | + | :ref:`Light Bulb ` (Debug) | 48 | 920 | 4 | 32 | 1004 | 297 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug) | 48 | 902 | 4 | 32 | 986 | 276 | + | :ref:`Light Bulb ` (Debug + LTO) | 48 | 837 | 4 | 32 | 921 | 301 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug + LTO) | 48 | 824 | 4 | 32 | 908 | 280 | + | :ref:`Light Bulb ` (Release) | 48 | 823 | 4 | 32 | 907 | 291 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Release) | 48 | 806 | 4 | 32 | 890 | 267 | + | :ref:`Light Switch ` (Debug) | 48 | 928 | 4 | 32 | 1012 | 299 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug) | 48 | 915 | 4 | 32 | 999 | 276 | + | :ref:`Light Switch ` (Debug + LTO) | 48 | 844 | 4 | 32 | 928 | 303 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug + LTO) | 48 | 837 | 4 | 32 | 921 | 280 | + | :ref:`Light Switch ` (Release) | 48 | 831 | 4 | 32 | 915 | 292 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Release) | 48 | 806 | 4 | 32 | 890 | 268 | + | :ref:`Lock ` (Debug + LTO) | 48 | 858 | 4 | 32 | 942 | 303 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug) | 48 | 859 | 4 | 32 | 943 | 274 | + | :ref:`Lock ` (Release) | 48 | 754 | 4 | 32 | 838 | 296 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug + LTO) | 48 | 788 | 4 | 32 | 872 | 278 | + | :ref:`Template ` (Debug) | 48 | 885 | 4 | 32 | 969 | 296 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Release) | 48 | 771 | 4 | 32 | 855 | 266 | + | :ref:`Template ` (Debug + LTO) | 48 | 808 | 4 | 32 | 892 | 300 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug) | 48 | 906 | 4 | 32 | 990 | 275 | + | :ref:`Template ` (Release) | 48 | 796 | 4 | 32 | 880 | 290 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug + LTO) | 48 | 828 | 4 | 32 | 912 | 279 | + | :ref:`Thermostat ` (Debug + LTO) | 48 | 852 | 4 | 32 | 936 | 301 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Release) | 48 | 804 | 4 | 32 | 888 | 267 | + | :ref:`Thermostat ` (Release) | 48 | 755 | 4 | 32 | 839 | 294 | +----------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ .. tab:: nRF54L15 DK - The following table lists memory requirements for samples running on the :ref:`nRF54l15 DK ` (:ref:`nrf54l15dk/nrf54l15/cpuapp `). + The following table lists memory requirements for samples running on the :ref:`nRF54L15 DK ` (:ref:`nrf54l15dk/nrf54l15/cpuapp `). +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ | Sample | MCUboot ROM | Application ROM | Factory data | Settings | Total ROM | Total RAM (incl. static HEAP) | +======================================================================+===============+===================+================+============+=============+=================================+ - | :ref:`Light Bulb ` (Debug) | 48 | 819 | 4 | 32 | 903 | 185 | + | :ref:`Light Bulb ` (Debug) | 52 | 820 | 4 | 40 | 916 | 193 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Debug + LTO) | 48 | 737 | 4 | 32 | 821 | 189 | + | :ref:`Light Bulb ` (Debug + LTO) | 52 | 751 | 4 | 40 | 847 | 194 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Bulb ` (Release) | 48 | 708 | 4 | 32 | 792 | 178 | + | :ref:`Light Bulb ` (Release) | 52 | 716 | 4 | 40 | 812 | 188 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug) | 48 | 780 | 4 | 32 | 864 | 176 | + | :ref:`Light Switch ` (Debug) | 52 | 784 | 4 | 40 | 880 | 184 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Debug + LTO) | 48 | 700 | 4 | 32 | 784 | 179 | + | :ref:`Light Switch ` (Debug + LTO) | 52 | 713 | 4 | 40 | 809 | 185 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Light Switch ` (Release) | 48 | 668 | 4 | 32 | 752 | 168 | + | :ref:`Light Switch ` (Release) | 52 | 678 | 4 | 40 | 774 | 178 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug) | 48 | 792 | 4 | 32 | 876 | 177 | + | :ref:`Lock ` (Debug) | 52 | 797 | 4 | 40 | 893 | 187 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Debug + LTO) | 48 | 712 | 4 | 32 | 796 | 181 | + | :ref:`Lock ` (Debug + LTO) | 52 | 725 | 4 | 40 | 821 | 188 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Lock ` (Release) | 48 | 668 | 4 | 32 | 752 | 170 | + | :ref:`Lock ` (Release) | 52 | 679 | 4 | 40 | 775 | 182 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug) | 48 | 734 | 4 | 32 | 818 | 174 | + | :ref:`Smoke CO Alarm ` (Debug) | 52 | 775 | 4 | 40 | 871 | 185 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Debug + LTO) | 48 | 661 | 4 | 32 | 745 | 178 | + | :ref:`Smoke CO Alarm ` (Debug + LTO) | 52 | 705 | 4 | 40 | 801 | 186 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Template ` (Release) | 48 | 631 | 4 | 32 | 715 | 167 | + | :ref:`Smoke CO Alarm ` (Release) | 52 | 672 | 4 | 40 | 768 | 180 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug) | 48 | 784 | 4 | 32 | 868 | 175 | + | :ref:`Template ` (Debug) | 52 | 738 | 4 | 40 | 834 | 182 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Debug + LTO) | 48 | 703 | 4 | 32 | 787 | 178 | + | :ref:`Template ` (Debug + LTO) | 52 | 674 | 4 | 40 | 770 | 183 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Thermostat ` (Release) | 48 | 667 | 4 | 32 | 751 | 167 | + | :ref:`Template ` (Release) | 52 | 642 | 4 | 40 | 738 | 177 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Debug) | 48 | 764 | 4 | 32 | 848 | 174 | + | :ref:`Thermostat ` (Debug) | 52 | 792 | 4 | 40 | 888 | 183 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Debug + LTO) | 48 | 686 | 4 | 32 | 770 | 178 | + | :ref:`Thermostat ` (Debug + LTO) | 52 | 720 | 4 | 40 | 816 | 184 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ - | :ref:`Window Covering ` (Release) | 48 | 655 | 4 | 32 | 739 | 167 | + | :ref:`Thermostat ` (Release) | 52 | 681 | 4 | 40 | 777 | 177 | +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Window Covering ` (Debug) | 52 | 768 | 4 | 40 | 864 | 183 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Window Covering ` (Debug + LTO) | 52 | 699 | 4 | 40 | 795 | 184 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + | :ref:`Window Covering ` (Release) | 52 | 665 | 4 | 40 | 761 | 177 | + +----------------------------------------------------------------------+---------------+-------------------+----------------+------------+-------------+---------------------------------+ + + .. tab:: nRF54L15 DK with TF-M + + The following table lists memory requirements for samples running on the :ref:`nRF54L15 DK with CMSE enabled ` (:ref:`nrf54l15dk/nrf54l15/cpuapp/ns `). + + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ + | Sample | MCUboot ROM | TF-M ROM | Application ROM | Factory data | Settings | TF-M Storage | Total ROM | Total RAM (incl. static HEAP) | + +================================================================+===============+============+===================+================+============+================+=============+=================================+ + | :ref:`Light Bulb ` (Debug) | 52 | 126 | 757 | 4 | 40 | 32 | 1011 | 237 | + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ + | :ref:`Light Switch ` (Debug) | 52 | 126 | 721 | 4 | 40 | 32 | 975 | 228 | + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ + | :ref:`Lock ` (Debug) | 52 | 126 | 734 | 4 | 40 | 32 | 988 | 232 | + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ + | :ref:`Template ` (Debug) | 52 | 126 | 682 | 4 | 40 | 32 | 936 | 227 | + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ + | :ref:`Template ` (Release) | 52 | 126 | 585 | 4 | 40 | 32 | 839 | 221 | + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ + | :ref:`Thermostat ` (Debug) | 52 | 126 | 729 | 4 | 40 | 32 | 983 | 227 | + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ + | :ref:`Window Covering ` (Debug) | 52 | 126 | 705 | 4 | 40 | 32 | 959 | 227 | + +----------------------------------------------------------------+---------------+------------+-------------------+----------------+------------+----------------+-------------+---------------------------------+ .. @@ -263,7 +308,7 @@ For more information about configuration of memory layouts in Matter, see :ref:` .. tab:: nRF52840 DK - The following memory map is valid for Matter applications running on the :ref:`nRF52840 DK ` (:ref:`nrf52840dk_nrf52840 `). + The following memory map is valid for Matter applications running on the :ref:`nRF52840 DK ` (:ref:`nrf52840dk/nrf52840 `). Internal flash (size: 0x100000 = 1024kB) +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ @@ -351,7 +396,7 @@ For more information about configuration of memory layouts in Matter, see :ref:` | | | +---------------------+-------------------+-------------------+ | | | | provision | 33.375kB (0x8580) | 640B (0x280) | +---------------------------------------------------------+---------------------+-------------------+---------------------+-------------------+-------------------+ - | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | multiprotocol_rpmsg | 34kB (0x8800) | 222kB (0x37800) | + | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | ipc_radio | 34kB (0x8800) | 222kB (0x37800) | +---------------------------------------------------------+---------------------+-------------------+---------------------+-------------------+-------------------+ Network core SRAM (size: 0x10000 = 64kB) @@ -424,7 +469,7 @@ For more information about configuration of memory layouts in Matter, see :ref:` | | | +---------------------+------------------+-------------------+ | | | | provision | 33.375kB (0x8580)| 640B (0x280) | +---------------------------------------------------------+---------------------+-------------------+---------------------+------------------+-------------------+ - | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | multiprotocol_rpmsg | 34kB (0x8800) | 222kB (0x37800) | + | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | ipc_radio | 34kB (0x8800) | 222kB (0x37800) | +---------------------------------------------------------+---------------------+-------------------+---------------------+------------------+-------------------+ Network core SRAM flash (size: 0x10000 = 64kB) @@ -499,7 +544,7 @@ For more information about configuration of memory layouts in Matter, see :ref:` | | | +---------------------+------------------+-------------------+ | | | | provision | 33.375kB (0x8580)| 640B (0x280) | +---------------------------------------------------------+---------------------+-------------------+---------------------+------------------+-------------------+ - | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | multiprotocol_rpmsg | 34kB (0x8800) | 222kB (0x37800) | + | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | ipc_radio | 34kB (0x8800) | 222kB (0x37800) | +---------------------------------------------------------+---------------------+-------------------+---------------------+------------------+-------------------+ Network core SRAM flash (size: 0x10000 = 64kB) @@ -573,7 +618,7 @@ For more information about configuration of memory layouts in Matter, see :ref:` | | | +---------------------+------------------+-------------------+ | | | | provision | 33.375kB (0x8580)| 640B (0x280) | +---------------------------------------------------------+---------------------+-------------------+---------------------+------------------+-------------------+ - | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | hci_ipc | 34kB (0x8800) | 222kB (0x37800) | + | Network application (app) | 34kB (0x8800) | 222kB (0x37800) | ipc_radio | 34kB (0x8800) | 222kB (0x37800) | +---------------------------------------------------------+---------------------+-------------------+---------------------+------------------+-------------------+ Network core SRAM flash (size: 0x10000 = 64kB) @@ -603,15 +648,15 @@ For more information about configuration of memory layouts in Matter, see :ref:` +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ | Partition | Offset | Size | Partition elements | Element offset | Element size | +=========================================+=====================+===================+=====================+=================+===================+ - | Bootloader (mcuboot) | 0kB (0x0) | 48kB (0xC000) |- |- |- | + | Bootloader (mcuboot) | 0kB (0x0) | 52kB (0xD000) |- |- |- | +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ - | Application (mcuboot_primary/app) | 28kB (0x7000) | 960kB (0xf0000) | mcuboot_pad | 48kB (0xC000) | 2048B (0x800) | + | Application (mcuboot_primary/app) | 52kB (0xD000) | 1428kB (0x165000) | mcuboot_pad | 52kB (0xD000) | 2048B (0x800) | | | | +---------------------+-----------------+-------------------+ - | | | | mcuboot_primary_app | 50kB (0xc800) | 1438kB (0xefe00) | + | | | | mcuboot_primary_app | 54kB (0xD800) | 1426kB (0x164800) | +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ - | Factory data (factory_data) | 1488kB (0x174000) | 4kB (0x1000) |- |- |- | + | Factory data (factory_data) | 1480kB (0x172000) | 4kB (0x1000) |- |- |- | +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ - | Non-volatile storage (settings_storage) | 1492kB (0x175000) | 32kB (0x8000) |- |- |- | + | Non-volatile storage (settings_storage) | 1484kB (0x173000) | 40kB (0xA000) |- |- |- | +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ Application core SRAM primary (size: 0x40000 = 256kB) @@ -623,6 +668,74 @@ For more information about configuration of memory layouts in Matter, see :ref:` | Static RAM (sram_primary) | 0kB (0x0) | 256kB (0x40000) |- |- |- | +-----------------------------------------------+---------------------+-------------------+---------------------+-----------------+-----------------+ + .. tab:: nRF54L15 DK with TF-M + + The following table lists memory requirements for samples running on the :ref:`nRF54L15 DK with CMSE enabled ` (:ref:`nrf54l15dk/nrf54l15/cpuapp/ns `). + + Application core flash (size: 0x17D000 = 1524kB) + + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Partition | Offset | Size | Partition elements | Element offset | Element size | + +=========================================+=====================+===================+=====================+=================+===================+ + | Bootloader (mcuboot) | 0kB (0x0) | 52kB (0xD000) |- |- |- | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Secure part (tfm_secure) | 52kB (0xD000) | 128kB (0x20000) | mcuboot_pad | 52kB (0xD000) | 2k (0x800) | + | | | +---------------------+-----------------+-------------------+ + | | | | tfm | 54kB (0xD800) | 126kB (0x1F800) | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Non-Secure part (tfm_nonsecure) | 180kB (0x2D000) | 1268kB (0x13D000) | app |180kB (0x2D000) | 1268kB (0x13D000) | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Factory data (factory_data) | 1448kB (0x16A000) | 4kB (0x1000) |- |- |- | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Non-volatile storage (settings_storage) | 1452kB (0x16B000) | 40kB (0xA000) |- |- |- | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | TFM storage (tfm_storage) | 1492kB (0x175000) | 32kB (0x8000) | tfm_its | 8kB (0x175000) | 8kB (0x2000) | + | | | +---------------------+-----------------+-------------------+ + | | | | tfm_otp_nv_counters | 8kB (0x177000) | 8kB (0x2000) | + | | | +---------------------+-----------------+-------------------+ + | | | | tfm_ps | 16kB (0x179000) | 16kB (0x4000) | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + + Application core SRAM primary (size: 0x40000 = 256kB) + SRAM is located at the address ``0x20000000`` in the memory address space of the application. + + +-----------------------------------------------+---------------------+-------------------+---------------------+-----------------+-----------------+ + | Partition | Offset | Size | Partition elements | Element offset | Element size | + +===============================================+=====================+===================+=====================+=================+=================+ + | Secure Static RAM (sram_secure) | 0kB (0x0) | 256kB (0xF000) |- |- |- | + +-----------------------------------------------+---------------------+-------------------+---------------------+-----------------+-----------------+ + | Non-Secure Static RAM (sram_nonsecure) | 256kB (0xF000) | 196kB (0x31000) |- |- |- | + +-----------------------------------------------+---------------------+-------------------+---------------------+-----------------+-----------------+ + + .. tab:: nRF54L10 emulation on nRF54L15 DK + + The following memory map is valid for Matter applications running on the :ref:`nRF54L15 DK (emulating nRF54L10) ` (:ref:`nrf54l15dk/nrf54l10/cpuapp `). + + Application core flash (size: 0xFF800 = 1022kB) + + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Partition | Offset | Size | Partition elements | Element offset | Element size | + +=========================================+=====================+===================+=====================+=================+===================+ + | Bootloader (mcuboot) | 0kB (0x0) | 52kB (0xD000) |- |- |- | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Application (mcuboot_primary/app) | 52kB (0xD000) | 926kB (0xE7800) | mcuboot_pad | 52kB (0xD000) | 2048B (0x800) | + | | | +---------------------+-----------------+-------------------+ + | | | | mcuboot_primary_app | 54kB (0xD800) | 924kB (0xE7000) | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Factory data (factory_data) | 978kB (0xF4800) | 4kB (0x1000) |- |- |- | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + | Non-volatile storage (settings_storage) | 982kB (0xF5800) | 40kB (0xA000) |- |- |- | + +-----------------------------------------+---------------------+-------------------+---------------------+-----------------+-------------------+ + + Application core SRAM primary (size: 0x30000 = 192kB) + SRAM is located at the address ``0x20000000`` in the memory address space of the application. + + +-----------------------------------------------+---------------------+-------------------+---------------------+-----------------+-----------------+ + | Partition | Offset | Size | Partition elements | Element offset | Element size | + +===============================================+=====================+===================+=====================+=================+=================+ + | Static RAM (sram_primary) | 0kB (0x0) | 192kB (0x30000) |- |- |- | + +-----------------------------------------------+---------------------+-------------------+---------------------+-----------------+-----------------+ + .. You can generate :ref:`Partition Manager's ASCII representation ` of these tables by running the following command for your respective *board_target*: diff --git a/doc/nrf/protocols/matter/getting_started/index.rst b/doc/nrf/protocols/matter/getting_started/index.rst index 0a7d0b1e317c..b22b63ae830a 100644 --- a/doc/nrf/protocols/matter/getting_started/index.rst +++ b/doc/nrf/protocols/matter/getting_started/index.rst @@ -33,7 +33,7 @@ The pages will guide you through the following getting started process: #. In :ref:`ug_matter_device_low_power_configuration` and :ref:`ug_matter_device_optimizing_memory`, you can find information about how to optimize your application's resource usage. #. Finally, in :ref:`ug_matter_gs_ecosystem_compatibility_testing`, you will set up and test multiple Matter fabrics, each belonging to a different commercial ecosystem, and test their interoperability. -Some of the pages will make reference to external documentation pages available in the |NCS| documentation under the :ref:`matter_index` tab. +Some of the pages will make reference to external documentation pages available in the |NCS| documentation under the :ref:`matter_index` section. These are built from the files available in the official `Matter GitHub repository`_ and refer to the nRF Connect platform. .. toctree:: diff --git a/doc/nrf/protocols/matter/getting_started/low_power_configuration.rst b/doc/nrf/protocols/matter/getting_started/low_power_configuration.rst index 0166c073b76b..38072232e5b6 100644 --- a/doc/nrf/protocols/matter/getting_started/low_power_configuration.rst +++ b/doc/nrf/protocols/matter/getting_started/low_power_configuration.rst @@ -16,6 +16,7 @@ The following Matter samples and applications use the low power configuration by * :ref:`Matter door lock sample ` * :ref:`Matter light switch sample ` +* :ref:`Matter smoke CO alarm ` * :ref:`Matter window covering sample ` * :ref:`Matter weather station application ` @@ -90,10 +91,19 @@ The typical use case for a SIT device are actuators, meaning devices such as doo Conversely, LIT devices are designed to be used for sensors or light switches, devices that only report data and are not controllable. In such scenarios, the LIT device initiates communication and it is not able to answer with a small latency, but it can sleep for extended periods of time and achieve much lower power consumption than an SIT. +The LIT device starts operation in the SIT mode and remains in this state until the first ICD client registers to it. +This is necessary because the device is not responsive in the LIT mode, so client registration would be difficult. +Once the ICD client is registered, the ICD device switches to LIT mode in order to save energy. + The LIT device implementation requires multiple new features, such as Check-In protocol (CIP) support, ICD client registration, and User Active Mode Trigger (UAT). These features are not required for SIT device implementation, but can be optionally enabled. -To configure the LIT, CIP or UAT, use the following Kconfig options: +You can enable optional Dynamic SIT LIT switching (DSLS) support for the LIT device. +When enabled, the device can dynamically switch between SIT and LIT modes, even if it has an ICD client registered. +The primary use case for this feature is device types like Smoke/CO Alarm, allowing the device to work as SIT when using a wired power source and switch to LIT and using a battery power source in case of a power outage. +This feature is not available for the SIT device. + +To configure the LIT, CIP, UAT or DSLS, use the following Kconfig options: * :kconfig:option:`CONFIG_CHIP_ICD_LIT_SUPPORT` to enable the Long Idle Time device support. * :kconfig:option:`CONFIG_CHIP_ICD_CHECK_IN_SUPPORT` to enable the Check-In protocol support. @@ -103,14 +113,21 @@ To configure the LIT, CIP or UAT, use the following Kconfig options: * :kconfig:option:`CONFIG_CHIP_ICD_UAT_SUPPORT` to enable the User Active Mode Trigger support. The User Active Mode Trigger allows triggering the ICD device to move from the idle to active state and make it immediately responsive, for example to change its configuration. This option is by default enabled for the LIT device. +* :kconfig:option:`CONFIG_CHIP_ICD_SIT_SLOW_POLL_LIMIT` to limit the slow polling interval value while the device is in the SIT mode. + This option can be used to limit the slow poll interval of an LIT device while temporarily working in the SIT mode. +* :kconfig:option:`CONFIG_CHIP_ICD_DSLS_SUPPORT` to enable Dynamic SIT LIT switching (DSLS) support. + The DSLS support allows the application to dynamically switch between SIT and LIT modes, as long as the requirements for these modes are met. + This option is by default disabled for the LIT device. -The LIT, CIP and UAT features were not finalized for Matter v1.3 and they are marked as provisional, so it is not recommended to use them, though you can find some of the LIT implementation in the Matter SDK and Matter specification. -You can still enable them for testing purposes. +You can enable optional reporting on entering the active mode. +When enabled, the device sends a data report to the subscribed devices. +This could be useful especially in the combination with the User Active Mode Trigger (UAT) feature, to inform the subscribed Matter controller that the user triggered an ICD to enter the active mode. +To enable this functionality, set the :kconfig:option:`CONFIG_CHIP_ICD_REPORT_ON_ACTIVE_MODE` Kconfig option to ``y``. Enable low power mode for the selected networking technology ************************************************************ -The Matter supports using Thread and Wi-Fi as the IPv6-based networking technologies. +The Matter supports using Thread and Wi-Fi® as the IPv6-based networking technologies. Both of the technologies come with their own solutions for optimizing the protocol behavior in terms of power consumption. However, the general goal of the optimization for both is to reduce the time spent in the active state and put the device in the inactive (sleep) state whenever possible. Reducing the device activity time usually comes with a higher response time and a lower performance. @@ -153,6 +170,18 @@ Switching the Matter :ref:`ug_matter_device_low_power_icd_modes` and frequently To avoid this issue, set the :kconfig:option:`CONFIG_CHIP_ICD_SLOW_POLL_INTERVAL` and :kconfig:option:`CONFIG_CHIP_ICD_FAST_POLLING_INTERVAL` Kconfig options to the same value (for example, ``500``). The typical use case that the SSED is best suited for is battery-powered devices that require short response time, such as door locks or window blinds. +Child timeouts configuration +---------------------------- + +The device working in a Thread child role uses additional mechanisms for periodically ensuring that the communication with the parent is still possible. +These mechanisms lead to waking up the device and exchanging the messages with the parent, if the related timeout expires. +In case of using the SED poll period value greater than any of these timeouts, the device wakes up more often than what is defined by the poll period. +To ensure that the SED device wakes up exactly at every poll period, set the following Kconfig options to the value greater than the poll period value (for Matter ICD :kconfig:option:`CONFIG_CHIP_ICD_SLOW_POLL_INTERVAL`): + +* :kconfig:option:`CONFIG_OPENTHREAD_MLE_CHILD_TIMEOUT` +* :kconfig:option:`CONFIG_OPENTHREAD_CHILD_SUPERVISION_CHECK_TIMEOUT` +* :kconfig:option:`CONFIG_OPENTHREAD_CHILD_SUPERVISION_INTERVAL` + Matter over Wi-Fi ================= @@ -202,6 +231,18 @@ Disable unused pins and peripherals :start-after: disable_unused_pins_start :end-before: disable_unused_pins_end +Disable LEDs module +=================== + +When performing the power measurements on various development kits, the LEDs can either be included in the measurement circuit or not: + +* For the nRF52840 DK and nRF5340 DK, the LEDs are excluded from the measurement circuit, so they can be enabled for the low power configuration and it is not going to impact the measurement results. +* For the nRF54L15 DK, the MOSFET transistors controlling the LEDs are included in the measurement circuit. + This results in measurement results being increased by an additional, small leakage current that appears if an LED is turned on. + To measure the current consumption of the nRF54L15 SoC without including development kit components, such as LEDs, it is recommended to disable them. + +To disable LEDs in the Matter samples and applications, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_LEDS ` Kconfig option to ``n``. + .. _ug_matter_enable_pm_module: Enable Device Power Management module @@ -246,3 +287,12 @@ Configure radio transmitter power :end-before: radio_power_end See :ref:`ug_matter_gs_transmission_power` for more information. + +Disable unused RAM sections +*************************** + +The :ref:`lib_ram_pwrdn` library allows you to disable unused sections of RAM and save power in low-power applications. +Unused sections of RAM depend on the SoC architecture and the total amount of used static RAM. +In Matter, you can use this feature by setting the :kconfig:option:`CONFIG_RAM_POWER_DOWN_LIBRARY` Kconfig option to ``y``. + +Once the feature is enabled, the :c:func:`power_down_unused_ram` function is called automatically in the :file:`matter_init.cpp` file during the initialization process. diff --git a/doc/nrf/protocols/matter/getting_started/matter_api.rst b/doc/nrf/protocols/matter/getting_started/matter_api.rst index 491591ea9acf..dce327f17806 100644 --- a/doc/nrf/protocols/matter/getting_started/matter_api.rst +++ b/doc/nrf/protocols/matter/getting_started/matter_api.rst @@ -114,7 +114,7 @@ The nRF Connect Matter API contains the following functions that can be used to This function accepts an :c:struct:`InitData` argument that contains the implementation of all required Matter interfaces. If no argument is provided, this function uses the default-constructed :c:struct:`InitData` temporary object. - After this function is used, the :c:func:`StartServer()` function must be called to start the Matter thread, eventually execute the initialization, and wait to synchronize the caller's thread with the Matter thread. + After this function is used, the :c:func:`StartServer` function must be called to start the Matter thread, eventually execute the initialization, and wait to synchronize the caller's thread with the Matter thread. :c:func:`StartServer()`: This is a blocking function that starts the Matter thread and waits until all Matter server components are initialized. @@ -147,7 +147,7 @@ The nRF Connect Matter API contains of the following functions that can be used :c:func:`DefaultEventHandler()`: This is an nRF Connect Matter event handler function that is registered in the nRF Connect Matter Initialization API by default. - You can unregister this handler with the :c:func:`UnregisterEventHandler()` function in the application if needed. + You can unregister this handler with the :c:func:`UnregisterEventHandler` function in the application if needed. For more details regarding nRF Connect Matter event handler API, refer to the Doxygen commentary in the :file:`ncs/nrf/samples/matter/common/src/app/matter_event_handler.h` header file. @@ -204,17 +204,17 @@ The Matter SDK Data Model interacs with the user's code based on callbacks that The generic callbacks that are common for Matter applications, regardless of the clusters configuration, are defined in the :file:`ncs/modules/lib/matter/src/app/util/generic-callbacks.h` header file. The weak implementations of these functions, that can be overwritten in the application, are provided in the :file:`ncs/modules/lib/matter/src/app/util/generic-callback-stubs.cpp` source file. -For example, the :c:func:`MatterPostAttributeChangeCallback()` function is called by the Matter Data Model engine directly after an attribute value is changed. +For example, the :c:func:`MatterPostAttributeChangeCallback` function is called by the Matter Data Model engine directly after an attribute value is changed. The value passed into this callback is the value to which the attribute was set by the framework. In addition to the value, this function is called with the attribute path ( of ``chip::app::ConcreteAttributePath`` type) that can be used to filter the cluster and particular attribute. -The :c:func:`MatterPostAttributeChangeCallback()` function is useful if you need to provide the synchronization between the Data Model and the application state. +The :c:func:`MatterPostAttributeChangeCallback` function is useful if you need to provide the synchronization between the Data Model and the application state. For instance, a Matter device that implements a light bulb may drive the state of the LED based on the ``On/Off`` attribute value. Every change of this attribute is reported by the aforementioned callback and thus can be captured in the application layer. -In addition to the :c:func:`MatterPostAttributeChangeCallback()` function, Matter defines other generic callbacks that can be employed in different use cases. -For example, the :c:func:`emberAfExternalAttributeReadCallback()` and :c:func:`emberAfExternalAttributeWriteCallback()` functions can be used to store and handle attributes externally, by bypassing the Matter Data Model framework. +In addition to the :c:func:`MatterPostAttributeChangeCallback` function, Matter defines other generic callbacks that can be employed in different use cases. +For example, the :c:func:`emberAfExternalAttributeReadCallback` and :c:func:`emberAfExternalAttributeWriteCallback` functions can be used to store and handle attributes externally, by bypassing the Matter Data Model framework. To learn the complete set of Matter generic callbacks, refer to the :file:`ncs/modules/lib/matter/src/app/util/generic-callbacks.h` header file and included Doxygen commentary. -An example implementation of the :c:func:`MatterPostAttributeChangeCallback()` that can be used to control the Door Lock Matter device type is listed below: +An example implementation of the :c:func:`MatterPostAttributeChangeCallback` that can be used to control the Door Lock Matter device type is listed below: .. code-block:: C++ diff --git a/doc/nrf/protocols/matter/getting_started/memory_optimization.rst b/doc/nrf/protocols/matter/getting_started/memory_optimization.rst index 1cca9750399d..8710c4cc7d99 100644 --- a/doc/nrf/protocols/matter/getting_started/memory_optimization.rst +++ b/doc/nrf/protocols/matter/getting_started/memory_optimization.rst @@ -48,9 +48,6 @@ LTO is an advanced compilation technique that performs optimization across all c To enable LTO, set the :kconfig:option:`CONFIG_LTO` and :kconfig:option:`CONFIG_ISR_TABLES_LOCAL_DECLARATION` Kconfig options to ``y``. -.. note:: - Support for Link Time Optimization is experimental. - .. _ug_matter_device_memory_profiling: Profiling memory in Matter applications @@ -69,8 +66,8 @@ Alternatively, you can enable each option separately. The Kconfig option enables the following functionalities on the Matter device: -- :ref:`ug_matter_configuring_settings_shell` by setting the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_SHELL` Kconfig option to ``y``. -- :doc:`matter:nrfconnect_examples_cli` by setting the :kconfig:option:`CONFIG_CHIP_LIB_SHELL` Kconfig option to ``y``. +- :ref:`ug_matter_configuring_settings_shell` by setting the :ref:`CONFIG_NCS_SAMPLE_MATTER_SETTINGS_SHELL` Kconfig option to ``y``. +- :doc:`Command-line interface ` by setting the :kconfig:option:`CONFIG_CHIP_LIB_SHELL` Kconfig option to ``y``. - Zephyr Kernel commands by setting the :kconfig:option:`CONFIG_KERNEL_SHELL` Kconfig option to ``y``. - Zephyr Settings shell by setting the :kconfig:option:`CONFIG_SETTINGS_SHELL` Kconfig option to ``y``. - OpenThread shell by setting the :kconfig:option:`CONFIG_OPENTHREAD_SHELL` Kconfig option to ``y`` if you build the Matter over Thread variant. @@ -359,7 +356,7 @@ The following table presents the possible threads used in a Matter application a | Thread name | Kconfig option | Description of the related stack | +---------------------+------------------------------------------------------------------+----------------------------------------------------------------+ | CHIP | :kconfig:option:`CONFIG_CHIP_TASK_STACK_SIZE` | Matter thread stack. | -| | | For example, all functions scheduled to be execute from | +| | | For example, all functions scheduled to be executed from | | | | the Matter thread context using | | | | the ``SystemLayer().ScheduleLambda`` function. | +---------------------+------------------------------------------------------------------+----------------------------------------------------------------+ @@ -367,7 +364,7 @@ The following table presents the possible threads used in a Matter application a | | | For Matter over Thread only. | +---------------------+------------------------------------------------------------------+----------------------------------------------------------------+ | main | :kconfig:option:`CONFIG_MAIN_STACK_SIZE` | Application thread stack. | -| | | For example, all functions scheduled to be execute from | +| | | For example, all functions scheduled to be executed from | | | | the Main thread context using | | | | the ``Nrf::PostTask`` function. | +---------------------+------------------------------------------------------------------+----------------------------------------------------------------+ @@ -391,7 +388,7 @@ The following table presents the possible threads used in a Matter application a | | | For Matter over Thread only. | +---------------------+------------------------------------------------------------------+----------------------------------------------------------------+ | net_mgmt | :kconfig:option:`CONFIG_NET_MGMT_EVENT_STACK_SIZE` | Zephyr network management event processing thread stack. | -| | | For Matter over Wi-Fi only. | +| | | For Matter over Wi-Fi® only. | +---------------------+------------------------------------------------------------------+----------------------------------------------------------------+ | wpa_supplicant_main | :kconfig:option:`CONFIG_WIFI_NM_WPA_SUPPLICANT_THREAD_STACK_SIZE`| WPA supplicant main thread. | | | | Processing Wi-Fi requests and connections. | @@ -418,7 +415,18 @@ The static size is determined by the :kconfig:option:`CONFIG_CHIP_MALLOC_SYS_HEA To use a dynamic heap size on your Matter device, set them both to ``n``. The static heap size means that you can define the maximum heap size for your application by setting the :kconfig:option:`CONFIG_CHIP_MALLOC_SYS_HEAP_SIZE` Kconfig value. -You can also adjust the heap dedicated for MbedTLS purposes by setting the :kconfig:option:`CONFIG_MBEDTLS_HEAP_SIZE` Kconfig option value. +You can also adjust the heap dedicated for Mbed TLS purposes by setting the :kconfig:option:`CONFIG_MBEDTLS_HEAP_SIZE` Kconfig option value. + +Packet buffer pool size +----------------------- + +The Matter application uses a fixed-size pool for packet buffer memory management. +The pool size is determined by the :kconfig:option:`CONFIG_CHIP_SYSTEM_PACKETBUFFER_POOL_SIZE` Kconfig option. +You can adjust the pool size to reduce the memory usage of your application, but that can have a negative effect on the performance of the application. + +.. note:: + The Thread protocol has a separate configuration for memory allocation. + See :ref:`thread_configuring_messagepool` in the Thread documentation for more information. Memory profiling troubleshooting ================================ diff --git a/doc/nrf/protocols/matter/getting_started/testing/index.rst b/doc/nrf/protocols/matter/getting_started/testing/index.rst index 1397165e4c9b..d255d98266f2 100644 --- a/doc/nrf/protocols/matter/getting_started/testing/index.rst +++ b/doc/nrf/protocols/matter/getting_started/testing/index.rst @@ -8,7 +8,7 @@ Testing Matter in the |NCS| When you build any of the available Matter samples to the supported development kits, you automatically build the Matter stack for the nRF Connect platform. The development kit and the application running Matter stack that is programmed on the development kit together form the Matter accessory device. -The |NCS| supports Matter stack that is built on top of a low-power, 802.15.4-compatible Thread network, or on top of a Wi-Fi network. +The |NCS| supports Matter stack that is built on top of a low-power, 802.15.4-compatible Thread network, or on top of a Wi-Fi® network. To control the Matter accessory device remotely over either of these networks, you need to set up a Matter controller on a PC or using one of the :ref:`compatible commercial ecosystems `. |matter_controller_def_nolink| diff --git a/doc/nrf/protocols/matter/getting_started/testing/thread_separate_otbr_linux_macos.rst b/doc/nrf/protocols/matter/getting_started/testing/thread_separate_otbr_linux_macos.rst index c3bef85f449a..cffa66476075 100644 --- a/doc/nrf/protocols/matter/getting_started/testing/thread_separate_otbr_linux_macos.rst +++ b/doc/nrf/protocols/matter/getting_started/testing/thread_separate_otbr_linux_macos.rst @@ -11,7 +11,7 @@ Matter over Thread: Configuring Border Router and Linux/macOS controller on sepa The recommended approach for Matter over Thread is to run the Thread Border Router and the Matter controller on separate devices. With the Thread Border Router installed on Raspberry Pi, this approach provides support for most functionalities. -For example, it allows using a mobile controller by providing connectivity between a Wi-Fi network and a Thread network. +For example, it allows using a mobile controller by providing connectivity between a Wi-Fi® network and a Thread network. In such setup, Raspberry Pi runs the Thread Border Router, which provides communication between the Thread nodes and the Matter controller. The controller can be installed on a PC. diff --git a/doc/nrf/protocols/matter/getting_started/testing/wifi_pc.rst b/doc/nrf/protocols/matter/getting_started/testing/wifi_pc.rst index b63030bca0c7..132ffcf9714f 100644 --- a/doc/nrf/protocols/matter/getting_started/testing/wifi_pc.rst +++ b/doc/nrf/protocols/matter/getting_started/testing/wifi_pc.rst @@ -7,7 +7,7 @@ Matter over Wi-Fi: Configuring CHIP Tool for Linux or macOS :local: :depth: 2 -In this setup, the Matter controller is installed on PC that is running either Linux or macOS, and a dedicated Wi-Fi Access Point is used. +In this setup, the Matter controller is installed on PC that is running either Linux or macOS, and a dedicated Wi-Fi® Access Point is used. This is the recommended setup for Matter over Wi-Fi. .. figure:: images/matter_wifi_setup_pc.png diff --git a/doc/nrf/protocols/matter/getting_started/transmission_power.rst b/doc/nrf/protocols/matter/getting_started/transmission_power.rst index fcfdcaae283f..adcff0d0a390 100644 --- a/doc/nrf/protocols/matter/getting_started/transmission_power.rst +++ b/doc/nrf/protocols/matter/getting_started/transmission_power.rst @@ -93,6 +93,7 @@ The maximum value of 20 dBm is only recommended for devices that are using :ref: | nrf21540dk | -40 to +20 (:ref:`more information `) | +--------------------------+-----------------------------------------------------------------------------+ | nrf54l15dk_nrf54l15 | -8 to +8 | +| nrf54l15dk_nrf54l10 | | +--------------------------+-----------------------------------------------------------------------------+ You can provide the desired value also as a CMake argument when building the sample. @@ -157,7 +158,7 @@ You can do this by either editing the :file:`prj.conf` file or building the samp The parameter name varies depending on the devices you are building for. For example: - * If you want to build for Thread devices for the ``nrf5340dk/nrf5340/cpuapp`` board target with a Bluetooth LE TX power equal to 3 dBm, add ``-Dmultiprotocol_rpmsg_CONFIG_BT_CTLR_TX_PWR_PLUS_3=y`` as the CMake argument. + * If you want to build for Thread devices for the ``nrf5340dk/nrf5340/cpuapp`` board target with a Bluetooth LE TX power equal to 3 dBm, add ``-Dipc_radio_CONFIG_BT_CTLR_TX_PWR_PLUS_3=y`` as the CMake argument. * If you want to build for Wi-Fi® devices for the ``nrf7002dk/nrf5340/cpuapp`` board target with a Bluetooth LE TX power equal to 3 dBm, add ``-Dhci_ipc_CONFIG_BT_CTLR_TX_PWR_PLUS_3=y`` as the CMake argument. See `nRF Connect for VS Code extension pack `_ documentation for more information. @@ -173,7 +174,7 @@ You can do this by either editing the :file:`prj.conf` file or building the samp .. code-block:: console - west build -b nrf5340dk/nrf5340/cpuapp -- -Dmultiprotocol_rpmsg_CONFIG_BT_CTLR_TX_PWR_PLUS_3=y + west build -b nrf5340dk/nrf5340/cpuapp -- -Dipc_radio_CONFIG_BT_CTLR_TX_PWR_PLUS_3=y * If you want to build for Wi-Fi® devices for the ``nrf7002dk/nrf5340/cpuapp`` board target with a Bluetooth LE TX power equal to 3 dBm, run the following command: diff --git a/doc/nrf/protocols/matter/index.rst b/doc/nrf/protocols/matter/index.rst index e6bc148f21fb..ddadcb2e0c09 100644 --- a/doc/nrf/protocols/matter/index.rst +++ b/doc/nrf/protocols/matter/index.rst @@ -11,45 +11,62 @@ Matter .. matter_intro_start `Matter`_ (formerly Project Connected Home over IP or Project CHIP) is an open-source application layer that aims at creating a unified communication standard across smart home devices, mobile applications, and cloud services. -It supports a wide range of existing technologies, including Wi-Fi, Thread, and Bluetooth® LE, and uses IPv6-based transport protocols like TCP and UDP to ensure connectivity between different kinds of networks. +It supports a wide range of existing technologies, including Wi-Fi®, Thread, and Bluetooth® LE, and uses IPv6-based transport protocols like TCP and UDP to ensure connectivity between different kinds of networks. .. matter_intro_end -The |NCS| allows you to develop applications with different versions of Matter, as per the following table: +|NCS| |release| allows you to develop applications with Matter specification version 1.4.0 and `Matter SDK version`_ 1.4.0.0. +For a full list of |NCS| and Matter versions, view the following table: -+--------------------------+-----------------------------------------------------+------------------------+ -| nRF Connect SDK version | Matter specification version | `Matter SDK version`_ | -+==========================+=====================================================+========================+ -| |release| | :ref:`1.3.0 ` | 1.3.0.0 | -+--------------------------+-----------------------------------------------------+------------------------+ -| v2.6.1 | :ref:`1.2.0 ` | 1.2.0.1 | -+--------------------------+ | | -| v2.6.0 | | | -+--------------------------+-----------------------------------------------------+------------------------+ -| v2.5.2 | :ref:`1.1.0 ` | 1.1.0.1 | -+--------------------------+ | | -| v2.5.1 | | | -+--------------------------+ | | -| v2.5.0 | | | -+--------------------------+ | | -| v2.4.3 | | | -+--------------------------+ | | -| v2.4.2 | | | -+--------------------------+ | | -| v2.4.1 | | | -+--------------------------+ | | -| v2.4.0 | | | -+--------------------------+-----------------------------------------------------+------------------------+ -| v2.3.0 | :ref:`1.0.0 ` | 1.0.0.2 | -+--------------------------+ +------------------------+ -| v2.2.0 | | 1.0.0.0 | -+--------------------------+ +------------------------+ -| v2.1.4 | | 1.0.0.0 | -+--------------------------+ +------------------------+ -| v2.1.3 | | 1.0.0.0 | -+--------------------------+ +------------------------+ -| v2.1.2 | | 1.0.0.0 | -+--------------------------+-----------------------------------------------------+------------------------+ +.. toggle:: nRF Connect SDK, Matter specification, and Matter SDK versions + + +--------------------------+-----------------------------------------------------+------------------------+ + | nRF Connect SDK version | Matter specification version | Matter SDK version | + +==========================+=====================================================+========================+ + | v2.9.99 (latest) | :ref:`1.4.0 ` | 1.4.0.0 | + +--------------------------+ | | + | |release| | | | + +--------------------------+ | | + | v2.9.0 | | | + +--------------------------+-----------------------------------------------------+------------------------+ + | v2.8.0 | :ref:`1.3.0 ` | 1.3.0.0 | + +--------------------------+ | | + | v2.7.0 | | | + +--------------------------+-----------------------------------------------------+------------------------+ + | v2.6.2 | :ref:`1.2.0 ` | 1.2.0.1 | + +--------------------------+ | | + | v2.6.1 | | | + +--------------------------+ | | + | v2.6.0 | | | + +--------------------------+-----------------------------------------------------+------------------------+ + | v2.5.3 | :ref:`1.1.0 ` | 1.1.0.1 | + +--------------------------+ | | + | v2.5.2 | | | + +--------------------------+ | | + | v2.5.1 | | | + +--------------------------+ | | + | v2.5.0 | | | + +--------------------------+ | | + | v2.4.4 | | | + +--------------------------+ | | + | v2.4.3 | | | + +--------------------------+ | | + | v2.4.2 | | | + +--------------------------+ | | + | v2.4.1 | | | + +--------------------------+ | | + | v2.4.0 | | | + +--------------------------+-----------------------------------------------------+------------------------+ + | v2.3.0 | :ref:`1.0.0 ` | 1.0.0.2 | + +--------------------------+ +------------------------+ + | v2.2.0 | | 1.0.0.0 | + +--------------------------+ +------------------------+ + | v2.1.4 | | 1.0.0.0 | + +--------------------------+ +------------------------+ + | v2.1.3 | | 1.0.0.0 | + +--------------------------+ +------------------------+ + | v2.1.2 | | 1.0.0.0 | + +--------------------------+-----------------------------------------------------+------------------------+ .. note:: The Matter SDK version is taken as the base for the `dedicated Matter fork`_, which can then include additional changes for each |NCS| release. @@ -62,7 +79,7 @@ The |NCS| allows you to develop applications with different versions of Matter, For more information about Matter compatibility, see :ref:`ug_matter_overview_dev_model_support` and :ref:`supported Matter features per SoC `. -See :ref:`matter_samples` for the list of available samples, :ref:`Matter Weather Station ` or :ref:`Matter bridge ` for specific Matter application. +See :ref:`matter_samples` for the list of available samples, or :ref:`Matter Weather Station ` or :ref:`Matter bridge ` for specific Matter applications. If you are new to Matter, you can follow along with the video tutorials on Nordic Semiconductor's YouTube channel, for example `Developing Matter 1.0 products with nRF Connect SDK`_. .. note:: diff --git a/doc/nrf/protocols/matter/overview/architecture.rst b/doc/nrf/protocols/matter/overview/architecture.rst index 06c3724a1098..551e70cf45aa 100644 --- a/doc/nrf/protocols/matter/overview/architecture.rst +++ b/doc/nrf/protocols/matter/overview/architecture.rst @@ -90,4 +90,4 @@ Transport and IP Framing This layer manages the transmission of the payload through the IP network to the peer device. It uses either the Transmission Control Protocol (TCP) or the combination of User Datagram Protocol (UDP) with Matter's Message Reliability Protocol (MRP). The MRP implements retransmissions, provides confirmation of delivery, and ensures that duplicated messages are rejected. -During the commissioning process, Bluetooth Transport Protocol over Bluetooth LE can be used instead of this layer. +During the commissioning process, Bluetooth® Transport Protocol over Bluetooth LE can be used instead of this layer. diff --git a/doc/nrf/protocols/matter/overview/commissioning.rst b/doc/nrf/protocols/matter/overview/commissioning.rst index 962dac91d0a1..84e821e492f5 100644 --- a/doc/nrf/protocols/matter/overview/commissioning.rst +++ b/doc/nrf/protocols/matter/overview/commissioning.rst @@ -69,7 +69,7 @@ The devices that are to be commissioned need to let the commissioner know about This can happen using the following advertising methods: * Bluetooth® LE - This method is used especially if the node is being added to its first Matter fabric. -* DNS-SD - This method is commonly used if the node is connected to Ethernet or is already a member of a Wi-Fi or Thread network. +* DNS-SD - This method is commonly used if the node is connected to Ethernet or is already a member of a Wi-Fi® or Thread network. * Planned for future releases: Wi-Fi Access Point - This method will use the Wi-Fi Soft-AP functionality and will be used for devices that are not yet members of any network. The advertisement priority is defined within the Discovery Capabilities Bitmask, provided in the onboarding data. diff --git a/doc/nrf/protocols/matter/overview/data_model.rst b/doc/nrf/protocols/matter/overview/data_model.rst index a82c135843b4..89233f29b313 100644 --- a/doc/nrf/protocols/matter/overview/data_model.rst +++ b/doc/nrf/protocols/matter/overview/data_model.rst @@ -189,6 +189,14 @@ Smart Plugs/Outlets device types | Water Valve | A Water Valve is a device that is capable of being switched on and off | Certifiable | | | | and performing flow measurements. | | | +-------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ +| Mounted On/Off | A Mounted On/Off Control is a fixed device that provides power to another | Certifiable | | +| Control | device that is plugged into it, and is capable of switching that provided | | | +| | power on or off. | | | ++-------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ +| Mounted Dimmable | A Mounted Dimmable Load Control is a fixed device that provides power | Certifiable | | +| Load Control | to another device that is plugged into it, and is capable of being | | | +| | switched on or off and have its level adjusted. | | | ++-------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ .. _ug_matter_device_types_switches_controls: @@ -410,6 +418,22 @@ Energy device types | Supply Equipment | (Electric Vehicle) to be connected to the mains electricity supply to allow | | | | | it to be charged | | | +--------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ +| Water Heater | A Water Heater is a device that is installed to heat water for showers, | Certifiable | | +| | baths etc. | | | ++--------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ +| Solar Power | A Solar Power device is a device that allows a solar panel array, associated | Certifiable | | +| | controller and, if appropriate, inverter, to be monitored and controlled | | | +| | by Energy Management System. | | | ++--------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ +| Battery Storage | A Battery Storage device is a device that allows a DC battery, an associated | Certifiable | | +| | controller, and an AC inverter, to be monitored and controlled by | | | +| | an Energy Management System in order to manage the peaks and troughs | | | +| | of supply and demand, and/or to optimize cost of the energy consumed | | | +| | in premises. | | | ++--------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ +| Heat Pump | A Heat Pump device is a device that uses electrical energy to heat either | Certifiable | | +| | spaces or water tanks using ground, water or air as the heat source. | | | ++--------------------+------------------------------------------------------------------------------+---------------------+---------------------------------------+ .. _ug_matter_device_types_utility: diff --git a/doc/nrf/protocols/matter/overview/dev_model.rst b/doc/nrf/protocols/matter/overview/dev_model.rst index 13ff8cab372f..5d236f14de43 100644 --- a/doc/nrf/protocols/matter/overview/dev_model.rst +++ b/doc/nrf/protocols/matter/overview/dev_model.rst @@ -13,7 +13,7 @@ The Matter stack implementation contains separation between platform-agnostic an The open-source implementation offers ports for several resource-constrained, embedded SoCs as well as POSIX-based platforms. Matter strives for reusing technologies from market-proven solutions, such as Apple HomeKit or Google Weave. -Wi-Fi and :ref:`ug_thread` are its main wireless connectivity protocols that offer seamless integration with other IPv6-based networks and are application-layer agnostic. +Wi-Fi® and :ref:`ug_thread` are its main wireless connectivity protocols that offer seamless integration with other IPv6-based networks and are application-layer agnostic. Bluetooth® LE can be used for commissioning of the Matter accessories, and QR codes and NFC tags can be used to initiate the commissioning. Matter in the |NCS| @@ -21,7 +21,7 @@ Matter in the |NCS| The |NCS| provides full toolchain for Linux, macOS, and Windows, and is built on top of the Zephyr RTOS. It includes west for managing repositories, toolchain manager for managing toolchain, Kconfig for feature configuration, and Devicetree for board description. -Finally, it integrates the OpenThread and Wi-Fi stacks, both of which can work in a multiprotocol scenario with the integrated Bluetooth® LE stack. +Finally, it integrates the OpenThread and Wi-Fi stacks, both of which can work in a multiprotocol scenario with the integrated Bluetooth LE stack. Nordic Semiconductor integrates the Matter stack in the |NCS| using a `dedicated Matter fork`_. The official Matter repository is fetched into the fork and the fork is included in the |NCS| as a Zephyr module, including files deployed in the :ref:`matter_index` tab. diff --git a/doc/nrf/protocols/matter/overview/group_communication.rst b/doc/nrf/protocols/matter/overview/group_communication.rst new file mode 100644 index 000000000000..876f43b1a031 --- /dev/null +++ b/doc/nrf/protocols/matter/overview/group_communication.rst @@ -0,0 +1,268 @@ +.. _ug_matter_group_communication: + +Matter Group Communication +########################## + +.. contents:: + :local: + :depth: 2 + +This section describes how Group Communication works in Matter. + +Group Communication in the Matter standard refers to the ability of devices within a Matter network to communicate with multiple devices simultaneously using multicast messages. +This is particularly useful for scenarios where a command needs to be sent to multiple devices at once, such as turning off all lights in a house or setting a scene. + +Group setup +*********** + +Devices are configured to be part of one or more groups. +Each group is identified by a unique group ID. +A device can be a member of multiple groups, and a group can include multiple devices. + +Group Messaging +*************** + +When a command needs to be sent to all devices in a group, the command initiator (a controller, a smartphone app, or another device) sends a multicast message addressed to the group ID. +Only the devices that are members of that group will receive messages to or act on a message. +Using Group Communication reduces network traffic because a single multicast message can reach multiple devices. +This is more efficient than sending individual messages to each device. +It also enhances scalability as adding more devices to a group does not increase the number of messages required for group-wide commands. + +.. note:: + + Group Communication is by design not reliable, because it does not use any way of acknowledgment. + Because of that, the device that sends the message cannot determine whether it reached all devices belonging to the group. + Communication reliability depends on the underlying networking technology. + For example, sleepy devices should not be targeted in the group messaging, as they will likely miss incoming messages, because their radio is inactive for most of the time. + Multicast messages are not buffered by their parents, so they will not reach the destination. + +Matter ensures that Group Communication is secure. +Messages are encrypted, and only authorized devices within the group can decrypt and act on them. +Security provisions are in place to manage who can add or remove devices from groups, preventing unauthorized control. +Common use cases include lighting control (for example, turning all lights in a room or building on or off), temperature adjustments for HVAC systems in multiple zones, and scene setting where multiple device types perform coordinated actions (such as lights dim, blinds close, temperature adjusts). + +In the Matter specification, managing Group Communication effectively and securely involves specific clusters such as the Group Cluster and the Group Key Management Cluster. +These clusters play crucial roles in handling group configurations and ensuring secure communication within groups. + +Group Cluster +============= + +The Group Cluster is primarily responsible for managing group memberships within devices. +It allows devices to be added to or removed from groups and to query their group memberships. +This cluster is essential for organizing devices into logical sets that can receive common commands, which is fundamental for scenarios like controlling multiple lights with a single command. +Group Clusters should be supported only for devices that can receive groupcast communication. + +The following are the key functions of a Group Cluster: + +* Add Group/Remove Group - These commands allow devices to be dynamically added to or removed from specific groups. +* View Group Membership - Devices can report which groups they belong to, which is useful for controllers to make decisions about sending commands. +* Capacity Management - The cluster handles the limitations on how many groups a device can be a member of, ensuring that device capabilities are not exceeded. + +Group Key Management Cluster +============================ + +The Group Key Management Cluster is crucial for the security aspect of Group Communication. +It manages the encryption keys that are used to secure multicast messages sent to groups. +This ensures that only the members of a group can read the messages intended for that group, maintaining confidentiality and integrity. +A cluster should be supported for both the device that is a transmitter and the receiver of Group Communication. + +The following are the key functions of a Group Key Management Cluster: + +* Key Set Creation and Distribution - This function involves generating and distributing the keys that will be used to encrypt and decrypt messages sent to the group. + The distribution must be secure to prevent interception and unauthorized access. +* Key Storage and Handling - Secure storage and handling of keys within devices are managed to prevent unauthorized access and ensure that keys are available when needed for encryption and decryption processes. + +Example use cases +***************** + +The following use cases demonstrate how you can manage the Group Communication settings using the ``chip-tool``. + +Settings for the ``chip-tool`` +============================== + +Check first your settings, keysets and groups. + +* To see the Group Cluster and Group Key Management Cluster settings you can manage, use the following command: + + .. code-block:: none + + ./chip-tool groupsettings + + * show-groups + * add-group + * remove-group + * show-keysets + * bind-keyset + * unbind-keyset + * add-keysets + * remove-keyset + + +* To see the predefined keysets, use the following command: + + .. code-block:: none + + ./chip-tool groupsettings show-keysets + ... + +-------------------------------------------------------------------------------------+ + | Available KeySets : | + +-------------------------------------------------------------------------------------+ + | KeySet Id | Key Policy | + | 0x1a3 Trust First | + | 0x1a2 Cache and Sync | + | 0x1a1 Cache and Sync | + +-------------------------------------------------------------------------------------+ + + where: + + KeySetId 0x1a3 Epochs keys: + epochKey0 = d0d1d2d3d4d5d6d7d8d9dadbdcdddedf + epochStartTime0 = 2220000 + epochKey1 = d1d1d2d3d4d5d6d7d8d9dadbdcdddedf + epochStartTime1 = 2220001 + epochKey2 = d2d1d2d3d4d5d6d7d8d9dadbdcdddedf + epochStartTime2 = 2220002 + KeySetId 0x1a2 Epochs keys: + epochKey0 = d0d1d2d3d4d5d6d7d8d9dadbdcdddedf + epochStartTime0 = 2220000 + epochKey1 = e0e1e2e3e4e5e6e7e8e9eaebecedeeef + epochStartTime1 = 2220001 + epochKey2 = f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff + epochStartTime2 = 2220002 + KeySetId 0x1a1 Epochs keys: + epochKey0 = a0a1a2a3a4a5a6a7a8a9aaabacadaeaf + epochStartTime0 = 1110000 + epochKey1 = b0b1b2b3b4b5b6b7b8b9babbbcbdbebf + epochStartTime1 = 1110001 + epochKey2 = c0c1c2c3c4c5c6c7c8c9cacbcccdcecf + epochStartTime2 = 1110002 + +* To see the groups, use the following command: + + .. code-block:: none + + ./chip-tool groupsettings show-groups + ... + +-------------------------------------------------------------------------------------+ + | Available Groups : | + +-------------------------------------------------------------------------------------+ + | Group Id | KeySet Id | Group Name | + | 0x101 0x1a1 Group #1 | + | 0x102 0x1a2 Group #2 | + | 0x103 0x1a3 Group #3 | + +-------------------------------------------------------------------------------------+ + +Group Communication triggered from the controller +================================================= + +.. tabs:: + + .. group-tab:: Nodes + + You need the `chip-tool`_ and the :ref:`matter_light_bulb_sample` sample to run through this use case. + + .. group-tab:: Precondition + + Commission the Light Bulb to the same fabric as the chip-tool. + + .. group-tab:: Steps + + Complete the following steps to create a custom group based on a custom keyset and start Group Communication: + + 1. Generate a custom keyset:: + + ./chip-tool groupsettings add-keysets 0xabcd 0 3330000 hex:0123456789abcdef0123456789abcdef + ./chip-tool groupsettings bind-keyset 0xdcba 0xabcd + + #. Set the keyset on the Light Bulb based on generated controller's group settings:: + + ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID":"0xabcd","groupKeySecurityPolicy":0,"epochKey0":"0123456789abcdef0123456789abcdef","epochStartTime0":"3330000","epochKey1":"0123456789abcdef0123456789abcdee","epochStartTime1":"3330001","epochKey2":"0123456789abcdef0123456789abcded","epochStartTime2":"3330002"}' 1 0 + + #. Set the keyset to the group map:: + + ./chip-tool groupkeymanagement write group-key-map '[{"groupId":"0xdcba","groupKeySetID":"0xabcd","fabricIndex":"1"}]' 1 0 + + #. Add the group on the application endpoint (endpoint 1 includes the on/off cluster):: + + ./chip-tool groups add-group 0xdcba Custom_Group 1 1 + + #. Set the ACL to permit the Group Communication from a specific group ID:: + + ./chip-tool accesscontrol write acl '[{"fabricIndex":"1","privilege":"5","authMode":"2","subjects":["112233"],"targets":null},{"fabricIndex":"1","privilege":"3","authMode":"3","subjects":["0xdcba"],"targets":[{"cluster":null,"endpoint":"1","deviceType":null}]}]' 1 0 + + #. Send a command to toggle on/off on the application endpoint (endpoint 1 includes the on/off cluster):: + + ./chip-tool onoff toggle 0xffffffffffffdcba 1 + + **LED2** (nRF53 and nRF52 Series devices) or **LED1** (nRF54 Series devices) on the Light Bulb should now change the state. + +Group Communication triggered from the accessory (Light Switch) +=============================================================== + +The initial settings for this use case are the following: + +.. code-block:: none + + Light Bulb nodeid = 2 + Light Switch nodeid = 1 + Test group keyset + groupKeySetID=258 + epochKey0=a0a1a2a3a4a5a6a7a8a9aaabacad7531 + epochStartTime0=1110000 + epochKey1=b0b1b2b3b4b5b6b7b8b9babbbcbd7531 + epochStartTime1=1110001 + epochKey2=c0c1c2c3c4c5c6c7c8c9cacbcccd7531 + epochStartTime2=1110002 + Test group: + groupId=30001 + name=Test_Group_30001 + +.. tabs:: + + .. group-tab:: Nodes + + You need the following to run through this use case: + + * The `chip-tool`_ + * The :ref:`matter_light_bulb_sample` sample + * The :ref:`matter_light_switch_sample` sample + + .. group-tab:: Precondition + + Commission the Light Bulb and Light Switch to the same fabric as the chip-tool. + + .. group-tab:: Steps + + Complete the following steps to start Group Communication: + + 1. Set the group settings on the on/off client (Light Switch):: + + ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID":"258","groupKeySecurityPolicy":0,"epochKey0":"a0a1a2a3a4a5a6a7a8a9aaabacad7531","epochStartTime0":"1110000","epochKey1":"b0b1b2b3b4b5b6b7b8b9babbbcbd7531","epochStartTime1":"1110001","epochKey2":"c0c1c2c3c4c5c6c7c8c9cacbcccd7531","epochStartTime2":"1110002"}' 1 0 + + #. Set the keyset to the group map on the on/off client (Light Switch):: + + ./chip-tool groupkeymanagement write group-key-map '[{"groupId":"30001","groupKeySetID":"258","fabricIndex":"1"}]' 1 0 + + #. Set the same group settings on the on/off server (Light Bulb):: + + ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID":"258","groupKeySecurityPolicy":0,"epochKey0":"a0a1a2a3a4a5a6a7a8a9aaabacad7531","epochStartTime0":"1110000","epochKey1":"b0b1b2b3b4b5b6b7b8b9babbbcbd7531","epochStartTime1":"1110001","epochKey2":"c0c1c2c3c4c5c6c7c8c9cacbcccd7531","epochStartTime2":"1110002"}' 2 0 + + #. Set the keyset to the group map on the on/off server (Light Bulb):: + + ./chip-tool groupkeymanagement write group-key-map '[{"groupId":"30001","groupKeySetID":"258","fabricIndex":"1"}]' 2 0 + + #. Add the group to the Light Bulb application endpoint (endpoint 1 includes the on/off cluster):: + + ./chip-tool groups add-group 30001 Test_Group_30001 2 1 + + #. Set the binding to the on/off client (Light Switch):: + + ./chip-tool binding write binding '[{"fabricIndex":"1","group":"30001"}]' 1 1 + + #. Set ACL on the on/off server (Light Bulb):: + + ./chip-tool accesscontrol write acl '[{"fabricIndex":1,"privilege":5,"authMode":2,"subjects":[112233],"targets":null},{"fabricIndex":1,"privilege":3,"authMode":3,"subjects":[30001],"targets":[{"cluster":null,"endpoint":1,"deviceType":null}]}]' 2 0 + + #. Click button **2** (nRF53 and nRF52 Series devices) or button **1** (nRF54 Series devices) on the Light Switch to send the toggle message. + + **LED2** (nRF53 and nRF52 Series devices) or **LED1** (nRF54 Series devices) on the Light Bulb should now change the state. diff --git a/doc/nrf/protocols/matter/overview/index.rst b/doc/nrf/protocols/matter/overview/index.rst index 9cd1e7b59bf8..3ce3dda16d5f 100644 --- a/doc/nrf/protocols/matter/overview/index.rst +++ b/doc/nrf/protocols/matter/overview/index.rst @@ -37,6 +37,7 @@ The following pages provide a brief overview of the Matter structure, in accorda security commissioning multi_fabrics + group_communication dfu bridge dev_model diff --git a/doc/nrf/protocols/matter/overview/integration.rst b/doc/nrf/protocols/matter/overview/integration.rst index a29c7165298b..936473d38f9c 100644 --- a/doc/nrf/protocols/matter/overview/integration.rst +++ b/doc/nrf/protocols/matter/overview/integration.rst @@ -27,7 +27,7 @@ Matter stack in the |NCS| ************************* Matter is located on the top application layer of the integration model, looking from the networking point of view. -The |NCS| and Zephyr provide the Bluetooth® LE, Thread, and Wi-Fi stacks, which must be integrated with the Matter stack using a special intermediate layer. +The |NCS| and Zephyr provide the Bluetooth® LE, Thread, and Wi-Fi® stacks, which must be integrated with the Matter stack using a special intermediate layer. In case of Matter over Thread, the |NCS|'s Multiprotocol Service Layer (MPSL) driver allows running Bluetooth LE and Thread concurrently on the same radio chip. .. figure:: images/matter_nrfconnect_overview_simplified_ncs.svg @@ -56,7 +56,7 @@ This platform design is suitable for the following development kits: .. table-from-rows:: /includes/sample_board_rows.txt :header: heading - :rows: nrf52840dk_nrf52840, nrf5340dk_nrf5340_cpuapp_and_cpuapp_ns, nrf54l15dk_nrf54l15_cpuapp + :rows: nrf52840dk_nrf52840, nrf5340dk_nrf5340_cpuapp, nrf54l15dk_nrf54l15_cpuapp_and_cpuapp_ns The design differences between the supported SoCs are the following: diff --git a/doc/nrf/protocols/matter/overview/network_topologies.rst b/doc/nrf/protocols/matter/overview/network_topologies.rst index 68d4f265c839..8339a5f1b4b2 100644 --- a/doc/nrf/protocols/matter/overview/network_topologies.rst +++ b/doc/nrf/protocols/matter/overview/network_topologies.rst @@ -7,7 +7,7 @@ Matter network topology and concepts :local: :depth: 2 -Matter network can be composed of Ethernet, Wi-Fi, and Thread devices. +Matter network can be composed of Ethernet, Wi-Fi®, and Thread devices. Matter joins these devices together within the local Matter fabric (infrastructure), which allows devices to talk to each other using the same Matter application layer, despite using different network technologies underneath. All communication is achieved over IPv6, although the Matter network is capable of running in the absence of IPv6 infrastructure connected to the Internet, for example within a firewalled network. Bluetooth® LE can be used for commissioning of a Matter device to the Matter network. diff --git a/doc/nrf/protocols/thread/certification.rst b/doc/nrf/protocols/thread/certification.rst index 1cdec52db82c..0585609f75d0 100644 --- a/doc/nrf/protocols/thread/certification.rst +++ b/doc/nrf/protocols/thread/certification.rst @@ -93,47 +93,17 @@ Complete the following steps to prepare for the certification tests: #. Prepare Thread Test Harness. - a. Copy the provided :file:`ncs/modules/lib/openthread/tools/harness-thci/OpenThread.py` file into :file:`C:\\GRL\\Thread1.2\\Thread_Harness\\THCI\\nRF_Connect_SDK.py`. + a. Copy all THCI files provided in the :file:`ncs/nrf/samples/openthread/cli/harness-thci/` directory into :file:`C:\\GRL\\Thread1.2\\Thread_Harness\\THCI\\`. - b. Copy the provided :file:`ncs/nrf/samples/openthread/cli/harness-thci-1-3/nRF_Connect_SDK_1_3.py` file into :file:`C:\\GRL\\Thread1.2\\Thread_Harness\\THCI\\nRF_Connect_SDK_1_3.py`. - - c. Copy images of your choice to :file:`C:\\GRL\\Thread1.2\\Web\\images\\nRF_Connect_SDK.jpg` and :file:`C:\\GRL\\Thread1.2\\Web\\images\\nRF_Connect_SDK_1_3.jpg`. + b. Copy images of your choice to :file:`C:\\GRL\\Thread1.2\\Web\\images\\nRF_Connect_SDK.jpg` and :file:`C:\\GRL\\Thread1.2\\Web\\images\\nRF_Connect_SDK_1_3.jpg`. You can use the same image for both. - d. Edit :file:`C:\\GRL\\Thread1.2\\Thread_Harness\\THCI\\nRF_Connect_SDK.py` as follows: - - .. code-block:: python - - >> Thread Host Controller Interface - >> Device : OpenThread THCI - >> Class : OpenThread - - to - - .. code-block:: python - - >> Thread Host Controller Interface - >> Device : nRF_Connect_SDK THCI - >> Class : nRF_Connect_SDK - - and - - .. code-block:: python - - class OpenThread(OpenThreadTHCI, IThci): - - to - - .. code-block:: python - - class nRF_Connect_SDK(OpenThreadTHCI, IThci): - - e. Edit :file:`C:\\GRL\\Thread1.2\\Web\\data\\deviceInputFields.xml` and prepend the following code: + c. Edit :file:`C:\\GRL\\Thread1.2\\Web\\data\\deviceInputFields.xml` and prepend the following code: .. code-block:: - + 115200 - + - The device with name "nRF Connect SDK" is intended to be used for Thread 1.1 and Thread 1.2 Certification Programs tests. - The device with name "nRF Connect SDK 1.3" is intended to be used for Thread 1.3 Certification Program tests. + The device with name "nRF Connect SDK 1.1 1.2" is intended to be used for Thread 1.1 and Thread 1.2 Certification Programs tests. + The device with name "nRF Connect SDK 1.3 1.4" is intended to be used for Thread 1.3 and Thread 1.4 Certification Programs tests. See the following links for more information on OpenThread: @@ -196,9 +166,9 @@ The report is generated to the output console log, and stored as an additional b Generating the OpenThread report is enabled by default if the :kconfig:option:`CONFIG_NET_L2_OPENTHREAD` Kconfig option is set to ``y``. This means that it is enabled for all samples that use the Thread stack. -To disable the generation, set the :kconfig:option:`CONFIG_OPENTHREAD_REPORT` kconfig option to ``n``. +To disable the generation, set the :kconfig:option:`CONFIG_OPENTHREAD_REPORT` Kconfig option to ``n``. -By default, the build artefact name is set as :file:`ot_report.txt`, but you can specify a different name by setting the :kconfig:option:`CONFIG_OPENTHREAD_REPORT_BUILD_ARTEFACT_NAME` kconfig value to the new one. +By default, the build artefact name is set as :file:`ot_report.txt`, but you can specify a different name by setting the :kconfig:option:`CONFIG_OPENTHREAD_REPORT_BUILD_ARTEFACT_NAME` Kconfig value to the new one. Depending on if you build the application using the :ref:`nrfxlib:ot_libs` or if you build the application and Thread stack from the source files, you will see the following logs in your build console: @@ -209,16 +179,16 @@ Depending on if you build the application using the :ref:`nrfxlib:ot_libs` or if .. code-block:: ################### OPENTHREAD REPORT ################### - + Target device: nrf52840 - + Thread version: v1.3 + + Target device: nrf54l15 + + Thread version: v1.4 + OpenThread library feature set: Minimal Thread Device (MTD) + Thread device type: Sleepy End Device (SED) - + OpenThread Library: openthread/lib/cortex-m4/soft-float/v1.3/mtd/ - + OpenThread NCS revision: thread-reference-20230706-819-gd60aaab22 - + OpenThread NCS SHA: d60aaab22 - + NCS revision: v2.7.99-cs1-41-g26ef793b91-dirty - + NCS SHA: 26ef793b91 - + No differences in the used Thread library in comparison to the NCS v2.7.0 release. + + OpenThread Library: openthread/lib/nrf54l15_cpuapp/soft-float/v1.4/mtd/ + + OpenThread NCS revision: ncs-thread-reference-20241002-dirty + + OpenThread NCS SHA: ee86dc26d + + NCS revision: v2.8.0-preview1-434-g49bcdd3c6d6-dirty + + NCS SHA: 49bcdd3c6d6 + + No differences in the used Thread library in comparison to the NCS v2.8.0 release. ################### END ################### The generated build artefact will also include the list of the :ref:`nrfxlib:nrfxlib` repository changes between the current revision and the latest |NCS| release. @@ -230,16 +200,16 @@ Depending on if you build the application using the :ref:`nrfxlib:ot_libs` or if .. code-block:: ################### OPENTHREAD REPORT ################### - + Target device: nrf52840 - + Thread version: v1.3 + + Target device: nrf54l15 + + Thread version: v1.4 + OpenThread library feature set: Minimal Thread Device (MTD) + Thread device type: Sleepy End Device (SED) - + OpenThread Library: openthread/lib/cortex-m4/soft-float/v1.3/mtd/ - + OpenThread NCS revision: thread-reference-20230706-819-gd60aaab22 - + OpenThread NCS SHA: d60aaab22 - + NCS revision: v2.7.99-cs1-41-g26ef793b91-dirty - + NCS SHA: 26ef793b91 - + Found differences in the nrfxlib repository in comparison to the NCS v2.7.0 release. See the ot_report.txt report file to learn more. + + OpenThread Library: openthread/lib/nrf54l15_cpuapp/soft-float/v1.4/mtd/ + + OpenThread NCS revision: ncs-thread-reference-20241002-dirty + + OpenThread NCS SHA: ee86dc26d + + NCS revision: v2.8.0-preview1-434-g49bcdd3c6d6-dirty + + NCS SHA: 49bcdd3c6d6 + + Found differences in the nrfxlib repository in comparison to the NCS v2.8.0 release. See the ot_report.txt report file to learn more. ################### END ################### You can look at the report file located in the application build directory to see the full list of changes. @@ -250,15 +220,15 @@ Depending on if you build the application using the :ref:`nrfxlib:ot_libs` or if .. code-block:: ################### OPENTHREAD REPORT ################### - + Target device: nrf52840 - + Thread version: v1.3 + + Target device: nrf54l15 + + Thread version: v1.4 + OpenThread library feature set: Minimal Thread Device (MTD) + Thread device type: Sleepy End Device (SED) + OpenThread library has been built from sources - + OpenThread NCS revision: thread-reference-20230706-819-gd60aaab22 - + OpenThread NCS SHA: d60aaab22 - + NCS revision: v2.7.99-cs1-41-g26ef793b91-dirty - + NCS SHA: 26ef793b91 + + OpenThread NCS revision: ncs-thread-reference-20241002-dirty + + OpenThread NCS SHA: ee86dc26d + + NCS revision: v2.8.0-preview1-434-g49bcdd3c6d6-dirty + + NCS SHA: 49bcdd3c6d6 ################### END ################### The information shows that the Thread library has been build from sources, so it cannot be used for :ref:`ug_thread_cert_inheritance_without_modifications`. diff --git a/doc/nrf/protocols/thread/configuring.rst b/doc/nrf/protocols/thread/configuring.rst index 696036ee1911..d84369315ef7 100644 --- a/doc/nrf/protocols/thread/configuring.rst +++ b/doc/nrf/protocols/thread/configuring.rst @@ -98,20 +98,37 @@ See the following files for more options that you might want to change: .. note:: You can find the default configuration for all :ref:`openthread_samples` in the :file:`nrf/subsys/net/openthread/Kconfig.defconfig` file. +.. _thread_configuring_messagepool: + +Message pool configuration +************************** + +OpenThread uses a message pool to manage memory for message buffers. +Memory for the message pool can be statically allocated by the OpenThread stack or managed by the platform. +You can use the :kconfig:option:`CONFIG_OPENTHREAD_PLATFORM_MESSAGE_MANAGEMENT` Kconfig option to enable platform message management. + +Message buffer size and number of message buffers in the pool can be configured with the :kconfig:option:`CONFIG_OPENTHREAD_MESSAGE_BUFFER_SIZE` and :kconfig:option:`CONFIG_OPENTHREAD_NUM_MESSAGE_BUFFERS` Kconfig options, respectively. +By default, the message buffer size is set to ``128``, and the number of message buffers is set to ``96`` for a Full Thread Device and ``64`` for a Minimal Thread Device. + +.. note:: + When using :ref:`thread_ug_prebuilt`, changing the :kconfig:option:`CONFIG_OPENTHREAD_PLATFORM_MESSAGE_MANAGEMENT` Kconfig option will have no effect. + Additionally, the :kconfig:option:`CONFIG_OPENTHREAD_MESSAGE_BUFFER_SIZE` Kconfig option has to be set to the same value that is used in the pre-built library. + .. _thread_ug_thread_specification_options: Thread Specification options ============================ -The OpenThread stack can be configured to operate in compliance with either the Thread 1.1 Specification, the :ref:`Thread 1.2 Specification `, or the :ref:`Thread 1.3 Specification `. +The OpenThread stack can be configured to operate in compliance with either the Thread 1.1 Specification, the :ref:`Thread 1.2 Specification `, the :ref:`Thread 1.3 Specification `, or the :ref:`Thread 1.4 Specification `. You can change the stack version by using the following Kconfig options: * :kconfig:option:`CONFIG_OPENTHREAD_THREAD_VERSION_1_1` - Selects the Thread stack version that is compliant with the Thread 1.1 Specification. * :kconfig:option:`CONFIG_OPENTHREAD_THREAD_VERSION_1_2` - Selects the Thread stack version that is compliant with the Thread 1.2 Specification. * :kconfig:option:`CONFIG_OPENTHREAD_THREAD_VERSION_1_3` - Selects the Thread stack version that is compliant with the Thread 1.3 Specification. +* :kconfig:option:`CONFIG_OPENTHREAD_THREAD_VERSION_1_4` - Selects the Thread stack version that is compliant with the Thread 1.4 Specification. This option is enabled by default if no other option is selected. -By enabling support for Thread 1.2, you enable the following :ref:`thread_ug_supported_features_v12` in addition to the Thread 1.1 features: +By selecting support for Thread 1.2, you enable the following :ref:`thread_ug_supported_features_v12` in addition to the Thread 1.1 features: * Coordinated Sampled Listening (CSL) * Link Metrics Probing @@ -120,12 +137,16 @@ By enabling support for Thread 1.2, you enable the following :ref:`thread_ug_sup * Enhanced Frame Pending * Enhanced Keep Alive -By selecting support for Thread 1.3, you enable the following features in addition to the :ref:`Thread 1.2 features `: +By selecting support for Thread 1.3, you enable the following :ref:`thread_ug_supported_features_v13` in addition to the :ref:`thread_ug_supported_features_v12`: * Service Registration Protocol (SRP) client +By selecting support for Thread 1.4, you enable the following :ref:`thread_ug_supported_features_v14` in addition to the :ref:`thread_ug_supported_features_v13` and :ref:`thread_ug_supported_features_v12`: + +* Enhanced Internet Connectivity +* Enhanced Network Diagnostics + For a list of all supported features in the |NCS|, see the :ref:`thread_ug_feature_sets`. -For more information about Thread 1.2 features, see the `Thread 1.2 Base Features`_ document. .. _ug_thread_configuring_eui64: @@ -260,11 +281,8 @@ Minimal Thread Device (MTD) Trusted Firmware-M support options ================================== -To configure your Thread application on the nRF5340 DK to run with Trusted Firmware-M, use the ``nrf5340dk/nrf5340/cpuapp/ns`` board target and enable the following Kconfig options: - -* :kconfig:option:`CONFIG_BUILD_WITH_TFM` -* :kconfig:option:`CONFIG_OPENTHREAD_CRYPTO_PSA` +To configure your Thread application to run with Trusted Firmware-M, use the following board target: -In the |NCS|, these options are enabled by default for the :ref:`application core ` of the :ref:`openthread_samples` that can be programmed with the ``nrf5340dk/nrf5340/cpuapp/ns`` board target. +* ``nrf54l15dk/nrf54l15/cpuapp/ns``` for the nRF54L15 DK For more Trusted Firmware-M documentation, see :ref:`ug_tfm` and the official `TF-M documentation`_. diff --git a/doc/nrf/protocols/thread/overview/architectures.rst b/doc/nrf/protocols/thread/overview/architectures.rst index f50d6c8991eb..69f19ffa2f3b 100644 --- a/doc/nrf/protocols/thread/overview/architectures.rst +++ b/doc/nrf/protocols/thread/overview/architectures.rst @@ -56,14 +56,14 @@ This design has the following advantages: It has the following disadvantages: -* For some use cases, the nRF52 Series and nRF53 Series MCUs can be too slow (for example, when the application does complex data processing). +* For some use cases, the nRF52 Series, nRF53 Series and nRF54L Series MCUs can be too slow (for example, when the application does complex data processing). * The application and the network share flash and RAM space, which can limit the application functionality. * Might require external flash for DFU if the secondary application slot does not fit in the primary memory because of increased application size. .. figure:: images/thread_platform_design_soc.svg - :alt: Thread-only architecture (nRF52) + :alt: Thread-only architecture (nRF52, nRF54L) - Thread-only architecture on nRF52 Series devices + Thread-only architecture on nRF52 Series and nRF54L Series devices .. figure:: images/thread_platform_design_nRF53.svg :alt: Thread-only architecture (nRF53) @@ -74,14 +74,14 @@ This platform design is suitable for the following development kits: .. table-from-rows:: /includes/sample_board_rows.txt :header: heading - :rows: nrf52840dk_nrf52840, nrf52833dk_nrf52833, nrf5340dk_nrf5340_cpuapp_and_cpuapp_ns, nrf21540dk_nrf52840 + :rows: nrf52840dk_nrf52840, nrf5340dk_nrf5340_cpuapp, nrf54l15dk_nrf54l15_cpuapp_and_cpuapp_ns, nrf54l15dk_nrf54l10_cpuapp, nrf21540dk_nrf52840 .. _thread_architectures_designs_soc_designs_multiprotocol: Single-chip, multiprotocol (SoC) ================================ -nRF52 and nRF53 Series devices support multiple wireless technologies, including IEEE 802.15.4 and Bluetooth® Low Energy (Bluetooth LE). +nRF52 Series, nRF53 Series and nRF54L Series devices support multiple wireless technologies, including IEEE 802.15.4 and Bluetooth® Low Energy (Bluetooth LE). In a single-chip, multiprotocol design, the application layer and OpenThread run on the same processor. @@ -95,9 +95,9 @@ It has the following disadvantages: * Bluetooth LE activity can degrade the connectivity on Thread if not implemented with efficiency in mind. .. figure:: images/thread_platform_design_multi.svg - :alt: Multiprotocol Thread and Bluetooth LE architecture (nRF52) + :alt: Multiprotocol Thread and Bluetooth LE architecture (nRF52, nRF54L) - Multiprotocol Thread and Bluetooth LE architecture on nRF52 Series devices + Multiprotocol Thread and Bluetooth LE architecture on nRF52 Series and nRF54L Series devices .. figure:: images/thread_platform_design_nRF53_multi.svg :alt: Multiprotocol Thread and Bluetooth LE architecture (nRF53) @@ -110,7 +110,7 @@ This platform design is suitable for the following development kits: .. table-from-rows:: /includes/sample_board_rows.txt :header: heading - :rows: nrf52840dk_nrf52840, nrf52833dk_nrf52833, nrf5340dk_nrf5340_cpuapp_and_cpuapp_ns + :rows: nrf52840dk_nrf52840, nrf5340dk_nrf5340_cpuapp, nrf54l15dk_nrf54l15_cpuapp_and_cpuapp_ns, nrf54l15dk_nrf54l10_cpuapp .. _thread_architectures_designs_cp: @@ -190,7 +190,7 @@ This platform design is suitable for the following development kits: .. table-from-rows:: /includes/sample_board_rows.txt :header: heading - :rows: nrf52840dk_nrf52840, nrf52833dk_nrf52833, nrf21540dk_nrf52840 + :rows: nrf52833dk_nrf52833, nrf52840dk_nrf52840, nrf54l15dk_nrf54l15_cpuapp_and_cpuapp_ns, nrf54l15dk_nrf54l05_cpuapp, nrf21540dk_nrf52840 .. _thread_architectures_designs_cp_uart: diff --git a/doc/nrf/protocols/thread/overview/commissioning.rst b/doc/nrf/protocols/thread/overview/commissioning.rst index fd099ffdd898..07ba8083441f 100644 --- a/doc/nrf/protocols/thread/overview/commissioning.rst +++ b/doc/nrf/protocols/thread/overview/commissioning.rst @@ -11,7 +11,7 @@ Commissioning is the process that allows a new Thread device to join a Thread ne The new device must be authenticated and authorized to become part of the network. In the commissioning process, devices have different :ref:`thread_ot_commissioning_roles`. -The whole process can happen within the Thread network (connectivity within the Thread network) or can involve devices that are outside the network (other network provides connectivity, for example Ethernet or Wi-Fi). +The whole process can happen within the Thread network (connectivity within the Thread network) or can involve devices that are outside the network (other network provides connectivity, for example Ethernet or Wi-Fi®). This is the main difference between :ref:`thread_ot_commissioning_types_on-mesh` and :ref:`thread_ot_commissioning_types_external`, respectively. The whole commissioning process benefits from :ref:`several security measures `, especially the DTLS protocol. diff --git a/doc/nrf/protocols/thread/overview/memory_tables/nrf52840.txt b/doc/nrf/protocols/thread/overview/memory_tables/nrf52840.txt index bd6c9988bc5d..4df731024717 100644 --- a/doc/nrf/protocols/thread/overview/memory_tables/nrf52840.txt +++ b/doc/nrf/protocols/thread/overview/memory_tables/nrf52840.txt @@ -2,45 +2,45 @@ .. group-tab:: Single protocol - .. table:: nRF52840 single protocol Thread 1.3 memory requirements + .. table:: nRF52840 single protocol Thread 1.4 memory requirements - +-----------------------------+----------+-------+-------+ - | | master | FTD | MTD | - +=============================+==========+=======+=======+ - | ROM OT stack + App [kB] | 443 | 358 | 303 | - +-----------------------------+----------+-------+-------+ - | ROM Bluetooth LE stack [kB] | 0 | 0 | 0 | - +-----------------------------+----------+-------+-------+ - | Persistent storage [kB] | 32 | 32 | 32 | - +-----------------------------+----------+-------+-------+ - | Free ROM [kB] | 549 | 634 | 689 | - +-----------------------------+----------+-------+-------+ - | RAM OT stack + App [kB] | 102 | 93 | 83 | - +-----------------------------+----------+-------+-------+ - | RAM Bluetooth LE stack [kB] | 0 | 0 | 0 | - +-----------------------------+----------+-------+-------+ - | Free RAM [kB] | 154 | 163 | 173 | - +-----------------------------+----------+-------+-------+ + +-----------------------------+-------+-------+ + | | FTD | MTD | + +=============================+=======+=======+ + | ROM OT stack + App [kB] | 358 | 304 | + +-----------------------------+-------+-------+ + | ROM Bluetooth LE stack [kB] | 0 | 0 | + +-----------------------------+-------+-------+ + | Persistent storage [kB] | 32 | 32 | + +-----------------------------+-------+-------+ + | Free ROM [kB] | 634 | 688 | + +-----------------------------+-------+-------+ + | RAM OT stack + App [kB] | 93 | 83 | + +-----------------------------+-------+-------+ + | RAM Bluetooth LE stack [kB] | 0 | 0 | + +-----------------------------+-------+-------+ + | Free RAM [kB] | 163 | 173 | + +-----------------------------+-------+-------+ .. group-tab:: Multiprotocol - .. table:: nRF52840 multiprotocol Thread 1.3 memory requirements + .. table:: nRF52840 multiprotocol Thread 1.4 memory requirements - +-----------------------------+----------+-------+-------+ - | | master | FTD | MTD | - +=============================+==========+=======+=======+ - | ROM OT stack + App [kB] | 443 | 358 | 303 | - +-----------------------------+----------+-------+-------+ - | ROM Bluetooth LE stack [kB] | 75 | 75 | 76 | - +-----------------------------+----------+-------+-------+ - | Persistent storage [kB] | 32 | 32 | 32 | - +-----------------------------+----------+-------+-------+ - | Free ROM [kB] | 474 | 559 | 613 | - +-----------------------------+----------+-------+-------+ - | RAM OT stack + App [kB] | 102 | 93 | 83 | - +-----------------------------+----------+-------+-------+ - | RAM Bluetooth LE stack [kB] | 12 | 13 | 13 | - +-----------------------------+----------+-------+-------+ - | Free RAM [kB] | 142 | 150 | 160 | - +-----------------------------+----------+-------+-------+ + +-----------------------------+-------+-------+ + | | FTD | MTD | + +=============================+=======+=======+ + | ROM OT stack + App [kB] | 358 | 304 | + +-----------------------------+-------+-------+ + | ROM Bluetooth LE stack [kB] | 76 | 76 | + +-----------------------------+-------+-------+ + | Persistent storage [kB] | 32 | 32 | + +-----------------------------+-------+-------+ + | Free ROM [kB] | 558 | 612 | + +-----------------------------+-------+-------+ + | RAM OT stack + App [kB] | 93 | 83 | + +-----------------------------+-------+-------+ + | RAM Bluetooth LE stack [kB] | 13 | 13 | + +-----------------------------+-------+-------+ + | Free RAM [kB] | 150 | 160 | + +-----------------------------+-------+-------+ diff --git a/doc/nrf/protocols/thread/overview/memory_tables/nrf5340.txt b/doc/nrf/protocols/thread/overview/memory_tables/nrf5340.txt index 0331a3c0daf6..683aa512fd61 100644 --- a/doc/nrf/protocols/thread/overview/memory_tables/nrf5340.txt +++ b/doc/nrf/protocols/thread/overview/memory_tables/nrf5340.txt @@ -2,45 +2,45 @@ .. group-tab:: Single protocol - .. table:: nRF5340 single protocol Thread 1.3 memory requirements + .. table:: nRF5340 single protocol Thread 1.4 memory requirements +-----------------------------+-------+-------+ | | FTD | MTD | +=============================+=======+=======+ - | ROM OT stack + App [kB] | 329 | 275 | + | ROM OT stack + App [kB] | 330 | 276 | +-----------------------------+-------+-------+ | ROM Bluetooth LE stack [kB] | 0 | 0 | +-----------------------------+-------+-------+ | Persistent storage [kB] | 32 | 32 | +-----------------------------+-------+-------+ - | Free ROM [kB] | 663 | 717 | + | Free ROM [kB] | 662 | 716 | +-----------------------------+-------+-------+ - | RAM OT stack + App [kB] | 101 | 90 | + | RAM OT stack + App [kB] | 101 | 91 | +-----------------------------+-------+-------+ | RAM Bluetooth LE stack [kB] | 0 | 0 | +-----------------------------+-------+-------+ - | Free RAM [kB] | 411 | 422 | + | Free RAM [kB] | 411 | 421 | +-----------------------------+-------+-------+ .. group-tab:: Multiprotocol - .. table:: nRF5340 multiprotocol Thread 1.3 memory requirements + .. table:: nRF5340 multiprotocol Thread 1.4 memory requirements +-----------------------------+-------+-------+ | | FTD | MTD | +=============================+=======+=======+ - | ROM OT stack + App [kB] | 329 | 275 | + | ROM OT stack + App [kB] | 330 | 276 | +-----------------------------+-------+-------+ | ROM Bluetooth LE stack [kB] | 30 | 30 | +-----------------------------+-------+-------+ | Persistent storage [kB] | 32 | 32 | +-----------------------------+-------+-------+ - | Free ROM [kB] | 633 | 687 | + | Free ROM [kB] | 632 | 686 | +-----------------------------+-------+-------+ - | RAM OT stack + App [kB] | 101 | 90 | + | RAM OT stack + App [kB] | 101 | 91 | +-----------------------------+-------+-------+ - | RAM Bluetooth LE stack [kB] | 13 | 14 | + | RAM Bluetooth LE stack [kB] | 13 | 13 | +-----------------------------+-------+-------+ | Free RAM [kB] | 398 | 408 | +-----------------------------+-------+-------+ diff --git a/doc/nrf/protocols/thread/overview/memory_tables/nrf54l15.txt b/doc/nrf/protocols/thread/overview/memory_tables/nrf54l15.txt index 566f7ee16bb2..f8656a242bf1 100644 --- a/doc/nrf/protocols/thread/overview/memory_tables/nrf54l15.txt +++ b/doc/nrf/protocols/thread/overview/memory_tables/nrf54l15.txt @@ -2,45 +2,45 @@ .. group-tab:: Single protocol - .. table:: nRF54L15 single protocol Thread 1.3 memory requirements + .. table:: nRF54L15 single protocol Thread 1.4 memory requirements +-----------------------------+----------+-------+-------+ | | master | FTD | MTD | +=============================+==========+=======+=======+ - | ROM OT stack + App [kB] | 453 | 366 | 313 | + | ROM OT stack + App [kB] | 473 | 363 | 310 | +-----------------------------+----------+-------+-------+ | ROM Bluetooth LE stack [kB] | 0 | 0 | 0 | +-----------------------------+----------+-------+-------+ | Persistent storage [kB] | 32 | 32 | 32 | +-----------------------------+----------+-------+-------+ - | Free ROM [kB] | 1039 | 1126 | 1179 | + | Free ROM [kB] | 1019 | 1129 | 1182 | +-----------------------------+----------+-------+-------+ - | RAM OT stack + App [kB] | 104 | 97 | 87 | + | RAM OT stack + App [kB] | 107 | 97 | 87 | +-----------------------------+----------+-------+-------+ | RAM Bluetooth LE stack [kB] | 0 | 0 | 0 | +-----------------------------+----------+-------+-------+ - | Free RAM [kB] | 152 | 159 | 169 | + | Free RAM [kB] | 149 | 159 | 169 | +-----------------------------+----------+-------+-------+ .. group-tab:: Multiprotocol - .. table:: nRF54L15 multiprotocol Thread 1.3 memory requirements + .. table:: nRF54L15 multiprotocol Thread 1.4 memory requirements +-----------------------------+----------+-------+-------+ | | master | FTD | MTD | +=============================+==========+=======+=======+ - | ROM OT stack + App [kB] | 453 | 366 | 313 | + | ROM OT stack + App [kB] | 473 | 363 | 310 | +-----------------------------+----------+-------+-------+ - | ROM Bluetooth LE stack [kB] | 91 | 91 | 91 | + | ROM Bluetooth LE stack [kB] | 91 | 91 | 90 | +-----------------------------+----------+-------+-------+ | Persistent storage [kB] | 32 | 32 | 32 | +-----------------------------+----------+-------+-------+ - | Free ROM [kB] | 948 | 1035 | 1088 | + | Free ROM [kB] | 928 | 1038 | 1092 | +-----------------------------+----------+-------+-------+ - | RAM OT stack + App [kB] | 104 | 97 | 87 | + | RAM OT stack + App [kB] | 107 | 97 | 87 | +-----------------------------+----------+-------+-------+ | RAM Bluetooth LE stack [kB] | 14 | 14 | 14 | +-----------------------------+----------+-------+-------+ - | Free RAM [kB] | 138 | 145 | 155 | + | Free RAM [kB] | 135 | 145 | 155 | +-----------------------------+----------+-------+-------+ diff --git a/doc/nrf/protocols/thread/overview/ot_memory.rst b/doc/nrf/protocols/thread/overview/ot_memory.rst index 27dd0ba905c7..eda5160b4f4b 100644 --- a/doc/nrf/protocols/thread/overview/ot_memory.rst +++ b/doc/nrf/protocols/thread/overview/ot_memory.rst @@ -38,10 +38,10 @@ See :ref:`thread_device_types` for more information on device types, and :ref:`t .. _thread_ot_memory_54l15: -nRF5340 DK RAM and flash memory requirements +nRF54L15 DK RAM and flash memory requirements ********************************************* -The following tables present memory requirements for samples running on the :ref:`nRF54L15 DK ` (:ref:`nrf54l15dk `) with the software cryptography support provided by the :ref:`nrfxlib:nrf_oberon_readme` module. +The following tables present memory requirements for samples running on the :ref:`nRF54L15 DK ` (:ref:`nrf54l15dk `) with the cryptography support provided by the :ref:`nrf_security_drivers_cracen`. .. include:: memory_tables/nrf54l15.txt @@ -50,7 +50,7 @@ The following tables present memory requirements for samples running on the :ref nRF5340 DK RAM and flash memory requirements ********************************************* -The following tables present memory requirements for samples running on the :ref:`nRF5340 DK ` (:ref:`nrf5340dk `) with the software cryptography support provided by the :ref:`nrfxlib:nrf_oberon_readme` module. +The following tables present memory requirements for samples running on the :ref:`nRF5340 DK ` (:ref:`nrf5340dk `) with the cryptography support provided by the :ref:`nrf_security_drivers_oberon`. .. include:: memory_tables/nrf5340.txt @@ -59,6 +59,6 @@ The following tables present memory requirements for samples running on the :ref nRF52840 DK RAM and flash memory requirements ********************************************* -The following tables present memory requirements for samples running on the :ref:`nRF52840 DK ` (:ref:`nrf52840dk_nrf52840 `) with the software cryptography support provided by the :ref:`nrfxlib:nrf_oberon_readme` module. +The following tables present memory requirements for samples running on the :ref:`nRF52840 DK ` (:ref:`nrf52840dk_nrf52840 `) with the cryptography support provided by the :ref:`nrf_security_drivers_oberon`. .. include:: memory_tables/nrf52840.txt diff --git a/doc/nrf/protocols/thread/overview/power_consumption.rst b/doc/nrf/protocols/thread/overview/power_consumption.rst index 581f14561201..f21704d90e45 100644 --- a/doc/nrf/protocols/thread/overview/power_consumption.rst +++ b/doc/nrf/protocols/thread/overview/power_consumption.rst @@ -56,67 +56,67 @@ The following tables show the power consumption measured with the configuration .. tabs:: - .. group-tab:: Thread 1.3 SED + .. group-tab:: Thread 1.4 SED .. table:: Configuration - +--------------------------+---------------------+--------------------------+ - | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | - +==========================+=====================+==========================+ - | Board revision | v3.0.2 | v2.0.2 | - +--------------------------+---------------------+--------------------------+ - | Supply voltage [V] | 3.0 | 3.0 | - +--------------------------+---------------------+--------------------------+ - | Transmission power [dBm] | 0 | 0 | - +--------------------------+---------------------+--------------------------+ - | Polling period [ms] | 1000 | 1000 | - +--------------------------+---------------------+--------------------------+ + +--------------------------+---------------------+--------------------------+----------------------------+ + | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | nrf54l15dk/nrf54l15/cpuapp | + +==========================+=====================+==========================+============================+ + | Board revision | v3.0.2 | v2.0.2 | v0.8.1 | + +--------------------------+---------------------+--------------------------+----------------------------+ + | Supply voltage [V] | 3.0 | 3.0 | 1.8 | + +--------------------------+---------------------+--------------------------+----------------------------+ + | Transmission power [dBm] | 0 | 0 | 0 | + +--------------------------+---------------------+--------------------------+----------------------------+ + | Polling period [ms] | 1000 | 1000 | 1000 | + +--------------------------+---------------------+--------------------------+----------------------------+ .. table:: Power consumption - +-------------------------------+-----------------------+----------------------------+ - | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | - +===============================+=======================+============================+ - | Total charge per minute [μC] | 1135.87 | 1196.07 | - +-------------------------------+-----------------------+----------------------------+ - | Average data poll charge [μC] | 16.48 | 17.14 | - +-------------------------------+-----------------------+----------------------------+ - | Average sleep current [μA] | 2.67 | 3.00 | - +-------------------------------+-----------------------+----------------------------+ + +-------------------------------------------+-----------------------+----------------------------+------------------------------+ + | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | nrf54l15dk/nrf54l15/cpuapp | + +===========================================+=======================+============================+==============================+ + | Average power consumption per minute [μW] | 58.41 | 62.64 | 34.42 | + +-------------------------------------------+-----------------------+----------------------------+------------------------------+ + | Average data poll power consumption [mW] | 11.66 | 9.68 | 7.07 | + +-------------------------------------------+-----------------------+----------------------------+------------------------------+ + | Average sleep current [μA] | 2.75 | 4.12 | 2.02 | + +-------------------------------------------+-----------------------+----------------------------+------------------------------+ - .. group-tab:: Thread 1.3 SSED + .. group-tab:: Thread 1.4 SSED .. table:: Configuration - +--------------------------------+---------------------+--------------------------+ - | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | - +================================+=====================+==========================+ - | Board revision | v3.0.2 | v2.0.2 | - +--------------------------------+---------------------+--------------------------+ - | Supply voltage [V] | 3.0 | 3.0 | - +--------------------------------+---------------------+--------------------------+ - | Transmission power [dBm] | 0 | 0 | - +--------------------------------+---------------------+--------------------------+ - | CSL period [ms] | 1000 | 1000 | - +--------------------------------+---------------------+--------------------------+ - | CSL timeout [s] | 20 | 20 | - +--------------------------------+---------------------+--------------------------+ - | Parent's CSL accuracy [ppm] | ±20 | ±20 | - +--------------------------------+---------------------+--------------------------+ - | Parent's CSL uncertainty [μs] | ±120 | ±120 | - +--------------------------------+---------------------+--------------------------+ + +--------------------------------+---------------------+--------------------------+----------------------------+ + | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | nrf54l15dk/nrf54l15/cpuapp | + +================================+=====================+==========================+============================+ + | Board revision | v3.0.2 | v2.0.2 | v0.8.1 | + +--------------------------------+---------------------+--------------------------+----------------------------+ + | Supply voltage [V] | 3.0 | 3.0 | 1.8 | + +--------------------------------+---------------------+--------------------------+----------------------------+ + | Transmission power [dBm] | 0 | 0 | 0 | + +--------------------------------+---------------------+--------------------------+----------------------------+ + | CSL period [ms] | 1000 | 1000 | 1000 | + +--------------------------------+---------------------+--------------------------+----------------------------+ + | CSL timeout [s] | 20 | 20 | 20 | + +--------------------------------+---------------------+--------------------------+----------------------------+ + | Parent's CSL accuracy [ppm] | ±20 | ±20 | ±20 | + +--------------------------------+---------------------+--------------------------+----------------------------+ + | Parent's CSL uncertainty [μs] | ±120 | ±120 | ±120 | + +--------------------------------+---------------------+--------------------------+----------------------------+ .. table:: Power consumption - +---------------------------------+-----------------------+----------------------------+ - | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | - +=================================+=======================+============================+ - | Total charge per minute [μC] | 1049.87 | 1099.53 | - +---------------------------------+-----------------------+----------------------------+ - | Average CSL receive charge [μC] | 13.91 | 14.38 | - +---------------------------------+-----------------------+----------------------------+ - | Average data poll charge [μC] | 21.93 | 22.36 | - +---------------------------------+-----------------------+----------------------------+ - | Average sleep current [μA] | 2.67 | 2.97 | - +---------------------------------+-----------------------+----------------------------+ + +--------------------------------------------+-----------------------+----------------------------+------------------------------+ + | Parameter | nrf52840dk/nrf52840 | nrf5340dk/nrf5340/cpuapp | nrf54l15dk/nrf54l15/cpuapp | + +============================================+=======================+============================+==============================+ + | Average power consumption per minute [μW] | 51.00 | 57.15 | 37.69 | + +--------------------------------------------+-----------------------+----------------------------+------------------------------+ + | Average CSL receive power consumption [mW] | 5.46 | 5.61 | 3.80 | + +--------------------------------------------+-----------------------+----------------------------+------------------------------+ + | Average data poll power consumption [mW] | 12.23 | 11.13 | 7.92 | + +--------------------------------------------+-----------------------+----------------------------+------------------------------+ + | Average sleep current [μA] | 2.76 | 4.17 | 2.05 | + +--------------------------------------------+-----------------------+----------------------------+------------------------------+ diff --git a/doc/nrf/protocols/thread/overview/supported_features.rst b/doc/nrf/protocols/thread/overview/supported_features.rst index 3bd0a07e779c..ba7066b6471c 100644 --- a/doc/nrf/protocols/thread/overview/supported_features.rst +++ b/doc/nrf/protocols/thread/overview/supported_features.rst @@ -7,7 +7,7 @@ Supported Thread features :local: :depth: 2 -The OpenThread implementation of the Thread protocol supports all features defined in the Thread 1.3.0 Specification that are required for the Thread 1.3 Certification program: +The OpenThread implementation of the Thread protocol supports all features defined in the Thread 1.4 Specification that are required for the Thread 1.4 Certification program: * All Thread networking layers: @@ -26,13 +26,19 @@ The OpenThread implementation of the Thread protocol supports all features defin * Multicast across Thread networks * Thread Domain unicast addressing -* Features introduced with Thread 1.3.0: +* Features introduced with Thread 1.3: * Service Registration Protocol (SRP) client * Transport Control Protocol (TCP) +* Features introduced with Thread 1.4: + + * Enhanced Internet Connectivity + * Enhanced Network Diagnostics + * Secure Commissioning at Scale with TCAT + In the |NCS|, you can choose which version of the Thread protocol to use in your application. -By default, the |NCS| supports Thread 1.3, which includes support for Thread 1.2. +By default, the |NCS| supports Thread 1.4, which includes support for Thread 1.3 and Thread 1.2. You can enable and configure any Thread version by using :ref:`dedicated options `. .. _thread_ug_supported_features_v12: @@ -118,15 +124,6 @@ The Thread Domain operational configuration enables Thread Devices to join and p A user or network administrator may use functions of either Thread Commissioning or Thread Border Routers to set up a common Thread Domain operational configuration for Thread Devices. The Thread Devices can belong to different Thread networks or `Partitions `_ that have potentially different per-network credentials. -.. _ug_thread_12_support_limitations: - -Limitations for Thread 1.2 support -================================== - -The Thread 1.2 Specification support has the following limitation: - -* Due to code size limitation, the combination of complete set of Thread 1.2 features with the Bluetooth® LE multiprotocol support is not possible for the nRF52833 DKs. - .. _thread_ug_supported_features_v13: Thread 1.3 features @@ -151,7 +148,51 @@ An alternative TCP stack implementation incorporated from the OpenThread project See the :file:`tcp.conf` configuration file in the :file:`snippets/tcp/` directory of the :ref:`ot_cli_sample` sample for an example how to enable the alternative TCP implementation. -Limitations for Thread 1.3 support +.. _thread_ug_supported_features_v14: + +Thread 1.4 features +******************* + +For more information about this Thread version, see the official `Thread 1.4 Features White Paper`_. + +.. note:: + See :ref:`thread_ug_thread_specification_options` for how to enable the 1.4 features that are currently available in the |NCS|. + +Enhanced Internet Connectivity +============================== + +Thread 1.4 introduces significant enhancements to how Thread devices can connect to the public internet. +This expansion is achieved through robust support for both IPv6 and IPv4, ensuring a future-proof compatibility with the existing internet infrastructure. + +Enhanced Network Diagnostics +============================ + +The Enhanced Network Diagnostics added in Thread 1.4 include: + +* EUI-64 +* Thread Protocol Version and Thread Stack Version +* Vendor Name, Vendor Model, and Vendor Software Version +* Detailed Child information - for Thread Mesh Extenders only +* Child IPv6 Address List - for Thread Mesh Extenders only +* Mesh Extender (Router) Neighbors - for Thread Mesh Extenders only +* Mesh Link Establishment (MLE) Protocol Counters +* Vendor App URL +* A method ("Answer TLV") to split a particularly large diagnostic data set over multiple UDP messages + +The entity collecting the Thread diagnostic information may itself be directly connected to a Thread network, for example situated on a Thread 1.4 Border Router. +The collected information can then be retrieved via an authenticated, secure connection from an app or back-end to this Border Router. +The entity could also be situated outside the Thread Network, collecting diagnostic information in the role of a Thread Commissioner - via a secured IPv6 link to a Thread Border Router. + +Thread Commissioning over Authenticated TLS (TCAT) +================================================== + +Thread 1.4 introduces TCAT to enable fast and secure commissioning of large volumes of Thread devices. +This feature uses an authenticated, certificate-based TLS session between the new Thread device and a commissioning tool/device. +TCAT support is optional and is expected to be used primarily in commercial (B2B) markets. + +See the :file:`tcat.conf` configuration file in the :file:`snippets/tcat/` directory of the :ref:`ot_cli_sample` sample for an example how to enable the TCAT functionality. + +Limitations for Thread 1.4 support ================================== -Transport Control Protocol (TCP) as defined by the Thread 1.3 Specification is only supported in experimental mode by the |NCS|. +Thread Commissioning over Authenticated TLS (TCAT) is an optional feature and is only supported in experimental mode by the |NCS|. diff --git a/doc/nrf/protocols/thread/prebuilt_libs.rst b/doc/nrf/protocols/thread/prebuilt_libs.rst index 47d45357fc51..1c18248e0a3b 100644 --- a/doc/nrf/protocols/thread/prebuilt_libs.rst +++ b/doc/nrf/protocols/thread/prebuilt_libs.rst @@ -40,6 +40,8 @@ The following table lists the supported features for each of these sets. No tick indicates that there is no support for the given feature in the related configuration, while the tick signifies that the feature is selected (``=1`` value). Features introduced with the Thread 1.2 Specification are at the bottom of the table and have "Thread 1.2" in parenthesis after the feature name. For more information about Thread 1.2 features, see the `Thread 1.2 Base Features`_ document. +Features introduced with the Thread 1.4 Specification are at the bottom of the table and have "Thread 1.4" in parenthesis after the feature name. +For more information about Thread 1.4 features, see the `Thread 1.4 Features White Paper`_ document. .. list-table:: :widths: auto @@ -117,6 +119,12 @@ For more information about Thread 1.2 features, see the `Thread 1.2 Base Feature - ✔ - - + * - EXTERNAL_HEAP + - ✔ + - ✔ + - ✔ + - + - * - IP6_FRAGM - ✔ - ✔ @@ -153,6 +161,12 @@ For more information about Thread 1.2 features, see the `Thread 1.2 Base Feature - - - + * - NETDIAG_CLIENT + - ✔ + - ✔ + - ✔ + - + - * - SERVICE - ✔ - @@ -219,6 +233,30 @@ For more information about Thread 1.2 features, see the `Thread 1.2 Base Feature - ✔ - - + * - DNS_CLIENT_OVER_TCP (Thread 1.4) + - ✔ + - + - + - + - + * - NETDIAG_VENDOR_INFO (Thread 1.4) + - ✔ + - ✔ + - ✔ + - + - + * - TCP (Thread 1.4) + - ✔ + - + - + - + - + * - UPTIME (Thread 1.4) + - ✔ + - ✔ + - ✔ + - + - For the full list of configuration options that were used during compilation, including their default values, see the :file:`openthread_lib_configuration.txt` file within each library folder in the nrfxlib repository. The library folders are inside :file:`openthread/lib`. diff --git a/doc/nrf/protocols/thread/tools.rst b/doc/nrf/protocols/thread/tools.rst index ba29190f8f8e..8ea6aa4d8794 100644 --- a/doc/nrf/protocols/thread/tools.rst +++ b/doc/nrf/protocols/thread/tools.rst @@ -44,7 +44,7 @@ Thread Border Router .. tbr_shortdesc_start -The Thread Border Router is a specific type of Border Router device that provides connectivity from the IEEE 802.15.4 network to adjacent networks on other physical layers (such as Wi-Fi or Ethernet). +The Thread Border Router is a specific type of Border Router device that provides connectivity from the IEEE 802.15.4 network to adjacent networks on other physical layers (such as Wi-Fi® or Ethernet). Border Routers provide services for devices within the IEEE 802.15.4 network, including routing services for off-network operations. .. tbr_shortdesc_end @@ -154,7 +154,7 @@ To set up and configure the OpenThread Border Router, follow the official `OpenT cd ot-br-posix git pull --unshallow - git checkout 98dda6c + git checkout fbde28a * After the *Build and install OTBR* section, configure RCP device's UART baud rate in *otbr-agent*. Modify the :file:`/etc/default/otbr-agent` configuration file with default RCP baud rate: @@ -196,7 +196,7 @@ To install and configure the OpenThread Border Router using the Docker container .. code-block:: console - docker pull nrfconnect/otbr:98dda6c + docker pull nrfconnect/otbr:fbde28a #. Connect the radio co-processor that you configured in :ref:`ug_thread_tools_tbr_rcp` to the Border Router device. #. Start the OpenThread Border Router container using the following commands: @@ -206,7 +206,7 @@ To install and configure the OpenThread Border Router using the Docker container sudo modprobe ip6table_filter sudo docker run -it --rm --privileged --name otbr --network otbr -p 8080:80 \ --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \ - --volume /dev/ttyACM0:/dev/radio nrfconnect/otbr:98dda6c --radio-url spinel+hdlc+uart:///dev/radio?uart-baudrate=1000000 + --volume /dev/ttyACM0:/dev/radio nrfconnect/otbr:fbde28a --radio-url spinel+hdlc+uart:///dev/radio?uart-baudrate=1000000 Replace ``/dev/ttyACM0`` with the device node name of the OpenThread radio co-processor. diff --git a/doc/nrf/protocols/wifi/advanced_modes/index.rst b/doc/nrf/protocols/wifi/advanced_modes/index.rst index ad57cd8ce86c..fe1d9c4d44c0 100644 --- a/doc/nrf/protocols/wifi/advanced_modes/index.rst +++ b/doc/nrf/protocols/wifi/advanced_modes/index.rst @@ -13,3 +13,4 @@ The following subpages cover topics related to the transmission and reception of raw_tx_operation sniffer_rx_operation promiscuous_operation + offloaded_raw_tx diff --git a/doc/nrf/protocols/wifi/advanced_modes/mem_requirements_raw.rst b/doc/nrf/protocols/wifi/advanced_modes/mem_requirements_raw.rst index aa88172529fc..4a6547ff1bca 100644 --- a/doc/nrf/protocols/wifi/advanced_modes/mem_requirements_raw.rst +++ b/doc/nrf/protocols/wifi/advanced_modes/mem_requirements_raw.rst @@ -11,6 +11,30 @@ Footprint values are provided in kilobytes (KB). .. tabs:: + .. tab:: nRF54H20 DK + + The following table lists memory requirements for samples running on the :ref:`nRF54H20 DK ` (:ref:`nrf54h20dk/nrf54h20/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`Raw TX packet ` | 502 | 3 | 73 | 146 | 222 | 146 | 15 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | :ref:`Monitor ` | 490 | 3 | 73 | 146 | 228 | 150 | 15 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | :ref:`Promiscuous ` | 508 | 3 | 73 | 146 | 231 | 150 | 15 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + + .. tab:: nRF54L15 DK + + The following table lists memory requirements for samples running on the :ref:`nRF54L15 DK ` (:ref:`nrf54l15dk/nrf54l15/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`Raw TX packet ` | 539 | 3 | 73 | 197 | 221 | 145 | 23 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + .. tab:: nRF7002 DK The following table lists memory requirements for samples running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). @@ -18,9 +42,9 @@ Footprint values are provided in kilobytes (KB). +----------------------------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +====================================================+=============+===========================================+============================+======================+=================================+====================+======================+ - | :ref:`Raw TX packet ` | 507 | 54 | 69 | 180 | 298 | 207 | 13 | + | :ref:`Raw TX packet ` | 539 | 3 | 73 | 187 | 290 | 218 | 15 | +----------------------------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`Monitor ` | 495 | 51 | 69 | 180 | 398 | 306 | 13 | + | :ref:`Monitor ` | 526 | 3 | 73 | 187 | 312 | 239 | 15 | +----------------------------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`Promiscuous ` | 512 | 55 | 69 | 180 | 401 | 306 | 13 | + | :ref:`Promiscuous ` | 545 | 3 | 73 | 187 | 316 | 239 | 15 | +----------------------------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ diff --git a/doc/nrf/protocols/wifi/advanced_modes/offloaded_raw_tx.rst b/doc/nrf/protocols/wifi/advanced_modes/offloaded_raw_tx.rst new file mode 100644 index 000000000000..938d9d6b2962 --- /dev/null +++ b/doc/nrf/protocols/wifi/advanced_modes/offloaded_raw_tx.rst @@ -0,0 +1,62 @@ +.. _ug_nrf70_developing_offloaded_raw_tx: + +Offloaded raw transmit operation +################################ + +.. contents:: + :local: + :depth: 2 + +The nRF70 Series ICs can be used as offloaded raw transmit devices, where the nRF70 Series device can transmit frames at regular intervals utilizing very low power. +The contents of the frame as well as parameters such as frequency and channel of transmission are programmable. + +The major functionality of transmitting the frames is offloaded to the nRF70 device, thereby placing minimal requirements on the host (mainly programming capability). +This results in minimal host memory requirements (RAM and flash memory). + +This can be used for applications such as indoor navigation and tracking, where it is essential for anchor nodes to perform low-power beaconing. +Anchor devices can transmit beacon-compliant packets containing tracking or location information inside the BSSID or SSID fields. +Devices scanning for these beacon-compliant packets can use this information. + +Offloaded raw TX mode in Wi-Fi driver +************************************* + +The offloaded raw transmit operation is supported as a separate stand-alone compile-time mode of operation in the nRF Wi-Fi driver and is exclusive to the following existing modes of operation: + +* Wi-Fi® mode +* Radio Test mode + +In addition to providing start or stop control over the offloaded raw transmit operation, the driver supports the update of the following configuration parameters: + +* Frame contents +* Channel of operation +* Data rate +* Rate flags +* Periodicity of transmission +* Transmit power + +.. _ug_nrf70_developing_enabling_offloaded_raw_tx: + +Offloaded raw transmit API +************************** + +The offloaded raw transmit functionality of nRF70 Series ICs can be utilized by using the APIs provided by the driver. +The API reference can be found at: + +| Header file: :file:`zephyr/drivers/wifi/nrf_wifi/off_raw_tx/off_raw_tx_api.h` + + +See the :ref:`Offloaded raw transmit sample ` to know more about the offloaded raw transmit API. + +.. _ug_nrf70_developing_offloaded_raw_tx_power_consumption: + +Power consumption +***************** + +The power consumed by the nRF70 Series device during the offloaded raw TX operation depends on the following parameters: + +* Operating data rate (for example, 6 Mbps, MCS0) : Power consumption decreases as the data rate increases. +* Payload length : Power consumption increases with the payload length. +* Periodicity of transmission : Power consumption increases as the period between successive transmissions decreases. +* Transmit power : Power consumption increases as the transmit power increases. + +For optimizing the power consumption of your application, you can use the `Online Power Profiler for Wi-Fi`_ tool. diff --git a/doc/nrf/protocols/wifi/advanced_modes/promiscuous_operation.rst b/doc/nrf/protocols/wifi/advanced_modes/promiscuous_operation.rst index 0e0ef1067c39..9923237878ac 100644 --- a/doc/nrf/protocols/wifi/advanced_modes/promiscuous_operation.rst +++ b/doc/nrf/protocols/wifi/advanced_modes/promiscuous_operation.rst @@ -32,7 +32,7 @@ However, it is recommended to use the functional API ``net_eth_promisc_mode`` fo The following table provides the parameter details for the ``net_eth_promisc_mode`` API which is used to enable or disable Promiscuous mode for raw packet reception. -.. list-table:: Wi-Fi raw packet reception API parameter details +.. list-table:: Wi-Fi® raw packet reception API parameter details :header-rows: 1 * - API parameter diff --git a/doc/nrf/protocols/wifi/advanced_modes/raw_tx_operation.rst b/doc/nrf/protocols/wifi/advanced_modes/raw_tx_operation.rst index a94e9aa43641..478ea569baca 100644 --- a/doc/nrf/protocols/wifi/advanced_modes/raw_tx_operation.rst +++ b/doc/nrf/protocols/wifi/advanced_modes/raw_tx_operation.rst @@ -46,7 +46,7 @@ See the :ref:`wifi_shell_sample` sample for more information on configuring mode The following table lists the shell commands and network management APIs used to switch the primary modes of operation needed for raw packet transmission. -.. list-table:: Wi-Fi raw packet transmission network management APIs for primary mode of operation +.. list-table:: Wi-Fi® raw packet transmission network management APIs for primary mode of operation :header-rows: 1 * - Network management APIs diff --git a/doc/nrf/protocols/wifi/advanced_modes/sniffer_rx_operation.rst b/doc/nrf/protocols/wifi/advanced_modes/sniffer_rx_operation.rst index 4bcc3ee298ba..415f9850faf8 100644 --- a/doc/nrf/protocols/wifi/advanced_modes/sniffer_rx_operation.rst +++ b/doc/nrf/protocols/wifi/advanced_modes/sniffer_rx_operation.rst @@ -31,7 +31,7 @@ This runtime API can be used to disable the Monitor mode in the nRF Wi-Fi driver Monitor mode on the nRF70 device cannot operate concurrently with other modes, such as Station mode or SoftAP mode. -You must configure the operating Wi-Fi channel on which the nRF70 device will monitor and receive 802.11 packets. +You must configure the operating Wi-Fi® channel on which the nRF70 device will monitor and receive 802.11 packets. When the device operates in Monitor mode, all 802.11 packets received on the configured channel will be sent up the stack by the nRF70 Series device and the nRF Wi-Fi driver. To set the desired channel for 802.11 packet reception, use the ``NET_REQUEST_WIFI_CHANNEL`` runtime network management API. diff --git a/doc/nrf/protocols/wifi/provisioning/mem_requirements_ble.rst b/doc/nrf/protocols/wifi/provisioning/mem_requirements_ble.rst index e8d19ba15dac..d43465769402 100644 --- a/doc/nrf/protocols/wifi/provisioning/mem_requirements_ble.rst +++ b/doc/nrf/protocols/wifi/provisioning/mem_requirements_ble.rst @@ -12,5 +12,5 @@ The following table lists memory requirements for the :ref:`Bluetooth LE based p +-------------------------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +=============================================================+=============+===========================================+===============================+======================+=================================+====================+======================+ -| :ref:`Bluetooth LE based provision ` | 571 | 54 | 69 | 180 | 277 | 164 | 13 | +| :ref:`Bluetooth LE based provision ` | 606 | 3 | 73 | 187 | 318 | 222 | 15 | +-------------------------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ diff --git a/doc/nrf/protocols/wifi/provisioning/mem_requirements_softap.rst b/doc/nrf/protocols/wifi/provisioning/mem_requirements_softap.rst index 98762defcc94..ad236a1b37dc 100644 --- a/doc/nrf/protocols/wifi/provisioning/mem_requirements_softap.rst +++ b/doc/nrf/protocols/wifi/provisioning/mem_requirements_softap.rst @@ -13,7 +13,7 @@ The following table lists memory requirements for the :ref:`SoftAP based provisi +-------------------------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +=============================================================+=============+===========================================+===============================+======================+=================================+====================+======================+ -| :ref:`SoftAP based provision `| 666 | 0 | 69 | 0 | 302 | 0 | 0 | +| :ref:`SoftAP based provision `| 660 | 0 | 73 | 0 | 217 | 0 | 0 | +-------------------------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ .. note:: diff --git a/doc/nrf/protocols/wifi/regulatory_support.rst b/doc/nrf/protocols/wifi/regulatory_support.rst index 49699da2f70e..5f725307c3e9 100644 --- a/doc/nrf/protocols/wifi/regulatory_support.rst +++ b/doc/nrf/protocols/wifi/regulatory_support.rst @@ -363,60 +363,64 @@ The values in the tables show the maximum allowed transmit power (in dBm) for ea * - Country group - Countries * - Group 1 - - Andorra(AD), Albania(AL), Austria(AT), Bosnia and Herzegovina(BA), Belgium(BE), Bulgaria(BG), Switzerland(CH), Cyprus(CY), Czech Republic(CZ), Germany(DE), Denmark(DK), - Estonia(EE), Spain(ES), Finland(FI), France(FR), Greece(GR), Hungary(HU), Ireland(IE), Iceland(IS), Italy(IT), Liechtenstein(LI), Lithuania(LT), Luxembourg(LU), Latvia(LV), Monaco(MC), - Moldova(MD), Montenegro(ME), Macedonia(MK), Malta(MT), Netherlands(NL), Norway(NO), Poland(PL), Portugal(PT), Romania(RO), Serbia(RS), Sweden(SE), Slovenia(SI), Slovak(SK) + - Andorra (AD), Albania (AL), Austria (AT), Bosnia and Herzegovina (BA), Belgium (BE), Bulgaria (BG), Switzerland (CH), Cyprus (CY), Czech Republic (CZ), Germany (DE), Denmark (DK), + Estonia (EE), Spain (ES), Finland (FI), France (FR), Greece (GR), Hungary (HU), Ireland (IE), Iceland (IS), Italy (IT), Liechtenstein (LI), Lithuania (LT), Luxembourg (LU), Latvia (LV), Monaco (MC), + Moldova (MD), Montenegro (ME), Macedonia (MK), Malta (MT), Netherlands (NL), Norway (NO), Poland (PL), Portugal (PT), Romania (RO), Sweden (SE), Slovenia (SI), Slovak (SK) * - Group 2 - - Afghanistan(AF), Anguilla(AI), Netherlands Antilles(AN), Aruba(AW), Saint Barthelemy(BL), Bhutan(BT), Belarus(BY), Ethiopia(ET), French Guiana(GF), Greenland(GL), Guadeloupe(GP), - Cambodia(KH), Lesotho(LS), Saint Martin(MF), Martinique(MQ), Mauritania(MR), Malawi(MW), Oman(OM), French Polynesia(PF), Saint Pierre and Miquelon(PM), Réunion(RE), Saudi Arabia(SA), - Suriname(SR), Chad(TD), Togo(TG), Saint Vincent and the Grenadines(VC), Wallis and Futuna(WF), Samoa(WS), Mayotte(YT), Zimbabwe(ZW) + - Afghanistan (AF), Anguilla (AI), Netherlands Antilles (AN), Aruba (AW), Saint Barthelemy (BL), Bhutan (BT), Belarus (BY), Ethiopia (ET), French Guiana (GF), Greenland (GL), Guadeloupe (GP), + Cambodia (KH), Lesotho (LS), Saint Martin (MF), Martinique (MQ), Mauritania (MR), Malawi (MW), Oman (OM), French Polynesia (PF), Saint Pierre and Miquelon (PM), Réunion (RE), Saudi Arabia (SA), + Suriname (SR), Chad (TD), Saint Vincent and the Grenadines (VC), Wallis and Futuna (WF), Samoa (WS), Mayotte (YT), Zimbabwe (ZW) * - Group 3 - - United Arab Emirates(AE), Argentina(AR), Burkina Faso(BF), Brazil(BR), Central Africa(CF), Cote d'ivoire(CI), Colombia(CO), Costarica(CR), Ghana(GH), Honduras(HN), Jamaica(JM), - Lebanon(LB), Sri Lanka(LK), Mexico(MX), Peru(PE), Papua New Guinea(PG), Philippines(PH), Rwanda(RW), Senegal(SN), Thailand(TH), Trinidad and Tobago(TT), Vietnam(VN), Vanuatu(VU) + - United Arab Emirates (AE), Argentina (AR), Burkina Faso (BF), Central Africa (CF), Cote d'ivoire (CI), Colombia (CO), Ghana (GH), Honduras (HN), Jamaica (JM), + Lebanon (LB), Sri Lanka (LK), Mexico (MX), Peru (PE), Papua New Guinea (PG), Rwanda (RW), Senegal (SN), Thailand (TH), Trinidad and Tobago (TT), Vietnam (VN), Vanuatu (VU) * - Group 4 - - American Samoa(AS), Bermuda(BM), Micronesia(FM), Haiti(HT), Marshall Islands(MH), Northern Mariana Islands(MP), Nicaragua(NI), Palau(PW), Virgin Islands(VI) + - American Samoa (AS), Bermuda (BM), Micronesia (FM), Haiti (HT), Marshall Islands (MH), Northern Mariana Islands (MP), Nicaragua (NI), Palau (PW), Virgin Islands (VI) * - Group 5 - - Bahamas(BS), Christmas Island(CX), Cayman Islands(KY), Mongolia(MN), Mauritius(MU), Paraguay(PY), Turks and Caicos Islands(TC), Uganda(UG) + - Bahamas (BS), Christmas Island (CX), Cayman Islands (KY), Mongolia (MN), Mauritius (MU), Paraguay (PY), Turks and Caicos Islands (TC), Uganda (UG) .. tab:: Countries (A to D) - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Country name | CH/Code | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | 144 | 149 | 153 | 157 | 161 | 165 | 169 | 173 |177 | - +========================================+==============+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+=====+=====+=====+=====+=====+=====+=====+=====+ - | Algeria | DZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Armenia | AM | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 18 | 18 | 18 | 18 | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Australia | AU | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | -\ | -\ | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 36 | 36 | 36 | 36 | 36 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Azerbaijan | AZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 18 | 18 | 18 | 18 | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Bahrain | BH | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Bangladesh | BD | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Barbados | BB | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Belize | BZ | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Bolivia | BO | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Brunei Darussalam | BN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Canada | CA | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 23 | 23 | 23 | 23 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | -\ | -\ | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Chile | CL | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | China | CN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 33 | 33 | 33 | 33 | 33 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Croatia | HR | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 14 | 14 | 14 | 14 | 14 | 14 | 14 | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Cuba | CU | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | -\ | 23 | 23 | 23 | 23 | 23 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Dominica | DM | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 17 | 17 | 17 | 17 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Dominican Republic | DO | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 17 | 17 | 17 | 17 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Country name | CH/Code | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | 144 | 149 | 153 | 157 | 161 | 165 | 169 | 173 |177 | + +========================================+==============+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+===============+===============+===============+===============+===============+===============+===============+=====+ + | Algeria | DZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Armenia | AM | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 18 | 18 | 18 | 18 | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Australia | AU | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | -\ | -\ | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 36 | 36 | 36 | 36 | 36 | -\ | 14 | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Azerbaijan | AZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 18 | 18 | 18 | 18 | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | 18\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Bahrain | BH | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Bangladesh | BD | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Barbados | BB | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Belize | BZ | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Bolivia | BO | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Brazil | BR | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 27 | 27 | 27 | 27 | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Brunei Darussalam | BN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Canada | CA | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 23 | 23 | 23 | 23 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | -\ | -\ | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Chile | CL | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | China | CN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 33 | 33 | 33 | 33 | 33 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Costarica | CR | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | -\ | 30 | 30 | 30 | 30 | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 36 | 36 | 36 | 36 | 36 | -\ | -\ | 30 | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Croatia | HR | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 14 | 14 | 14 | 14 | 14 | 14 | 14 | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Cuba | CU | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 23\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | 24\ :sup:`#` | -\ | 23 | 23 | 23 | 23 | 23 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Dominica | DM | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 17 | 17 | 17 | 17 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ + | Dominican Republic | DO | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 17 | 17 | 17 | 17 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+-----+ @@ -435,23 +439,23 @@ The values in the tables show the maximum allowed transmit power (in dBm) for ea +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Guam | GU | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 17 | 17 | 17 | 17 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Guatemala | GT | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 17 | 17 | 17 | 17 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + | Guatemala | GT | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | -\ | 27 | 27 | 27 | 27 | 27 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Guyana | GY | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + | Guyana | GY | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Hong Kong | HK | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 17 | 17 | 17 | 17 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + | Hong Kong | HK | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 36 | 36 | 36 | 36 | 36 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | India | IN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 30 | 30 | 30 | 30 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 | -\ | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | + | India | IN | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 30 | 30 | 30 | 30 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*`| 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Indonesia | ID | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | -\ | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 23 | 23 | 23 | 23 | -\ | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ | Iran | IR | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Israel | IL | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | + | Israel | IL | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 14 | 14 | 14 | 14 | 14 | 14 | 14 | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Japan | JP | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + | Japan | JP | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ - | Jordan | JO | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 23 | 23 | 23 | 23 | 23 | -\ | -\ | -\ | + | Jordan | JO | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+ @@ -463,17 +467,17 @@ The values in the tables show the maximum allowed transmit power (in dBm) for ea +========================================+==============+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+=====+ | Kazakhstan | KZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ - | Kenya | KE | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | -\ | -\ | -\ | -\ | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 23 | 23 | -\ | -\ | -\ | -\ | -\ | -\ | + | Kenya | KE | 33 | 33 | 33 | 33 | 33 | 33 | 33 | 33 | 33 | 33 | 33 | 33 | 33 | -\ | 17 | 17 | 17 | 17 | 17\ :sup:`*` | 17\ :sup:`*` | 17\ :sup:`*` | 17\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | North Korea | KP | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | South Korea | KR | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | 23 | 23 | 23 | 17 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | 23 | 23 | 23 | 23 | 23 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ - | Kuwait | KW | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + | Kuwait | KW | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 17\ :sup:`*` | 17\ :sup:`*` | 17\ :sup:`*` | 17\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | Macau | MO | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ - | Malay Archipelago | MY | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 24 | 24 | 24 | 24 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | -\ | -\ | -\ | 24 | 24 | 24 | 24 | 24 | -\ | -\ | -\ | + | Malay Archipelago | MY | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | 27 | -\ | 30 | 30 | 30 | 30 | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | Maldives | MV | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ @@ -481,14 +485,16 @@ The values in the tables show the maximum allowed transmit power (in dBm) for ea +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | Nepal | NP | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ - | New Zealand | NZ | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 17 | 17 | 17 | 17 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + | New Zealand | NZ | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | -\ | 30 | 30 | 30 | 30 | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | Nigeria | NG | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ - | Pakistan | PK | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | + | Pakistan | PK | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | Panama | PA | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | -\ | 36 | 36 | 36 | 36 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 36 | 36 | 36 | 36 | 36 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ + | Philippines | PH | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | 24 | 24 | 24 | 24 | 24 | -\ | -\ | -\ | + +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | Puerto Rico | PR | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 17 | 17 | 17 | 17 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+ | Qatar | QA | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | @@ -500,43 +506,47 @@ The values in the tables show the maximum allowed transmit power (in dBm) for ea .. tab:: Countries (S to Z) - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Country name | CH/Code | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | 144 | 149 | 153 | 157 | 161 | 165 | 169 | 173 |177 | - +========================================+==============+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+=====+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+=====+=====+=====+=====+=====+==============+==============+==============+ - | Saint Kitts and Nevis | KN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Saint Lucia | LC | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Salvador | SV | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 17 | 17 | 17 | 17 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Singapore | SG | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | South Africa | ZA | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Syrian | SY | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Taiwan | TW | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Tanzania | TZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Tunisia | TN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Türkiye | TR | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Ukraine | UA | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | United Kingdom | GB | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 23 | 23 | 23 | 23 | 23 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | United States of America | US | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 23 | 23 | 23 | 23 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | 27\ :sup:`#` | 27\ :sup:`#` | 27\ :sup:`#` | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Uruguay | UY | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Uzbekistan | UZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Venezuela | VE | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ - | Yemen | YE | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | - +----------------------------------------+--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+-----+-----+-----+-----+-----+--------------+--------------+--------------+ + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Country name | CH/Code | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 36 | 40 | 44 | 48 | 52 | 56 | 60 | 64 | 100 | 104 | 108 | 112 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | 144 | 149 | 153 | 157 | 161 | 165 | 169 | 173 |177 | + +========================================+==============+==============+==============+==============+==============+==============+==============+==============+===============+==============+==============+==============+==============+==============+=====+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+==============+ + | Saint Kitts and Nevis | KN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Saint Lucia | LC | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | 30\ :sup:`*` | -\ | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Salvador | SV | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 17 | 17 | 17 | 17 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Serbia | RS | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | 24 | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Singapore | SG | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | 23 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | South Africa | ZA | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Syrian | SY | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Taiwan | TW | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Tanzania | TZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Togo | TG | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Tunisia | TN | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Türkiye | TR | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Ukraine | UA | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | United Kingdom | GB | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 27\ :sup:`*` | 23 | 23 | 23 | 23 | 23 | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | United States of America | US | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | 23 | 23 | 23 | 23 | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 24\ :sup:`*` | 30 | 30 | 30 | 30 | 30 | 27\ :sup:`#` | 27\ :sup:`#` | 27\ :sup:`#` | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+---------------+-------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Uruguay | UY | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Uzbekistan | UZ | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | 20 | 20 | 20 | 20 | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | 20\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Venezuela | VE | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | 30 | -\ | 23 | 23 | 23 | 23 | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | 23\ :sup:`*` | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | 30 | 30 | 30 | 30 | 30 | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ + | Yemen | YE | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | 20 | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | -\ | + +----------------------------------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+---------------+--------------+--------------+--------------+--------------+--------------+-----+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+--------------+ | [-] - Channel not supported | :sup:`*` - DFS and Passive scan only diff --git a/doc/nrf/protocols/wifi/sap_mode/mem_requirements_sap.rst b/doc/nrf/protocols/wifi/sap_mode/mem_requirements_sap.rst index 11a0ce953df5..41068ba2495d 100644 --- a/doc/nrf/protocols/wifi/sap_mode/mem_requirements_sap.rst +++ b/doc/nrf/protocols/wifi/sap_mode/mem_requirements_sap.rst @@ -7,10 +7,34 @@ Code and RAM memory footprint requirements differ depending on the selected plat Footprint values are provided in kilobytes (KB). -The following table lists the memory requirements for :ref:`SoftAP ` sample running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). +.. tabs:: -+--------------------------------------+-------------+-------------------------------------------+--------------------------+----------------------+---------------------------------+--------------------+----------------------+ -| Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | -+======================================+=============+===========================================+==========================+======================+=================================+====================+======================+ -| :ref:`SoftAP ` | 682 | 59 | 69 | 291 | 309 | 207 | 13 | -+--------------------------------------+-------------+-------------------------------------------+--------------------------+----------------------+---------------------------------+--------------------+----------------------+ + .. tab:: nRF54H20 DK + + The following table lists the memory requirements for :ref:`SoftAP ` sample running on the :ref:`nRF54H20 DK ` (:ref:`nrf54h20dk/nrf54h20/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`SoftAP ` | 676 | 3 | 73 | 253 | 231 | 146 | 15 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + + .. tab:: nRF54L15 DK + + The following table lists the memory requirements for :ref:`SoftAP ` sample running on the :ref:`nRF54L15 DK ` (:ref:`nrf54l15dk/nrf54l15/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`SoftAP ` | 720 | 3 | 73 | 309 | 230 | 145 | 23 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + + .. tab:: nRF7002 DK + + The following table lists the memory requirements for :ref:`SoftAP ` sample running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). + + +--------------------------------------+-------------+-------------------------------------------+--------------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | + +======================================+=============+===========================================+==========================+======================+=================================+====================+======================+ + | :ref:`SoftAP ` | 720 | 3 | 73 | 300 | 309 | 228 | 15 | + +--------------------------------------+-------------+-------------------------------------------+--------------------------+----------------------+---------------------------------+--------------------+----------------------+ diff --git a/doc/nrf/protocols/wifi/scan_mode/mem_requirements_scan.rst b/doc/nrf/protocols/wifi/scan_mode/mem_requirements_scan.rst index bd4cf06056d5..f638dbbcc43d 100644 --- a/doc/nrf/protocols/wifi/scan_mode/mem_requirements_scan.rst +++ b/doc/nrf/protocols/wifi/scan_mode/mem_requirements_scan.rst @@ -13,17 +13,37 @@ Footprint values are provided in kilobytes (KB). .. tab:: nRF52840 DK - The following table lists memory requirements for samples running on the :ref:`nRF52840 DK ` (:ref:`nrf52840dk/nrf52840 `). + The following table lists memory requirements for sample running on the :ref:`nRF52840 DK ` (:ref:`nrf52840dk/nrf52840 `). +--------------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +======================================+=============+===========================================+============================+======================+=================================+====================+======================+ - | :ref:`Scan ` | 152 | 25 | 25 | 0 | 78 | 45 | 0 | + | :ref:`Scan ` | 155 | 1 | 28 | 0 | 65 | 34 | 0 | +--------------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ + .. tab:: nRF54H20 DK + + The following table lists the memory requirements for sample running on the :ref:`nRF54H20 DK ` (:ref:`nrf54h20dk/nrf54h20/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`Scan ` | 162 | 1 | 28 | 0 | 180 | 145 | 0 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + + .. tab:: nRF54L15 DK + + The following table lists the memory requirements for sample running on the :ref:`nRF54L15 DK ` (:ref:`nrf54l15dk/nrf54l15/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`Scan ` | 153 | 1 | 28 | 0 | 174 | 144 | 0 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + .. tab:: nRF7002 DK - The following table lists memory requirements for samples running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). + The following table lists memory requirements for sample running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). +--------------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | @@ -38,9 +58,9 @@ Footprint values are provided in kilobytes (KB). +-----------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +===================================+=============+===========================================+============================+======================+=================================+====================+======================+ - | :ref:`Location ` | 242 | 26 | 69 | 0 | 106 | 50 | 0 | + | :ref:`Location ` | 252 | 3 | 73 | 0 | 90 | 38 | 0 | +-----------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`Scan ` | 146 | 25 | 25 | 0 | 73 | 45 | 0 | + | :ref:`Scan ` | 149 | 1 | 28 | 0 | 62 | 34 | 0 | +-----------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ .. tab:: nRF9161 DK @@ -50,7 +70,7 @@ Footprint values are provided in kilobytes (KB). +-----------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +===================================+=============+===========================================+============================+======================+=================================+====================+======================+ - | :ref:`Location ` | 249 | 26 | 69 | 0 | 106 | 50 | 0 | + | :ref:`Location ` | 259 | 3 | 73 | 0 | 90 | 38 | 0 | +-----------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`Scan ` | 156 | 25 | 25 | 0 | 74 | 45 | 0 | + | :ref:`Scan ` | 160 | 1 | 28 | 0 | 62 | 34 | 0 | +-----------------------------------+-------------+-------------------------------------------+----------------------------+----------------------+---------------------------------+--------------------+----------------------+ diff --git a/doc/nrf/protocols/wifi/station_mode/mem_requirements_sta.rst b/doc/nrf/protocols/wifi/station_mode/mem_requirements_sta.rst index 5be24158cb90..8b0171c7d5dd 100644 --- a/doc/nrf/protocols/wifi/station_mode/mem_requirements_sta.rst +++ b/doc/nrf/protocols/wifi/station_mode/mem_requirements_sta.rst @@ -18,9 +18,29 @@ Footprint values are provided in kilobytes (KB). +--------------------------------------+-------------+-------------------------------------------+-----------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +======================================+=============+===========================================+=============================+======================+=================================+====================+======================+ - | :ref:`Station ` | 502 | 51 | 69 | 180 | 253 | 164 | 11 | + | :ref:`Station ` | 535 | 3 | 73 | 187 | 201 | 127 | 15 | +--------------------------------------+-------------+-------------------------------------------+-----------------------------+----------------------+---------------------------------+--------------------+----------------------+ + .. tab:: nRF54H20 DK + + The following table lists the memory requirements for sample running on the :ref:`nRF54H20 DK ` (:ref:`nrf54h20dk/nrf54h20/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`Station ` | 500 | 3 | 73 | 146 | 229 | 146 | 15 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + + .. tab:: nRF54L15 DK + + The following table lists the memory requirements for sample running on the :ref:`nRF54L15 DK ` (:ref:`nrf54l15dk/nrf54l15/cpuapp `). + + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW Patch ROM | WPA supplicant ROM | Total RAM (incl. static HEAP) | Wi-Fi driver RAM | WPA supplicant RAM | + +===============================================================+=============+====================+======================+======================+=================================+====================+======================+ + | :ref:`Station ` | 537 | 3 | 73 | 197 | 229 | 145 | 23 | + +---------------------------------------------------------------+-------------+--------------------+----------------------+----------------------+---------------------------------+--------------------+----------------------+ + .. tab:: nRF7002 DK The following table lists memory requirements for samples running on the :ref:`nRF7002 DK ` (:ref:`nrf7002dk/nrf5340/cpuapp `). @@ -28,19 +48,19 @@ Footprint values are provided in kilobytes (KB). +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ | Sample | Total ROM | Wi-Fi driver ROM | nRF70 FW patch ROM | WPA supplicant ROM | Total RAM (incl. static heap) | Wi-Fi driver RAM | WPA supplicant RAM | +===============================================+=============+===========================================+===============================+======================+=================================+====================+======================+ - | :ref:`UDP ` | 502 | 54 | 69 | 178 | 214 | 101 | 13 | + | :ref:`UDP ` | 515 | 3 | 73 | 184 | 213 | 129 | 15 | +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`Station ` | 499 | 53 | 69 | 180 | 254 | 164 | 13 | + | :ref:`Station ` | 537 | 3 | 73 | 187 | 207 | 127 | 15 | +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`AWS IoT ` | 693 | 53 | 69 | 233 | 305 | 101 | 13 | + | :ref:`AWS IoT ` | 718 | 3 | 73 | 240 | 325 | 129 | 15 | +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`CoAP Client ` | 590 | 55 | 69 | 178 | 291 | 170 | 13 | + | :ref:`CoAP Client ` | 607 | 3 | 73 | 184 | 221 | 129 | 15 | +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`HTTP Server ` | 640 | 55 | 69 | 180 | 273 | 121 | 13 | + | :ref:`HTTP Server ` | 671 | 3 | 73 | 186 | 257 | 137 | 15 | +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`HTTPS Client ` | 631 | 54 | 69 | 239 | 281 | 101 | 13 | + | :ref:`HTTPS Client ` | 647 | 3 | 73 | 245 | 303 | 129 | 15 | +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ - | :ref:`MQTT ` | 690 | 55 | 69 | 239 | 309 | 101 | 13 | + | :ref:`MQTT ` | 706 | 3 | 73 | 245 | 321 | 124 | 15 | +-----------------------------------------------+-------------+-------------------------------------------+-------------------------------+----------------------+---------------------------------+--------------------+----------------------+ .. note:: diff --git a/doc/nrf/protocols/wifi/station_mode/powersave.rst b/doc/nrf/protocols/wifi/station_mode/powersave.rst index e168329aa395..322c8cdd2f47 100644 --- a/doc/nrf/protocols/wifi/station_mode/powersave.rst +++ b/doc/nrf/protocols/wifi/station_mode/powersave.rst @@ -35,7 +35,7 @@ When the network interface is brought down, the nRF Wi-Fi driver puts the nRF70 When the network interface is brought up, the nRF Wi-Fi driver puts the nRF70 Series device in Active state. .. note:: - The application needs to reinitialize the Wi-Fi association after the network interface is brought up. + The application needs to reinitialize the Wi-Fi® association after the network interface is brought up. Functional state ================ diff --git a/doc/nrf/protocols/zigbee/architectures.rst b/doc/nrf/protocols/zigbee/architectures.rst index e946ba31ed05..502e79d89127 100644 --- a/doc/nrf/protocols/zigbee/architectures.rst +++ b/doc/nrf/protocols/zigbee/architectures.rst @@ -7,6 +7,8 @@ Zigbee architectures :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + This page describes the platform designs that are possible with the Zigbee stack on Nordic Semiconductor devices. The designs are described from the least to the most complex, that is from simple applications that consist of a single chip running single or multiple protocols to scenarios in which the nRF SoC acts as a network co-processor when the application is running on a much more powerful host processor. diff --git a/doc/nrf/protocols/zigbee/commissioning.rst b/doc/nrf/protocols/zigbee/commissioning.rst index d5309f2a571d..1faf4d8951b8 100644 --- a/doc/nrf/protocols/zigbee/commissioning.rst +++ b/doc/nrf/protocols/zigbee/commissioning.rst @@ -7,6 +7,8 @@ Zigbee commissioning :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + Commissioning is a process that allows a new Zigbee device to join a Zigbee network. The device is configured into the network, so that it can start communicating with other network nodes. If there is no network to join, the commissioning procedure ensures that a new network is created. diff --git a/doc/nrf/protocols/zigbee/configuring.rst b/doc/nrf/protocols/zigbee/configuring.rst index 0ecf08370ae6..8afe40b64d0f 100644 --- a/doc/nrf/protocols/zigbee/configuring.rst +++ b/doc/nrf/protocols/zigbee/configuring.rst @@ -7,6 +7,8 @@ Configuring Zigbee in |NCS| :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + This page describes what is needed to start working with Zigbee in the |NCS|. .. _zigbee_ug_libs: diff --git a/doc/nrf/protocols/zigbee/configuring_libraries.rst b/doc/nrf/protocols/zigbee/configuring_libraries.rst index 3c5f3e076248..6ef4bb735a60 100644 --- a/doc/nrf/protocols/zigbee/configuring_libraries.rst +++ b/doc/nrf/protocols/zigbee/configuring_libraries.rst @@ -7,6 +7,8 @@ Configuring Zigbee libraries in |NCS| :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The Zigbee protocol in |NCS| can be customized by enabling and configuring several :ref:`Zigbee libraries `. This page lists options and steps required for configuring each of them. diff --git a/doc/nrf/protocols/zigbee/configuring_zboss_traces.rst b/doc/nrf/protocols/zigbee/configuring_zboss_traces.rst index 73ce313567e3..c42d95569b53 100644 --- a/doc/nrf/protocols/zigbee/configuring_zboss_traces.rst +++ b/doc/nrf/protocols/zigbee/configuring_zboss_traces.rst @@ -7,6 +7,8 @@ Configuring ZBOSS traces in |NCS| :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The :ref:`nrfxlib:zboss` (ZBOSS stack) comes included in the |NCS| in a set of precompiled libraries, which can complicate the debugging process. To help with that, the ZBOSS stack can be configured to print trace logs that allow you to trace the stack behavior. This page describes how to enable and configure ZBOSS trace logs. @@ -213,7 +215,7 @@ See the :ref:`Zigbee NCP ` sample page for how to configure t .. note:: Before proceeding with the following steps, first check if your Zigbee application already has USB enabled or is currently using a USB. - If your application is already using a virtual COM port via native USB, use a device name that is different than the default ``CDC_ACM_0`` to create new virtual COM port for printing trace logs. + If your application is already using a virtual COM port using native USB, use a device name that is different than the default ``CDC_ACM_0`` to create new virtual COM port for printing trace logs. For example, if ``CDC_ACM_0`` is already present, then create a virtual COM port named ``CDC_ACM_1``, and so on. Additionally, the Kconfig option :kconfig:option:`CONFIG_USB_COMPOSITE_DEVICE` must be set if there are multiple virtual COM ports configured. diff --git a/doc/nrf/protocols/zigbee/index.rst b/doc/nrf/protocols/zigbee/index.rst index be8e464dcffc..f2b60913d38b 100644 --- a/doc/nrf/protocols/zigbee/index.rst +++ b/doc/nrf/protocols/zigbee/index.rst @@ -3,6 +3,8 @@ Zigbee ###### +.. include:: /includes/zigbee_deprecation.txt + .. zigbee_ug_intro_start Zigbee is a portable, low-power software networking protocol that provides connectivity over a mesh network based on the IEEE 802.15.4 radio protocol. diff --git a/doc/nrf/protocols/zigbee/memory.rst b/doc/nrf/protocols/zigbee/memory.rst index ade92f864cea..db1c79ce4326 100644 --- a/doc/nrf/protocols/zigbee/memory.rst +++ b/doc/nrf/protocols/zigbee/memory.rst @@ -7,6 +7,8 @@ Zigbee memory requirements :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + This page provides information about the amount of flash memory and RAM that is required by :ref:`zigbee_samples`, as well as stack memory requirements for ``main`` and ``zboss`` threads. Use it to check if your application has enough space for a given configuration. Values are provided for :ref:`ZBOSS libraries `. @@ -38,27 +40,27 @@ Values are provided in kilobytes (KB). +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | Sample | ROM, ZBOSS stack + App | ROM, MCUboot bootloader | ROM, ZBOSS non-volatile memory | ROM, ZBOSS product config | Total ROM | RAM, ZBOSS stack + App | Total RAM | +========================================================================================================================+==========================+===========================+==================================+=============================+=============+==========================+=============+ - | :ref:`Network coordinator ` | 340 | 0 | 32 | 4 | 376 | 72 | 72 | + | :ref:`Network coordinator ` | 339 | 0 | 32 | 4 | 375 | 72 | 72 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light bulb ` | 365 | 0 | 32 | 4 | 401 | 58 | 58 | + | :ref:`Light bulb ` | 363 | 0 | 32 | 4 | 399 | 58 | 58 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` | 284 | 0 | 32 | 4 | 320 | 53 | 53 | + | :ref:`Light switch ` | 282 | 0 | 32 | 4 | 318 | 53 | 53 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Light switch ` with :ref:`lib_zigbee_fota` | 298 | 48 | 32 | 4 | 382 | 61 | 61 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` | 396 | 0 | 32 | 4 | 432 | 70 | 70 | + | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` | 395 | 0 | 32 | 4 | 431 | 69 | 69 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` and :ref:`lib_zigbee_fota` | 411 | 48 | 32 | 4 | 495 | 78 | 78 | + | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` and :ref:`lib_zigbee_fota` | 411 | 48 | 32 | 4 | 495 | 76 | 76 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP ` | 360 | 0 | 32 | 4 | 396 | 84 | 84 | + | :ref:`NCP ` | 358 | 0 | 32 | 4 | 394 | 84 | 84 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP with USB transport ` | 377 | 64 | 32 | 4 | 477 | 93 | 93 | + | :ref:`NCP with USB transport ` | 376 | 64 | 32 | 4 | 476 | 93 | 93 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee application template ` | 340 | 0 | 32 | 4 | 376 | 67 | 67 | + | :ref:`Zigbee application template ` | 338 | 0 | 32 | 4 | 374 | 67 | 67 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell ` | 419 | 0 | 32 | 4 | 455 | 84 | 84 | + | :ref:`Zigbee shell ` | 417 | 0 | 32 | 4 | 453 | 84 | 84 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell over USB ` | 437 | 0 | 32 | 4 | 473 | 93 | 93 | + | :ref:`Zigbee shell over USB ` | 435 | 0 | 32 | 4 | 471 | 93 | 93 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ .. tab:: nRF52833 @@ -68,27 +70,27 @@ Values are provided in kilobytes (KB). +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | Sample | ROM, ZBOSS stack + App | ROM, MCUboot bootloader | ROM, ZBOSS non-volatile memory | ROM, ZBOSS product config | Total ROM | RAM, ZBOSS stack + App | Total RAM | +========================================================================================================================+==========================+===========================+==================================+=============================+=============+==========================+=============+ - | :ref:`Network coordinator ` | 323 | 0 | 16 | 4 | 343 | 67 | 67 | + | :ref:`Network coordinator ` | 322 | 0 | 16 | 4 | 342 | 66 | 66 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light bulb ` | 348 | 0 | 16 | 4 | 368 | 53 | 53 | + | :ref:`Light bulb ` | 346 | 0 | 16 | 4 | 366 | 53 | 53 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` | 267 | 0 | 16 | 4 | 287 | 48 | 48 | + | :ref:`Light switch ` | 265 | 0 | 16 | 4 | 285 | 47 | 47 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Light switch ` with :ref:`lib_zigbee_fota` | n/a | n/a | n/a | n/a | n/a | n/a | n/a | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` | 379 | 0 | 16 | 4 | 399 | 65 | 65 | + | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` | 378 | 0 | 16 | 4 | 398 | 63 | 63 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` and :ref:`lib_zigbee_fota` | n/a | n/a | n/a | n/a | n/a | n/a | n/a | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP ` | 343 | 0 | 16 | 4 | 363 | 79 | 79 | + | :ref:`NCP ` | 341 | 0 | 16 | 4 | 361 | 79 | 79 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP with USB transport ` | 360 | 64 | 16 | 4 | 444 | 88 | 88 | + | :ref:`NCP with USB transport ` | 358 | 64 | 16 | 4 | 442 | 88 | 88 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee application template ` | 323 | 0 | 16 | 4 | 343 | 62 | 62 | + | :ref:`Zigbee application template ` | 321 | 0 | 16 | 4 | 341 | 61 | 61 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell ` | 402 | 0 | 16 | 4 | 422 | 78 | 78 | + | :ref:`Zigbee shell ` | 400 | 0 | 16 | 4 | 420 | 78 | 78 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell over USB ` | 419 | 0 | 16 | 4 | 439 | 88 | 88 | + | :ref:`Zigbee shell over USB ` | 418 | 0 | 16 | 4 | 438 | 88 | 88 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ .. tab:: nRF5340 @@ -100,25 +102,25 @@ Values are provided in kilobytes (KB). +========================================================================================================================+==========================+===========================+==================================+=============================+=============+==========================+=============+ | :ref:`Network coordinator ` | 314 | 0 | 32 | 4 | 350 | 77 | 77 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light bulb ` | 338 | 0 | 32 | 4 | 374 | 64 | 64 | + | :ref:`Light bulb ` | 339 | 0 | 32 | 4 | 375 | 64 | 64 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` | 257 | 0 | 32 | 4 | 293 | 58 | 58 | + | :ref:`Light switch ` | 258 | 0 | 32 | 4 | 294 | 58 | 58 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` with :ref:`lib_zigbee_fota` | 39 | 64 | 32 | 4 | 139 | 24 | 24 | + | :ref:`Light switch ` with :ref:`lib_zigbee_fota` | 274 | 64 | 32 | 4 | 374 | 73 | 73 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` | 320 | 0 | 32 | 4 | 356 | 75 | 75 | + | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` | 322 | 0 | 32 | 4 | 358 | 74 | 74 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` and :ref:`lib_zigbee_fota` | 336 | 64 | 32 | 4 | 436 | 87 | 87 | + | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` and :ref:`lib_zigbee_fota` | 338 | 64 | 32 | 4 | 438 | 88 | 88 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP ` | 332 | 0 | 32 | 4 | 368 | 90 | 90 | + | :ref:`NCP ` | 333 | 0 | 32 | 4 | 369 | 90 | 90 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP with USB transport ` | 350 | 64 | 32 | 4 | 450 | 98 | 98 | + | :ref:`NCP with USB transport ` | 351 | 64 | 32 | 4 | 451 | 98 | 98 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Zigbee application template ` | 313 | 0 | 32 | 4 | 349 | 72 | 72 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell ` | 392 | 0 | 32 | 4 | 428 | 89 | 89 | + | :ref:`Zigbee shell ` | 393 | 0 | 32 | 4 | 429 | 89 | 89 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell over USB ` | 410 | 0 | 32 | 4 | 446 | 98 | 98 | + | :ref:`Zigbee shell over USB ` | 411 | 0 | 32 | 4 | 447 | 98 | 98 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ .. tab:: nRF21540 @@ -128,27 +130,27 @@ Values are provided in kilobytes (KB). +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | Sample | ROM, ZBOSS stack + App | ROM, MCUboot bootloader | ROM, ZBOSS non-volatile memory | ROM, ZBOSS product config | Total ROM | RAM, ZBOSS stack + App | Total RAM | +========================================================================================================================+==========================+===========================+==================================+=============================+=============+==========================+=============+ - | :ref:`Network coordinator ` | 338 | 0 | 32 | 4 | 374 | 72 | 72 | + | :ref:`Network coordinator ` | 337 | 0 | 32 | 4 | 373 | 72 | 72 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light bulb ` | 363 | 0 | 32 | 4 | 399 | 58 | 58 | + | :ref:`Light bulb ` | 362 | 0 | 32 | 4 | 398 | 58 | 58 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` | 282 | 0 | 32 | 4 | 318 | 53 | 53 | + | :ref:`Light switch ` | 281 | 0 | 32 | 4 | 317 | 53 | 53 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Light switch ` with :ref:`lib_zigbee_fota` | 297 | 48 | 32 | 4 | 381 | 61 | 61 | + | :ref:`Light switch ` with :ref:`lib_zigbee_fota` | 296 | 48 | 32 | 4 | 380 | 61 | 61 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` | n/a | n/a | n/a | n/a | n/a | n/a | n/a | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Light switch ` with :ref:`zigbee_light_switch_sample_nus` and :ref:`lib_zigbee_fota` | n/a | n/a | n/a | n/a | n/a | n/a | n/a | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP ` | 358 | 0 | 32 | 4 | 394 | 84 | 84 | + | :ref:`NCP ` | 356 | 0 | 32 | 4 | 392 | 84 | 84 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP with USB transport ` | 375 | 64 | 32 | 4 | 475 | 93 | 93 | + | :ref:`NCP with USB transport ` | 374 | 64 | 32 | 4 | 474 | 93 | 93 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee application template ` | 338 | 0 | 32 | 4 | 374 | 67 | 67 | + | :ref:`Zigbee application template ` | 336 | 0 | 32 | 4 | 372 | 67 | 67 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell ` | 417 | 0 | 32 | 4 | 453 | 84 | 84 | + | :ref:`Zigbee shell ` | 415 | 0 | 32 | 4 | 451 | 84 | 84 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell over USB ` | 435 | 0 | 32 | 4 | 471 | 93 | 93 | + | :ref:`Zigbee shell over USB ` | 433 | 0 | 32 | 4 | 469 | 93 | 93 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ .. tab:: nRF52840 Dongle @@ -172,13 +174,13 @@ Values are provided in kilobytes (KB). +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`NCP ` | n/a | n/a | n/a | n/a | n/a | n/a | n/a | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`NCP with USB transport ` | 372 | 4 | 32 | 4 | 412 | 92 | 92 | + | :ref:`NCP with USB transport ` | 370 | 4 | 32 | 4 | 410 | 92 | 92 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Zigbee application template ` | n/a | n/a | n/a | n/a | n/a | n/a | n/a | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ | :ref:`Zigbee shell ` | n/a | n/a | n/a | n/a | n/a | n/a | n/a | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ - | :ref:`Zigbee shell over USB ` | 430 | 4 | 32 | 4 | 470 | 92 | 92 | + | :ref:`Zigbee shell over USB ` | 429 | 4 | 32 | 4 | 469 | 91 | 91 | +------------------------------------------------------------------------------------------------------------------------+--------------------------+---------------------------+----------------------------------+-----------------------------+-------------+--------------------------+-------------+ .. @@ -203,11 +205,11 @@ Values are provided in bytes (B). +----------------------------------------------------------------+-------------------------------+------------------------------+--------------------------------+-------------------------------+ | Sample | ``main`` thread stack usage | ``main`` thread stack size | ``zboss`` thread stack usage | ``zboss`` thread stack size | +================================================================+===============================+==============================+================================+===============================+ - | :ref:`Network coordinator ` | 688 | 2048 | 984 | 2048 | + | :ref:`Network coordinator ` | 688 | 2048 | 968 | 2048 | +----------------------------------------------------------------+-------------------------------+------------------------------+--------------------------------+-------------------------------+ - | :ref:`Light bulb ` | 688 | 2048 | 984 | 2048 | + | :ref:`Light bulb ` | 688 | 2048 | 968 | 2048 | +----------------------------------------------------------------+-------------------------------+------------------------------+--------------------------------+-------------------------------+ - | :ref:`Light switch ` | 672 | 2048 | 984 | 2048 | + | :ref:`Light switch ` | 672 | 2048 | 968 | 2048 | +----------------------------------------------------------------+-------------------------------+------------------------------+--------------------------------+-------------------------------+ .. tab:: nRF53 Series @@ -219,7 +221,7 @@ Values are provided in bytes (B). +================================================================+===============================+==============================+================================+===============================+ | :ref:`Network coordinator ` | 756 | 2048 | 980 | 2048 | +----------------------------------------------------------------+-------------------------------+------------------------------+--------------------------------+-------------------------------+ - | :ref:`Light bulb ` | 756 | 2048 | 1020 | 2048 | + | :ref:`Light bulb ` | 756 | 2048 | 980 | 2048 | +----------------------------------------------------------------+-------------------------------+------------------------------+--------------------------------+-------------------------------+ | :ref:`Light switch ` | 756 | 2048 | 980 | 2048 | +----------------------------------------------------------------+-------------------------------+------------------------------+--------------------------------+-------------------------------+ diff --git a/doc/nrf/protocols/zigbee/other_ecosystems.rst b/doc/nrf/protocols/zigbee/other_ecosystems.rst index f0fc926ed318..823a9d5a512c 100644 --- a/doc/nrf/protocols/zigbee/other_ecosystems.rst +++ b/doc/nrf/protocols/zigbee/other_ecosystems.rst @@ -7,6 +7,8 @@ Configuring Zigbee samples for other ecosystems :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + You can configure :ref:`zigbee_samples` in |NCS| that you program onto Nordic Semiconductor's hardware platforms to make them work within Zigbee networks of other ecosystems, such as Amazon Alexa, IKEA TRÅDFRI, or Philips Hue. This is only possible for Zigbee networks of other ecosystems that include the Trust Center. diff --git a/doc/nrf/protocols/zigbee/qsg.rst b/doc/nrf/protocols/zigbee/qsg.rst index 0bba9c5ee72e..c4df63ad56d7 100644 --- a/doc/nrf/protocols/zigbee/qsg.rst +++ b/doc/nrf/protocols/zigbee/qsg.rst @@ -7,6 +7,8 @@ Zigbee quick start guide :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + This guide demonstrates some of the basic concepts of the Zigbee network using the |NCS| and the |nRFVSC|. It guides you through the installation of the required tools and programming of the required samples. @@ -101,7 +103,6 @@ For this quick start guide, we will install the following software: * Toolchain Manager - An application for installing the full |NCS| toolchain. * Microsoft's |VSC| - The recommended IDE for the |NCS|. * |nRFVSC| - An add-on for |VSC| that allows you to develop applications for the |NCS|. -* nRF Command Line Tools - A set of mandatory tools for working with the |NCS|. * SEGGER J-Link - Tool for handling the serial connection. .. rst-class:: numbered-step diff --git a/doc/nrf/protocols/zigbee/supported_features.rst b/doc/nrf/protocols/zigbee/supported_features.rst index 2941ad705cc1..2ca6f4a0a9f2 100644 --- a/doc/nrf/protocols/zigbee/supported_features.rst +++ b/doc/nrf/protocols/zigbee/supported_features.rst @@ -7,6 +7,8 @@ Supported Zigbee features :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The |NCS|'s Zigbee protocol uses the ZBOSS library, a third-party precompiled Zigbee stack. It includes all mandatory features of the |zigbee_version| specification and provides an Application Programming Interface (API) to access different services. The stack comes with the following features: diff --git a/doc/nrf/protocols/zigbee/tools.rst b/doc/nrf/protocols/zigbee/tools.rst index 4de96fba8c1d..9087174176e4 100644 --- a/doc/nrf/protocols/zigbee/tools.rst +++ b/doc/nrf/protocols/zigbee/tools.rst @@ -7,6 +7,8 @@ Zigbee tools :local: :depth: 2 +.. include:: /includes/zigbee_deprecation.txt + The tools listed on this page can be helpful when developing your Zigbee application with the |NCS|. .. _ug_zigbee_tools_sniffer: diff --git a/doc/nrf/releases_and_maturity/abi_compatibility.rst b/doc/nrf/releases_and_maturity/abi_compatibility.rst index 420cf9df5798..6e75ebc3fe99 100644 --- a/doc/nrf/releases_and_maturity/abi_compatibility.rst +++ b/doc/nrf/releases_and_maturity/abi_compatibility.rst @@ -1,7 +1,7 @@ .. _abi_compatibility: ABI Compatibility -***************** +################# .. contents:: :local: @@ -19,7 +19,7 @@ For example, adding a new function to a library is typically an ABI-compatible c However, changes that affect data structure layouts, such as altering field order or size, break ABI compatibility as they change the memory layout expected by existing binaries. ABI Compatibility Matrix for the nRF54H20 SoC Binaries -====================================================== +****************************************************** The following table illustrates ABI compatibility between different versions of the nRF54H20 SoC binaries and the |NCS|: @@ -28,6 +28,13 @@ The following table illustrates ABI compatibility between different versions of * - |NCS| versions - Compatible nRF54H20 SoC binaries version + * - |NCS| v2.9.0-nRF54H20 + - `nRF54H20 SoC Binaries v0.8.0`_, compatible with the nRF54H20 DK v0.9.0 and later revisions. + * - |NCS| v2.9.0 + - `nRF54H20 SoC Binaries v0.7.0 for EngC DKs`_, compatible with the nRF54H20 DK v0.8.3 and later revisions. + * - |NCS| v2.8.0 + - `nRF54H20 SoC Binaries v0.7.0 for EngC DKs`_, compatible with the nRF54H20 DK v0.8.3 and later revisions. + `nRF54H20 SoC Binaries v0.7.0 for EngB DKs`_, compatible with the nRF54H20 DKs ranging from v0.8.0 to v0.8.2. * - |NCS| v2.7.99-cs2 - `nRF54H20 SoC Binaries v0.6.5`_ * - |NCS| v2.7.99-cs1 @@ -37,5 +44,60 @@ The following table illustrates ABI compatibility between different versions of * - |NCS| v2.6.99-cs2 - `nRF54H20 SoC Binaries v0.3.3`_ -ABI compatibility ensures that the Secure Domain and System Controller firmware binaries do not need to be recompiled each time the Application, Radio binaries, or both are recompiled, as long as they are based on a compatible NCS version. -Additionally, maintaining ABI compatibility allows the nRF54H20 SoC binaries components to work together without recompilation when updating to newer |NCS| versions. +ABI compatibility ensures that the Secure Domain and System Controller firmware binaries do not need to be recompiled each time the application, radio binaries, or both are recompiled, as long as they are based on a compatible |NCS| version. +Additionally, maintaining ABI compatibility allows the nRF54H20 SoC binary components to work together without recompilation when updating to newer |NCS| versions. + +nRF54H20 SoC Binaries v0.8.0 changelog +************************************** + +The following sections provide detailed lists of changes by component. + +Secure Domain Firmware (SDFW) v9.0.0 +===================================== + +Added +----- + +* Purge protection can be enabled over ADAC. +* Clock control is enabled in SDFW. +* Global domain power request service is integrated in SDFW. +* PUF values from SDROM are cleared on boot. + +Updated +------- + +* Local domain reset will trigger a global reset. + ``RESETINFO`` will contain both the global and local reset reason. +* All processors are booted regardless of whether they have firmware. + They are booted in halted mode if no firmware is present. + +Removed +------- + +* Several services from SSF over ADAC. +* Reset event service. + +Fixed +----- + +* An issue with invoking crypto service from multiple threads or clients. + +System Controller Firmware (SCFW) v4.0.0 +========================================= + +Added +----- + +* GDFS service: New service implementation to handle change of global domain frequency on demand (HSFLL120). +* GDPWR service: New power domains. + +Updated +------- + +* GDPWR service: Renamed power domains. +* GPIO power configuration: + + * When ``POWER.CONFIG.VDDAO1V8 == External``, the function ``power_bicr_is_any_gpio_powered_from_internal_1v8_reg`` now returns ``false``. + This allows proper selection of low power modes when supplying nRF54H20 with an external 1.8V, even if the ``VDDIO_x`` are configured as SHORTED. + +* Temperature sensor coefficients. diff --git a/doc/nrf/releases_and_maturity/known_issues.rst b/doc/nrf/releases_and_maturity/known_issues.rst index a50e6e7929b4..448007c48877 100644 --- a/doc/nrf/releases_and_maturity/known_issues.rst +++ b/doc/nrf/releases_and_maturity/known_issues.rst @@ -22,7 +22,7 @@ A known issue can list one or both of the following entries: Sometimes, they are discovered later and added over time. .. version-filter:: - :default: v2-7-0 + :default: v2-9-0-nRF54H20-rc1 :container: dl/dt :tags: [("wontfix", "Won't fix")] @@ -60,7 +60,52 @@ The issues in this section are related to :ref:`protocols`. Amazon Sidewalk =============== -.. rst-class:: v2-7-0 +.. rst-class:: v2-8-0 + +KRKNWK-19647: nRF52 has high power consumption in sleep mode for sub-GHz sample + nRF52840 device experiences high current consumption in sleep mode with Bluetooth® LE link when using sub-GHz Amazon libraries. + This issue does not occur with Bluetooth LE-only configurations. + + **Affected platforms:** nRF52840 + +.. rst-class:: v2-8-0 + +KRKNWK-19647: nRF53 has high power consumption in sleep mode + The nRF5340 device has high current consumption in sleep mode across all link configurations. + + **Affected platforms:** nRF5340 + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +KRKNWK-19459: AES crypt error occurs after a factory reset + In the Sidewalk DUT application, authentication fails when starting FSK transport and performing a factory reset. + + **Workaround:** After factory reset, perform a power reset. + +.. rst-class:: v2-8-0 + +KRKNWK-19573: Trusted storage for Sidewalk keys fails when settings backend changes + When migrating from NVS to ZMS, the settings storage backend changes, resulting in the loss of trusted keys. + Subsequently, the device becomes inoperable (bricked) after performing DFU with those settings. + + **Workaround:** Do not change settings backend when using trusted storage. + +.. rst-class:: v2-8-0 + +KRKNWK-18776: DFU swap takes too long when running a simple Hello World application + After firmware upload, the device resets to MCUboot and takes several minutes to switch to the new image. + You must wait for the device to complete this operation. + + **Affected platforms:** nRF54L15 DK + +.. rst-class:: v2-8-0 + +KRKNWK-19545: High initial power consumption by Semtech radio + The device experiences high initial current consumption caused by Semtech radio before initialization. + + **Workaround:** Initialize Sidewalk over LoRa or FSK to start Semtech radio. + +.. rst-class:: v2-8-0 v2-7-0 KRKNWK-17860: Fatal DFU error in the Sidewalk application mode A fatal error occurs when attempting to perform DFU in the Sidewalk application mode instead of the DFU mode. @@ -71,8 +116,8 @@ KRKNWK-17860: Fatal DFU error in the Sidewalk application mode .. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 KRKNWK-18465: BUS fault on FSK during the FACTORY_RESET call - The Bluetooth LE link is deinitialized. - However, a race condition might occur where an event added by the *Bluetooth®* LE link is not removed. + The *Bluetooth* LE link is deinitialized. + However, a race condition might occur where an event added by the Bluetooth LE link is not removed. Acting on the event without a valid Bluetooth LE handle leads to dereference of ``NULL``. To avoid the error, you need to check for ``NULL`` before the event is processed in the event queue. The issue requires a fix in the Sidewalk stack. @@ -144,6 +189,30 @@ KRKNWK-14299: NRPA MAC address cannot be set in Zephyr Bluetooth LE ============ +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 + +NCSDK-31095: Issues with the :kconfig:option:`CONFIG_SEGGER_SYSVIEW` Kconfig option + Using this Kconfig option causes the data parameter in the macros :c:macro:`k_fifo_put`, :c:macro:`k_fifo_alloc_put`, :c:macro:`k_lifo_put`, and :c:macro:`k_lifo_alloc_put` to be evaluated multiple times. + This can cause problems if the data parameter is a function call incrementing a reference counter. + + **Workaround:** Manually cherry-pick and apply the commit with the fix to ``sdk-zephyr`` (commit hash: ``f2f61094b5e1ba5b841d78e5dd88b2076fbc99ee`` from the `upstream Zephyr repository `_). + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +DRGN-23363: A flash operation executed on the system workqueue might result in ``-ETIMEDOUT`` + A flash operation executed on the system workqueue might result in ``-ETIMEDOUT`` if there is an active Bluetooth LE connection. + + **Workaround:** Move flash operations to a different thread. + +.. rst-class:: v2-8-0 v2-7-0 + +NCSDK-30458: The Bluetooth LE applications built with the ``nordic-bt-rpc`` snippet do not work on nRF54H20 devices + When using the ``nordic-bt-rpc`` sysbuild snippet for building Bluetooth LE applications for an nRF54H20 device in the Bluetooth RPC configuration, the build system creates an invalid memory map for the application core, resulting in a runtime failure. + + **Affected platforms:** nRF54H20 + + **Workaround:** Add the ``status = "disabled";`` line in the ``cpurad-rw-partitions node`` definition in the :file:`snippets/nordic-bt-rpc/boards/nrf54h20dk_nrf54h20-mem-map-move.dtsi` file. + .. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-4-4 v2-4-3 DRGN-23231: The Bluetooth subsystem may sometimes deadlock when a Bluetooth link is lost during data transfer @@ -153,16 +222,9 @@ DRGN-23231: The Bluetooth subsystem may sometimes deadlock when a Bluetooth link **Affected platforms:** nRF5340 -.. rst-class:: v2-7-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 -DRGN-22930 The SoftDevice Controller may de-reference a ``NULL`` pointer - This can occur when using the vendor-specific HCI command Zephyr Write TX Power Level for a connection. - - **Workaround:** Enable support for the LE Power Control feature (:kconfig:option:`CONFIG_BT_CTLR_LE_POWER_CONTROL`). - -.. rst-class:: v2-7-0 - -NCSDK-28239 On nRF54H20, a Bluetooth LE disconnect event is not generated once the central device (i.e. mobile phone) moves out of range while data is being transferred (i.e. during DFU) +NCSDK-28239: On nRF54H20, a Bluetooth LE disconnect event is not generated once the central device (mobile phone) moves out of range while data is being transferred (during DFU) This will prevent the device from establishing new BLE connections. **Affected platforms:** nRF54H20 @@ -269,7 +331,7 @@ Only secure applications can use Bluetooth LE .. rst-class:: v2-5-2 -DRGN-21390: The `disconnected` callback might not get called on nRF5340 +DRGN-21390: The ``disconnected`` callback might not get called on nRF5340 The Bluetooth host running on the nRF5340 application core might deadlock on disconnection. This is due to a recent bugfix in the SoftDevice Controller triggering a bug in the ATT queuing layer. @@ -282,11 +344,52 @@ DRGN-23518: ACL reassembly may deadlock **Workaround:** Ensure that the value of :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT` is greater than the value of :kconfig:option:`CONFIG_BT_MAX_CONN`. +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +DRGN-23511: Building of multilink Bluetooth applications fails + This happens when the :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT` Kconfig option is not explicitly set. + + **Workaround:** Set the Kconfig value explicitly. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-29354: Bluetooth traffic stalls while writing or erasing flash + Using system workqueue for internal flash operations while Bluetooth is in use could result in Bluetooth hang or flash operation failures (timeout in MPSL flash synchronization). + This happens because Bluetooth RX context waits for the connection TX notify that is done in the system workqueue context. + + **Affected platforms:** nRF52 Series, nRF54L15 + + **Workaround:** Use a separate workqueue for connection TX notify processing (:kconfig:option:`CONFIG_BT_CONN_TX_NOTIFY_WQ`). + Bluetooth Mesh ============== The issues in this section are related to the :ref:`ug_bt_mesh` protocol. +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 + +NCSDK-30033: :ref:`bt_mesh_light_ctrl_srv_readme` never resumes the Lightness Controller automatically after it is disabled by a scene recall + This occurs when the Lightness Controller is running and a scene recall for a scene with the Lightness Controller disabled is received. + Recalling this scene causes the Lightness Controller to stop running. + Unlike when setting the Lightness state through other messages, the Lightness Controller will not automatically resume after the time set in the :kconfig:option:`CONFIG_BT_MESH_LIGHT_CTRL_SRV_RESUME_DELAY` Kconfig option. + + **Workaround:** Explicitly re-enable the Lightness Controller using a Lightness Controller client to resume it after it is disabled by a scene recall. + +.. rst-class:: v2-8-0 v2-7-0 + +NCSDK-29893: Adding dynamic names to devices does not work + The advertiser options to automatically add the name in the scan response and the advertising data is removed. + The Mesh files ``proxy_srv.c`` and ``pb_gatt_srv.c`` were using ``BT_LE_ADV_OPT_USE_NAME`` that has been removed. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 + +NCSDK-28363: Local composition hash generator only considers the first portion of the Composition Data Page 0 (CDP0) when the size of CDP0 exceeds ``BT_TX_SDU_MAX`` + This affects applications that use the Large Composition Data server together with the default DFU Metadata format enabled using the :kconfig:option:`CONFIG_BT_MESH_DFU_METADATA` Kconfig option. + Using the hash computed by calling the :c:func:`bt_mesh_dfu_metadata_comp_hash_local_get` function to compare metadata will wrongly conclude that two pages are equal if the difference between the pages is beyond the first ``BT_MESH_TX_SDU_MAX`` bytes of the page. + + **Workaround:** Make sure that, for applications with composition data longer than ``BT_TX_SDU_MAX``, any change to composition data as part of a DFU includes at least one change in the first ``BT_TX_SDU_MAX`` bytes of CDP0. + Alternatively, create your own metadata scheme other than the default DFU Metadata format for such applications. + .. rst-class:: v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 NCSDK-28052: Large Composition Data Server and Private Beacon Server model do not extend Configuration Server model @@ -324,9 +427,9 @@ NCSDK-23308: Setting storage causes the device to reboot in the event of a clean .. rst-class:: v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-1 v1-9-0 v1-8-0 v1-7-1 NCSDK-16800: RPL is not cleared on IV index recovery - After recovering the IV index, a node doesn't clear the replay protection list, which leads to incorrect triggering of the replay attack protection mechanism. + After recovering the IV index, a node does not clear the replay protection list, which leads to incorrect triggering of the replay attack protection mechanism. - **Workaround:** Call ``bt_mesh_rpl_reset`` twice after the IV index recovery is done. + **Workaround:** Call ``bt_mesh_rpl_reset ()`` twice after the IV index recovery is done. .. rst-class:: v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-1 v1-9-0 v1-8-0 v1-7-1 @@ -353,7 +456,7 @@ NCSDK-16579: Advertising Node Identity and Network ID might not work with the ex NCSDK-21780: Sensor types with floating point representation lose precision Sensor types with floating point representation lose precision when converted to ``sensor_value`` in the sensor API callbacks. -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-1 v1-9-0 v1-8-0 v1-7-1 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-1 v1-9-0 v1-8-0 v1-7-1 NCSDK-14399: Legacy advertiser can occasionally do more message retransmissions than requested When using the legacy advertiser, the stack sleeps for at least 50 ms after starting advertising a message, which might result in more messages to be advertised than requested. @@ -384,6 +487,13 @@ Enhanced ShockBurst (ESB) The issues in this section are related to the :ref:`ug_esb` protocol. +.. rst-class:: v2-9-0 + +NCSDK-30802: Packet retransmission is not working properly in the ESB for the nRF54 Series devices + The device suddenly stops transmitting ESB packets. + +**Workaround:** Trigger the ``NRF_TIMER_TASK_CLEAR`` task after ``NRF_TIMER_TASK_STOP``. + .. rst-class:: v2-3-0 v2-2-0 NCSDK-20092: ESB does not send packet longer than 63 bytes @@ -394,27 +504,85 @@ Matter The issues in this section are related to the :ref:`ug_matter` protocol. +.. rst-class:: v2-9-0 + +KRKNWK-19804: Descriptor Device Type List does not include OTA Requestor device on endpoint 0 + None of the Matter samples include the OTA Requestor Device Type on endpoint 0 in the Descriptor Device Type List. + This causes the Matter 1.4 certification test IDM-10.5 to fail. + + **Workaround:** Manually cherry-pick and apply the commit with the fix to ``sdk-nrf`` (commit hash: ``9d1b1512b9176f7ecfd491c21659c90d4f119245``). + +.. rst-class:: v2-9-0 v2-8-0 + +KRKNWK-19806: RPU recovery fails during Wi-Fi communication + Wi-Fi is not reconnecting to previously connected network after RPU recovery. + + **Affected platforms:** nRF7002 + + **Workaround:** Cherry-pick changes from PR #529 in the `Matter GitHub repository`_ . + +.. rst-class:: v2-9-0 v2-8-0 + +NCSDK-28567: Swap time after DFU takes a very long time + Due to the incorrect RRAM buffer configuration, the swap time after DFU can exceed three minutes. + + **Affected platforms:** nRF54L15, nRF54L10 + + **Workaround:** Set the :kconfig:option:`CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE` Kconfig option to ``1`` in the :file:`sysbuild/mcuboot/boards/nrf54l15dk_nrf54l15_cpuapp.conf` file of the application. + +.. rst-class:: v2-9-0 + +KRKNWK-19846: Wrong command for the internal configuration build in the :ref:`matter_template_sample` sample documentation + There is an obsolete and wrong command for building the sample for the nRF54L15 DK with support for Matter OTA DFU and DFU over Bluetooth SMP, and using internal MRAM only. + + **Affected platforms:** nRF54L15 + + **Workaround:** Use the following command to build the sample for the nRF54L15 DK with support for Matter OTA DFU and DFU over Bluetooth SMP, and using internal MRAM only: + + .. code-block:: console + + west build -p -b nrf54l15dk/nrf54l15/cpuapp -- -DCONFIG_CHIP_DFU_OVER_BT_SMP=y -DFILE_SUFFIX=internal + +.. rst-class:: v2-9-0 + +KRKNWK-19826: The Device Firmware Upgrade (DFU) fails for nRF5340 DK with RAM power down enabled + The DFU fails for nRF5340 DK, if the application enables the :kconfig:option:`CONFIG_RAM_POWER_DOWN_LIBRARY` Kconfig option. + This option is enabled by default for the ``release`` configuration of the following samples: + + * :ref:`matter_lock_sample` + * :ref:`matter_light_switch_sample` + * :ref:`matter_smoke_co_alarm_sample` + * :ref:`matter_window_covering_sample` + + **Workaround:** Set the :kconfig:option:`CONFIG_RAM_POWER_DOWN_LIBRARY` Kconfig option to ``n`` in the :file:`prj_release.conf` file of the application. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +KRKNWK-19388: The smart plug functionality of Matter Bridge application does not work with Apple Home application + The additional functionality of a smart plug that runs alongside the Matter Bridge functionality is not visible in the Apple Home application. + It applies to every functionality reflected by the static Matter endpoint and run alongside dynamic endpoints represented by the Matter Bridge. + .. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 -KRKNWK-19524: Reliability issues with multicast message delivery for certain Access Points. - Certain Access Points require Wi-Fi devices to send Multicast Listener Discovery version 2 (MLDv2) Report messages for multicast packets to be properly delivered to a given address. - Matter over Wi-Fi devices only subscribed to multicast addresses within the internal IPv6 stack, without notifying the Access Points, leading to reliability issues with multicast message delivery. +KRKNWK-19524: Reliability issues with multicast message delivery for certain access points + Certain access points require Wi-Fi® devices to send Multicast Listener Discovery version 2 (MLDv2) Report messages for multicast packets to be properly delivered to a given address. + Matter over Wi-Fi devices only subscribed to multicast addresses within the internal IPv6 stack, without notifying the access points, leading to reliability issues with multicast message delivery. **Workaround:** To ensure reliable multicast communication, use the :c:func:`net_ipv6_mld_join` and :c:func:`net_ipv6_mld_leave` functions to explicitly subscribe or unsubscribe to multicast addresses. - For reference, see the commit with the fix in the ``sdk-connectedhomeip`` repository (commit hash: ``TBD``). + For reference, see the commit with the fix in the ``sdk-connectedhomeip`` repository (commit hash: ``08acaf44604acef6679bd7eb2d6b51245bcfa54c``). .. rst-class:: v2-7-0 -KRKNWK-19443: The device commissioning window can be opened for longer than 900 seconds, which violates the Matter specification. +KRKNWK-19443: The device commissioning window can be opened for longer than 900 seconds, which violates the Matter specification A device using the Extended Announcement feature is allowed to open the commissioning window for longer than 900 s only if it is uncommissioned. However, the implementation with Extended Announcement enabled allows the device to open the commissioning window for longer than 900 s even when the device is commissioned as well. This leads to the TC-CADMIN-1.21 and TC-CADMIN-1.22 certification test cases failure. - **Workaround:** Manually cherry-pick and apply the commit with the fix to ``sdk-connectedhomeip`` (commit hash: ``ba9faf2b1e321f009f8bf27f5800627c9e4826ea`` from the `upstream Matter SDK repo `_). + **Workaround:** Manually cherry-pick and apply the commit with the fix to ``sdk-connectedhomeip`` (commit hash: ``ba9faf2b1e321f009f8bf27f5800627c9e4826ea`` from the `upstream Matter SDK repository `_). .. rst-class:: v2-7-0 v2-6-1 v2-6-0 -NCSDK-29228: DFU over Bluetooth LE SMP can lead to an application crash. +NCSDK-29228: DFU over Bluetooth LE SMP can lead to an application crash Performing the DFU over SMP using a large application image with a specific size can lead to an MPU fault and application crash. The issue is not reproducible for all images above a certain file size, but rather it seems to occur only for some specific sizes. The reproduction rate is small and the specific conditions to trigger it are not well known. @@ -425,11 +593,11 @@ NCSDK-29228: DFU over Bluetooth LE SMP can lead to an application crash. **Workaround:** There are two alternative solutions that seem to fix this issue: * Set the :kconfig:option:`CONFIG_NORDIC_QSPI_NOR_TIMEOUT_MS` Kconfig option to ``3500`` in the application :file:`prj.conf` file. - * Manually cherry-pick and apply the commit with the fix to ``sdk-zephyr`` (commit hash: ``d1abe40fb0af5d6219a0bcd824c4ea93ab90877a`` from the `upstream Zephyr repo `_). + * Manually cherry-pick and apply the commit with the fix to ``sdk-zephyr`` (commit hash: ``d1abe40fb0af5d6219a0bcd824c4ea93ab90877a`` from the `upstream Zephyr repository `_). .. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 -KRKNWK-19300: The Matter weather station application has NVS size inconsistent with the settings partition size. +KRKNWK-19300: The Matter weather station application has NVS size inconsistent with the settings partition size The settings partition size for Matter weather station is configured to the value of 64 kB. However, the application cannot use all 64 kB of the settings space, because it depends on the NVS size that is limited by the :kconfig:option:`CONFIG_SETTINGS_NVS_SECTOR_COUNT` Kconfig option to 32 kB. @@ -444,13 +612,13 @@ KRKNWK-19300: The Matter weather station application has NVS size inconsistent w .. rst-class:: v2-7-0 -KRKNWK-19199: Matter Lock and Matter Template samples cannot be built in the release configuration for the nRF54H20 platform. - In the DTS overlay file for the ``nrf54h20dk/nrf54h20/cpuapp`` target, the watchdog configuration is missing, whereas in the release configuration, the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` Kconfig option is set to ``y``. +KRKNWK-19199: Matter Lock and Matter Template samples cannot be built in the release configuration for the nRF54H20 platform + In the DTS overlay file for the ``nrf54h20dk/nrf54h20/cpuapp`` target, the watchdog configuration is missing, whereas in the release configuration, the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` Kconfig option is set to ``y``. Building samples with :makevar:`FILE_SUFFIX` variable set to ``release`` will fail for the ``nrf54h20dk/nrf54h20/cpuapp`` target. **Affected platforms:** nRF54H20 - **Workaround:** While building the Matter Lock or Matter Template sample with the :makevar:`FILE_SUFFIX` variable set to ``release``, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` Kconfig option to ``n``. + **Workaround:** While building the Matter Lock or Matter Template sample with the :makevar:`FILE_SUFFIX` variable set to ``release``, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG` Kconfig option to ``n``. .. rst-class:: v2-7-0 @@ -467,7 +635,7 @@ NCSDK-27972: No Bluetooth advertising after a software reset KRKNWK-18965: Malformed group messages can cause memory leak Matter accessories utilizing group communication may experience memory leaks if the secure group message is malformed. - **Workaround:** Manually cherry-pick and apply the commit with the fix to ``sdk-connectedhomeip`` (commit hash: ``bdf3e6e183cba3d13bc5103bf014b47841a14de1`` from the `upstream Matter SDK repo `_). + **Workaround:** Manually cherry-pick and apply the commit with the fix to ``sdk-connectedhomeip`` (commit hash: ``bdf3e6e183cba3d13bc5103bf014b47841a14de1`` from the `upstream Matter SDK repository `_). .. rst-class:: v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 @@ -476,8 +644,8 @@ KRKNWK-18966: Malformed messages may cause crash of device **Workaround:** Manually cherry-pick and apply the commit with the fix to ``sdk-connectedhomeip``: - * For |NCS| v2.6.1 and v2.6.0, commit hash ``a836887c9f8ac277ed02a184c8fe82f8365f5353`` from the `upstream Matter SDK repo `_. - * For |NCS| v2.5.3, v2.5.2, v2.5.1, and v2.5.0, commit hash ``3c808ab05f1fe9c2452ac285c2cad559c060b8f6`` from the `upstream Matter SDK repo `_. + * For |NCS| v2.6.1 and v2.6.0, commit hash ``a836887c9f8ac277ed02a184c8fe82f8365f5353`` from the `upstream Matter SDK repository `_. + * For |NCS| v2.5.3, v2.5.2, v2.5.1, and v2.5.0, commit hash ``3c808ab05f1fe9c2452ac285c2cad559c060b8f6`` from the `upstream Matter SDK repository `_. .. rst-class:: v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 @@ -590,7 +758,7 @@ KRKNWK-17360: Groupcast communication does not work for multiple endpoints that .. rst-class:: v2-5-0 -KRKNWK-17864: When using Wi-Fi® low power mode, the communication with the device might not work after it re-connects to the newly respawned Wi-Fi network +KRKNWK-17864: When using Wi-Fi low power mode, the communication with the device might not work after it re-connects to the newly respawned Wi-Fi network The communication with Matter over a Wi-Fi device sometimes does not work after it re-connects to the Wi-Fi network. The issue is only visible in cases of re-connection to the newly respawned Wi-Fi network that are triggered by rebooting the Wi-Fi access point. The root cause of the issue is not known but can be related to the usage of Wi-Fi in low power mode. @@ -724,7 +892,7 @@ KRKNWK-16728: Sleepy device may consume much power when commissioned to a commer CHIP_ERROR SubscriptionApplicationCallback::OnSubscriptionRequested(chip::app::ReadHandler & aReadHandler, chip::Transport::SecureSession & aSecureSession) { - /* Set the interval in seconds appropriate for your application use case, e.g. 60 seconds. */ + /* Set the interval in seconds appropriate for your application use case, example 60 seconds. */ uint32_t exampleMaxInterval = 60; return aReadHandler.SetReportingIntervals(exampleMaxInterval); } @@ -878,6 +1046,14 @@ Thread The issues in this section are related to the :ref:`ug_thread` protocol. +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +KRKNWK-19628: On nRF54H20, persistence of keys is not yet supported + After rebooting the device, all persistent keys (Thread's network key) will be lost. + This issue applies also to Matter. + + **Affected platforms:** nRF54H20 + .. rst-class:: v2-7-0 KRKNWK-19376: OpenThread CLI sample does not work on the nRF52840 Dongle @@ -895,7 +1071,7 @@ KRKNWK-19036: High power consumption after parent loss **Workaround:** Manually cherry-pick and apply commit with fix to ``sdk-zephyr`` (commit hash: ``6c602a1bbd3b3f7811082bce391c6943663a2c64``). -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 KRKNWK-18612: nRF5340 sometimes fails to send a Child Update Response to an SSED child After performing an MLE Child Update Request by an SSED child, an nRF5340 parent sometimes does not respond with a Child Update Response. @@ -988,7 +1164,7 @@ KRKNWK-11037: ``Udp::GetEphemeralPort`` can cause infinite loop .. rst-class:: v1-5-2 v1-5-1 -KRKNWK-9461 / KRKNWK-9596 : Multiprotocol sample crashes with some smartphones +KRKNWK-9461/KRKNWK-9596 : Multiprotocol sample crashes with some smartphones With some smartphones, the multiprotocol sample crashes on the nRF5340 due to timer timeout inside the 802.15.4 radio driver logic. **Affected platforms:** nRF5340 @@ -1055,6 +1231,44 @@ Wi-Fi The issues in this section are related to the :ref:`ug_wifi` protocol. +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +SHEL-3345 : Wi-Fi Coex (Bluetooth LE and Thread) is broken + The Wi-Fi Coex is broken for Bluetooth LE and Thread due to missing devicetree node in ``cpuapp``. + + **Workaround:** Cherry-pick commits from the upstream: `Zephyr PR #83028`_. + + **Affected platforms:** nRF7002 + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-29650: Wi-Fi connection times are increased in ``_ns`` builds + The latency has increased significantly in latest main branch. + It goes beyond the WPA supplicant command timeout of 10 s, taking now 13 s and causing Wi-Fi connectivity failures. + + **Workaround:** Increase the connection timeout (10 s -> 15 s). + + **Affected platforms:** nRF7002 + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-29649: Flash firmware integrity check does not work due to Mbed TLS dependencies + Due to this, nRF70 patches cannot be validated and corrupted patches can manifest in nRF70 bootup failures. + + **Affected platforms:** nRF7002 + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-29651: nRF54H20 Legacy crypto not supported + PSA crypto is used by default, which limits Wi-Fi security only up to WPA2. + + **Affected platforms:** nRF7002, nRF54H20 + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +SHEL-3226: In nRF70 driver page docs, link to doxygen API has been removed + The link will be brought back in coming releases. + .. rst-class:: v2-7-0 SHEL-2878: WPA3 security mode not working @@ -1075,6 +1289,84 @@ Zigbee The issues in this section are related to the :ref:`ug_zigbee` protocol. +.. rst-class:: v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 + +NCSIDB-1411: Clearing configuration data is not fully performed when processing the Leave Network command + Configuration data of ZCL Reporting feature is not cleared when processing the leave network command, resulting in incomplete compliance with the specification. + + The Zigbee BDB 3.0 Specification, section 9.4 says that all Zigbee persistent data (with exceptions ..) must be cleared in response to the Mgmt_Leave_req command, however the stack leaves the ZCL Reporting parameter values ​​set (cached in memory) and continues to use them. + + **Workaround:** You can supplement the processing of the Leave Network command with ZCL Reporting parameter clearing by adding a :c:func:`zb_zcl_init_reporting_info` call in the ``ZB_ZDO_SIGNAL_LEAVE`` handler. + See the following snippet for an example: + + .. code-block:: c + + case ZB_ZDO_SIGNAL_LEAVE: + /* Device leaves the network. */ + if (status == RET_OK) { + zb_zdo_signal_leave_params_t *leave_params = + ZB_ZDO_SIGNAL_GET_PARAMS(sig_hndler, zb_zdo_signal_leave_params_t); + + if (leave_params->leave_type == ZB_NWK_LEAVE_TYPE_RESET) { + /* Workaround for NCSIDB-1411 - clearing ZCL Reporting parameters. */ + zb_zcl_init_reporting_info(); + } + } + /* Call default signal handler. */ + ZB_ERROR_CHECK(zigbee_default_signal_handler(bufid)); + break; + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 + +NCSIDB-1336: Zigbee Router device cannot rejoin after missing Network Key update or rotation + If a Zigbee Router device does not receive a Network Key update or rotation messages (such as because of an ongoing reset or being powered off), it will not rejoin to a Zigbee Coordinator and will use old keys for communication. + + The Zigbee R22 Core Specification, section 4.3.6.1 says that “A device that is operating in a network and has missed a network key update may also use these procedures to receive the latest network key”, referring to the procedure to get a new network key. + Since it uses the word MAY, not SHOULD, it means the ZBOSS stack implementation does not violate the specification. + In addition, BDB 3.0 does not describe a procedure that can be used by a Zigbee Router device to verify if the security keys it uses are still valid. + + **Workaround:** You can extend a Zigbee Router device application to handle this scenario. + This is done by handling the ``ZB_NLME_STATUS_INDICATION`` status that contains the ``ZB_NWK_COMMAND_STATUS_BAD_KEY_SEQUENCE_NUMBER`` status. + It is not advised to proceed with a rejoin immediately after the first ``ZB_NWK_COMMAND_STATUS_BAD_KEY_SEQUENCE_NUMBER``, because this could make the network vulnerable to attackers trying to force a rejoin without knowing the network key. + + The signal handling logic is as follows: + + .. code-block:: c + + void zboss_signal_handler(zb_bufid_t bufid) + { + zb_zdo_app_signal_hdr_t *sig_hndler = NULL; + zb_zdo_app_signal_type_t sig = zb_get_app_signal(bufid, &sig_hndler); + + /* Update network status LED. */ + zigbee_led_status_update(bufid, ZIGBEE_NETWORK_STATE_LED); + + + + switch (sig) { + + case ZB_NLME_STATUS_INDICATION: + zb_zdo_signal_nlme_status_indication_params_t *nlme_status_ind = ZB_ZDO_SIGNAL_GET_PARAMS(sig_hndler, zb_zdo_signal_nlme_status_indication_params_t); + + + if (nlme_status_ind->nlme_status.status == ZB_NWK_COMMAND_STATUS_BAD_KEY_SEQUENCE_NUMBER) { + // optional check connection + // optional rejoin if necessary + } + break; + + default: + /* Call default signal handler. */ + ZB_ERROR_CHECK(zigbee_default_signal_handler(bufid)); + break; + + } + } + + After receiving several (for example, five) status messages with a bad key sequence number, check if the device is connected to the network, such as by calling the :c:func:`zb_zdo_simple_desc_req` function. + If the returned message status is not ``ZB_ZDP_STATUS_SUCCESS``, initiate the rejoin procedure by calling the :c:func:`zb_bdb_initiate_tc_rejoin` function. + The device will switch the key and successfully rejoin network, whether the network is open or closed. + .. rst-class:: v2-7-0 KRKNWK-19263: FOTA DFU on the nRF5340 DK fails due to an invalid update image @@ -1128,26 +1420,26 @@ KRKNWK-16705: Router device is not fully operational in the distributed network **Workaround:** Add a call to the :c:func:`zb_enable_distributed` function in your application after setting Zigbee Router role for the device. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 KRKNWK-14024: Fatal error when the network coordinator factory resets in the Identify mode A fatal error occurs when the :ref:`Zigbee network coordinator ` triggers factory reset in the Identify mode. **Workaround:** Modify your application, so that the factory reset is requested only after the Identify mode ends. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 KRKNWK-12937: Activation of Sleepy End Device must be done at the very first commissioning procedure for Zigbee light switch sample After programming the :ref:`Zigbee light switch ` sample and its first commissioning, Zigbee End Device joins the Zigbee network as a normal End Device. Pressing **Button 3** does not switch the device to the Sleepy End Device configuration. **Workaround:** Keep **Button 3** pressed during the first commissioning procedure. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 KRKNWK-12615: Get Group Membership Command returns all groups the node is assigned to Get Group Membership Command returns all groups the node is assigned to regardless of the destination endpoint. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 KRKNWK-12115: Simultaneous commissioning of many devices can cause the Coordinator device to assert The Zigbee Coordinator device can assert when multiple devices are being commissioned simultaneously. @@ -1181,13 +1473,11 @@ KRKNWK-12115: Simultaneous commissioning of many devices can cause the Coordinat #. To increase the scheduler queue size, replace ``XYZ`` next to ``ZB_CONFIG_SCHEDULER_Q_SIZE`` with the value of your choice, ranging from ``48U`` to ``256U``. #. To increase the buffer pool size, replace ``XYZ`` next to ``ZB_CONFIG_IOBUF_POOL_SIZE`` with the value of your choice, ranging from ``48U`` to ``127U``. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 +.. rst-class:: v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 KRKNWK-11826: Zigbee Router does not accept new child devices if the maximum number of children is reached Once the maximum number of children devices on a Zigbee Router is reached and one of them leaves the network, the Zigbee Router does not update the flags inside beacon frames to indicate that it cannot accept new devices. - **Workaround:** If the maximum number of child devices has been reached, call ``bdb_start_top_level_commissioning(ZB_BDB_NETWORK_STEERING)`` on the parent router from the ``ZB_ZDO_SIGNAL_LEAVE_INDICATION`` signal handler. - .. rst-class:: v1-9-2 v1-9-1 v1-9-0 v1-8-0 KRKNWK-11704: NCP communication gets stuck @@ -1201,7 +1491,7 @@ KRKNWK-12522: Incorrect Read Attributes Response on reading multiple attributes When reading multiple attributes at once and the first one is not supported, the Read Attributes Response contains two records for the first supported attribute. The first one record has the Status field filled with Unsupported Attribute whereas the second record contains actual data. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 KRKNWK-12017: Zigbee End Device does not recover from broken rejoin procedure If the Device Announcement packet is not acknowledged by the End Device's parent, joiner logic is stopped and the device does not recover. @@ -1266,7 +1556,7 @@ KRKNWK-11465: OTA Client issues in the Image Block Request **Workaround:** Complete the following steps to mitigate this issue: - 1. Restore the default ``MinimumBlockPeriod`` attribute value by adding the following snippet in :file:`zigbee_fota.c` file to the :c:func:`zigbee_fota_abort` function and to the :file:`zigbee_fota_zcl_cb` function in the case where the ``ZB_ZCL_OTA_UPGRADE_STATUS_FINISH`` status is handled: + 1. Restore the default ``MinimumBlockPeriod`` attribute value by adding the following snippet in :file:`zigbee_fota.c` file to the :c:func:`zigbee_fota_abort` function and to the :c:func:`zigbee_fota_zcl_cb` function in the case where the ``ZB_ZCL_OTA_UPGRADE_STATUS_FINISH`` status is handled: .. code-block:: c @@ -1300,7 +1590,7 @@ KRKNWK-11602: Zigbee device becomes not operable after receiving malformed packe Given these two options, we recommend to upgrade your |NCS| version to the latest available one. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 KRKNWK-7723: OTA upgrade process restarting after client reset After the reset of OTA Upgrade Client, the client will start the OTA upgrade process from the beginning instead of continuing the previous process. @@ -1380,13 +1670,6 @@ KRKNWK-8200: Successful signal on commissioning fail break; } -.. rst-class:: v1-5-2 v1-5-1 - -KRKNWK-9461 / KRKNWK-9596: Multiprotocol sample crashes with some smartphones - With some smartphones, the multiprotocol sample crashes on the nRF5340 due to timer timeout inside the 802.15.4 radio driver logic. - - **Affected platforms:** nRF5340 - .. rst-class:: v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 KRKNWK-6348: ZCL Occupancy Sensing cluster is not complete @@ -1407,7 +1690,7 @@ KRKNWK-6336: OTA transfer might be aborted after the MAC-level packet retransmis KRKNWK-7831: Factory reset broken on coordinator with Zigbee shell A coordinator with the :ref:`lib_zigbee_shell` component enabled could assert after executing the ``bdb factory_reset`` command. - **Workaround:** Call the ``bdb_reset_via_local_action`` function twice to remove all the network information. + **Workaround:** Call the ``bdb_reset_via_local_action ()`` function twice to remove all the network information. .. rst-class:: v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 @@ -1460,6 +1743,14 @@ Asset Tracker v2 The issues in this section are related to the :ref:`asset_tracker_v2` application. +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-30983: :ref:`asset_tracker_v2` with :file:`overlay-lwm2m` (LwM2M overlay) reboots after GNSS fix + This issue affects Asset Tracker v2 with the LwM2M overlay. + After a GNSS fix, the device reboots due to a NULL pointer exception. + + **Affected platforms:** nRF91 Series + .. rst-class:: v2-2-0 CIA-845: The application cannot be built with :file:`overlay-carrier.conf` (carrier library) enabled for Nordic Thingy:91 @@ -1484,7 +1775,7 @@ NCSDK-14235: Timestamps that are sent in cloud messages drift over time .. rst-class:: v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-0 -CIA-604: ATv2 cannot be built for the ``thingy91_nrf9160_ns`` board target with ``SECURE_BOOT`` enabled +CIA-604: Asset Tracker v2 cannot be built for the ``thingy91_nrf9160_ns`` board target with ``SECURE_BOOT`` enabled Due to the use of static partitions with the Thingy:91, there is insufficient room in the flash memory to enable both the primary and secondary bootloaders. **Affected platforms:** Thingy:91 @@ -1589,10 +1880,10 @@ Serial LTE Modem The issues in this section are related to the :ref:`serial_lte_modem` application. -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 NCSDK-20457: Modem traces captured through UART are corrupted if RTT logs are simultaneously captured - When capturing modem traces through UART with `Cellular Monitor`_ app and simultaneously capturing RTT logs, for example, with J-Link RTT Viewer, the modem trace misses packets, and captured packets might have incorrect information. + When capturing modem traces through UART with the `Cellular Monitor app`_ and simultaneously capturing RTT logs, for example, with J-Link RTT Viewer, the modem trace misses packets, and captured packets might have incorrect information. **Affected platforms:** nRF9160, nRF9161, nRF9151 @@ -1619,10 +1910,10 @@ NCSDK-24135: Serial LTE Modem (SLM) attempts to use UART hardware flow control e **Affected platforms:** Thingy:91 - **Workaround:** Set the :ref:`CONFIG_SLM_UART_RX_BUF_SIZE ` Kconfig option to ``2048`` to ensure that there is adequate buffer space to receive traffic from the Connectivity Bridge and disable the hw-flow-control from :file:`boards\thingy91_nrf9160_ns.overlay`. - If even larger buffer spaces are required, the :kconfig:option:`CONFIG_BRIDGE_BUF_SIZE` Kconfig option for Connectivity Bridge and the :ref:`CONFIG_SLM_UART_RX_BUF_SIZE ` Kconfig option for SLM, must be set accordingly. + **Workaround:** Set the :ref:`CONFIG_SLM_UART_RX_BUF_SIZE ` Kconfig option to ``2048`` to ensure that there is adequate buffer space to receive traffic from the Connectivity bridge and disable the ``hw-flow-control`` from :file:`boards\thingy91_nrf9160_ns.overlay`. + If even larger buffer spaces are required, set the :kconfig:option:`CONFIG_BRIDGE_BUF_SIZE` Kconfig option for Connectivity bridge and the :ref:`CONFIG_SLM_UART_RX_BUF_SIZE ` Kconfig option for SLM, must be set accordingly. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 NCSDK-23733: Full modem firmware update issue on the nRF91x1 DKs Failures of full modem firmware update on the nRF91x1 DK have been observed in certain conditions. @@ -1668,6 +1959,9 @@ The issues in this section are related to the :ref:`nrf_desktop` application. .. note:: nRF Desktop is also affected by the Bluetooth LE issue :ref:`NCSDK-19865 `. + nRF Desktop is also affected by :ref:`hogp_readme` library's issue :ref:`NCSDK-30288 `. + The issue may cause accessing data under ``NULL`` pointer in case of Bluetooth disconnection while forwarding a configuration channel operation in the :ref:`nrf_desktop_hid_forward`. + .. rst-class:: v2-7-0 NCSDK-27983: No Bluetooth advertising after a software reset @@ -1677,6 +1971,14 @@ NCSDK-27983: No Bluetooth advertising after a software reset **Workaround:** Press the **RESET** button on the nRF54H20 DK after performing a factory or software reset of the device. +.. rst-class:: v2-8-0 + +NCSDK-30261: Bluetooth LE connection parameter update might be triggered multiple times in the :ref:`nrf_desktop_ble_conn_params` + An nRF Desktop dongle without LLPM support updates the connection parameters of a connected peripheral with LLPM support in a never-ending loop. + The connection parameter update should be applied only when required connection parameters change. + + **Workaround:** Manually cherry-pick and apply the commit with the fix from the ``main`` branch (commit hash: ``cfbe5ba7f7fdc5a0fa4114f365a2cc1bab0db150``). + .. rst-class:: v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 NCSDK-23704: Too small heap size on nRF5340 DK @@ -1696,7 +1998,7 @@ NCSDK-25928: :ref:`nrf_desktop_hid_state` keeps sending empty HID reports to low **Workaround:** Manually cherry-pick and apply the commit with the fix from the ``main`` branch (commit hash: ``a87407fc29514b68a7bdaea5554f7b755466a77b``). -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 NCSDK-8304: HID configurator issues for peripherals connected over Bluetooth LE to Linux host Using :ref:`nrf_desktop_config_channel_script` for peripherals connected to host directly over Bluetooth LE might result in receiving improper HID feature report ID. @@ -1737,7 +2039,7 @@ NCSDK-19970: MCUboot bootloader fails to swap images on nRF52840 DK that uses ex **Affected platforms:** nRF52840 **Workaround**: Manually cherry-pick and apply the commit with the fix from the ``main`` branch (commit hash: ``7cea1b7e681a39ce2e2143b6b03132d95b7606ab``). - Make sure to also cherry-pick and apply the commit that fixes a build system issue (commit `ec23df1fa305e99194ceac87a028f6da206a3ff1` from ``main`` branch). + Make sure to also cherry-pick and apply the commit that fixes a build system issue (commit ``ec23df1fa305e99194ceac87a028f6da206a3ff1`` from ``main`` branch). This is needed to ensure that the introduced DTS overlay will be applied to the MCUboot child image. .. rst-class:: v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 @@ -1841,14 +2143,35 @@ nRF5340 Audio The issues in this section are related to the :ref:`nrf53_audio_app` application. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +OCT-3179: CIS headset, potential for not establishing presentation synchronization lock in bidirectional mode + If the CIS gateway is reset shortly after the headset has established synchronization lock, this issue may be triggered. + + **Affected platforms:** nRF5340 Audio DK + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +OCT-3174: Host on CIS gateway may throw assert if a connected headset is hard reset + During a CIS stereo stream, if a headset suddenly disappears during the active stream, this issue may occur. + + **Affected platforms:** nRF5340 Audio DK + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +OCT-3152: Public address for broadcast source + When trying to use a public address for the broadcast source, the address will still change on each boot and appears to be random. + + **Affected platforms:** nRF5340 Audio DK + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 OCT-2070: Detection issues with USB-C to USB-C connection Using USB-C to USB-C when connecting an nRF5340 Audio DK to PC is not correctly detected on some Windows systems. **Affected platforms:** nRF5340 Audio DK -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 OCT-2154: USB audio interface does not work correctly on macOS The audio stream is intermittent on the headset side after connecting the gateway to a Mac computer and starting the audio stream. @@ -1856,7 +2179,7 @@ OCT-2154: USB audio interface does not work correctly on macOS **Affected platforms:** nRF5340 Audio DK -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 OCT-2172: The headset volume is not stored persistently This means the volume will fall back to default level after a reset. @@ -1877,7 +2200,7 @@ OCT-2347: Stream reestablishment issues in CIS **Affected platforms:** nRF5340 Audio DK -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 OCT-2401: The HW codec has a variable (0-20 µs) audio interface (I2S) lock variability This will cause a static offset of the stream, which will cause an undesired extra L-R sync difference. @@ -1899,7 +2222,7 @@ OCT-2472: Headset fault upon gateway reset in the bidirectional stream mode **Affected platforms:** nRF5340 Audio DK -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 OCT-2501: Charging over seven hours results in error Since the nRF5340 Audio DK uses a large battery, the nPM1100 can go into error when charging time surpasses 7 hours. @@ -1910,7 +2233,7 @@ OCT-2501: Charging over seven hours results in error **Workaround:** To start the charging again, turn the nRF5340 Audio DK off and then on again. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 OCT-2539: Presentation delay may not work as expected under some configurations The data is not presented at the correct time. @@ -1940,7 +2263,7 @@ OCT-2569: BIS headset stuck if toggling gateway power quickly **Workaround:** Reset BIS headset -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 OCT-2585: Initial L-R sync may lock with an offset The left and right headset may lock as intended, but there will be a small static time offset between the two headsets. @@ -2015,13 +2338,20 @@ OCT-2897: Interleaved packing issue **Affected platforms:** nRF5340 Audio DK -.. rst-class:: v2-7-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 OCT-3006: Setting a custom bitrate using :kconfig:option:`CONFIG_BT_AUDIO_BITRATE_UNICAST_SINK` will have no effect This is because the application reverts to one of the BAP presets. **Affected platforms:** nRF5340 Audio DK +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 + +OCT-3248: A race condition between capturing timers and the RTC tick resetting the HF timer + This issue might cause time to jump ahead by about 30 µs. + + **Affected platforms:** nRF5340 Audio DK + Controller subsystem for nRF5340 Audio -------------------------------------- @@ -2141,7 +2471,7 @@ NCSDK-18532: MCUboot bootloader does not swap images after OTA DFU on nRF5340 DK **Workaround**: Manually cherry-pick and apply the commit with the fix from the ``main`` branch (commit hash: ``f54f6bbd423b12a595e76425e688f034926b8018``) to fix the issue for ``nrf5340dk_nrf5340_cpuapp``. Similar fix needs to be applied for the Thingy:53 board. - Make sure to also cherry-pick and apply the commit that fixes a build system issue (commit `ec23df1fa305e99194ceac87a028f6da206a3ff1` from ``main`` branch). + Make sure to also cherry-pick and apply the commit that fixes a build system issue (commit ``ec23df1fa305e99194ceac87a028f6da206a3ff1`` from ``main`` branch). This is needed to ensure that the introduced DTS overlay will be applied to the MCUboot child image. .. rst-class:: v1-9-0 @@ -2179,7 +2509,7 @@ NCSDK-18263: |NCS| samples may fail to boot on Thingy:53 Bluetooth samples ================= -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 +.. rst-class:: v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 NCSDK-26424: Directed advertising in the :ref:`peripheral_hids_mouse` sample does not start after disconnecting from a bonded peer When the sample disconnects from a peer, after successful pairing and subscription to reports, it cannot re-connect because directed advertising does not start. @@ -2200,7 +2530,7 @@ NCSDK-18112: :ref:`bluetooth_central_dfu_smp` sample cannot do discovery on the **Workaround:** Enable the legacy LLCP mechanism (:kconfig:option:`CONFIG_BT_LL_SW_LLCP_LEGACY`). -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 v0-4-0 v0-3-0 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 v0-4-0 v0-3-0 NCSDK-19942: HID samples do not work with Android 13 Bluetooth samples and applications that are set up for the HIDS use case and have the Bluetooth Privacy feature enabled (:kconfig:option:`CONFIG_BT_PRIVACY`) disconnect after a short period or enter a connection-disconnection loop when you try to connect to them from a device that is running Android 13. @@ -2210,7 +2540,7 @@ NCSDK-19942: HID samples do not work with Android 13 * :ref:`fast_pair_input_device` * Fast Pair configurations of the :ref:`nrf_desktop` application -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 v0-4-0 v0-3-0 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 v0-4-0 v0-3-0 NCSDK-26669: Reconnection with HID devices that have privacy enabled may not work on Android 14 If an Android 14 device is disconnected from the HID device without user intervention through the Bluetooth UI from Android settings (for example, due to a connection timeout caused by the HID device rebooting), the device faces issues. @@ -2380,7 +2710,7 @@ Reconnection issues after bonding .. rst-class:: v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 NCSDK-17883: Cannot build peripheral UART sample with security (:kconfig:option:`CONFIG_BT_NUS_SECURITY_ENABLED`) disabled - The :ref:`peripheral_uart` sample fails to build when the :kconfig:option:`BT_NUS_SECURITY_ENABLED` Kconfig option is disabled. + The :ref:`peripheral_uart` sample fails to build when the :kconfig:option:`CONFIG_BT_NUS_SECURITY_ENABLED` Kconfig option is disabled. **Workaround:** In :file:`main.c` file, search for the ``#else`` entry of the ``#if defined(CONFIG_BT_NUS_SECURITY_ENABLED)`` item and add an empty declaration of the ``conn_auth_info_callbacks`` structure, just after the similar empty definition of ``conn_auth_callbacks``. @@ -2395,7 +2725,7 @@ Antenna switching does not work on targets ``nrf5340dk_nrf5340_cpuapp`` and ``nr Bluetooth Mesh samples ====================== -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 NCSDK-26844: :ref:`ble_mesh_dfu_distributor` sample is not able to complete self-update When attempting to use the :ref:`ble_mesh_dfu_distributor` sample to perform a self-update, the DFU process is not completed successfully. @@ -2430,6 +2760,11 @@ NCSDK-21590: :ref:`bluetooth_mesh_sensor_client` sample does not compile for nRF Cellular samples ================ +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-30050: The :ref:`nrf_cloud_rest_fota` sample with experimental SMP FOTA support enabled crashes with a secure fault + This happens approximately one out of five times during an SMP FOTA update. + .. rst-class:: v2-6-2 v2-6-1 v2-6-0 IRIS-8456: Wi-Fi builds of the :ref:`nrf_cloud_multi_service` sample crash and reboot @@ -2447,9 +2782,9 @@ IRIS-7398: The :ref:`nrf_cloud_multi_service` sample does not support using the **Affected platforms:** nRF9161 -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 -IRIS-7381: :ref:`nrf_cloud_rest_cell_pos_sample` sample might attempt to take a neighbor cell measurement when a measurement is already in progress +IRIS-7381: :ref:`nrf_cloud_rest_cell_location` sample might attempt to take a neighbor cell measurement when a measurement is already in progress If cell information changes during a neighbor cell measurement, the sample will attempt to start a new measurement, resulting in warning and error log messages. **Affected platforms:** nRF9160, nRF9161 @@ -2496,6 +2831,29 @@ Matter samples The issues in this section are related to :ref:`matter_samples`. +.. rst-class:: v2-9-0 v2-8-0 + +KRKNWK-19806: RPU recovery fails on the nRF5340 DK with nRF7002 EK shield due to invalid MCUboot configuration + + **Affected platforms:** nRF5340, nRF7002 + + **Workaround:** Cherry-pick changes from PR #19826 in the `sdk-nrf`_ repository. + +.. rst-class:: v2-9-0 + +KRKNWK-19861: ICD DSLS does not work with the :ref:`matter_smoke_co_alarm_sample` sample + According to the sample's documentation the ICD DSLS can be enabled by setting the :kconfig:option:`CONFIG_CHIP_ICD_DSLS_SUPPORT` Kconfig option to ``y``. + Additionally, the ICD Management cluster's feature map has to be set to ``0xf`` in the sample's ``.zap`` file. + This piece of information is missing from the documentation. + It will be added in the next version. + +.. rst-class:: v2-8-0 + +KRKNWK-19691: Smoke CO Alarm sample does not have PM device enabled + This leads to not suspending QSPI, while it is not used, and increasing the device power consumption. + + **Workaround:** Set the :kconfig:option:`CONFIG_PM_DEVICE` Kconfig option to ``y`` in the sample's :file:`prj.conf` file. + .. rst-class:: v2-7-0 KRKNWK-19480: Lock sample does not allow for clearing the door lock user when using the schedules feature @@ -2503,7 +2861,7 @@ KRKNWK-19480: Lock sample does not allow for clearing the door lock user when us **Workaround:** Manually cherry-pick and apply commit with fix from main (commit hash: ``b60eb4900e62bb7c771397adb152552849052b18``). -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 +.. rst-class:: v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 KRKNWK-18242: Thermostat sample does support the AUTO system mode AUTO system mode is supported in a thermostat device but it is not reflected in the data model and the feature map indicates that AUTO system mode is not supported. @@ -2563,6 +2921,18 @@ NCSDK-20967: The :ref:`nrf_rpc_entropy_nrf53` sample does not work on the networ **Affected platforms:** nRF5340 +Peripheral samples +================== + +.. rst-class:: v2-8-0 v2-7-0 + +NCSDK-30284: The :ref:`radio_test` sample only transmits the first burst of data in duty-cycle mode on the 4 Mbit data rate + When the ``data_rate`` parameter is set to ``nrf_4Mbit_BT04`` or ``nrf_4Mbit_BT06``, sending the ``start_duty_cycle_modulated_tx`` command results in transmission of the first burst of data after which radio becomes inactive. + + **Affected platforms:** nRF54L15, nRF54H20 + + **Workaround:** For ``nrf_4Mbit_BT04`` or ``nrf_4Mbit_BT06`` data rates, use only the constant transmission command ``start_tx_modulated_carrier`` instead of the duty-cycle one. + Other samples ============= @@ -2590,7 +2960,7 @@ NCSDK-18847: :ref:`radio_test` sample does not build with support for Skyworks f When building a sample with support for a front-end module different from nRF21540, the sample uses a non-existing configuration to initialize TX power data. This causes a compilation error because the source file containing code for a generic front-end module is not included in the build. - **Workaround:** Do not use the :kconfig:option:`CONFIG_RADIO_TEST_POWER_CONTROL_AUTOMATIC` Kconfig option and replace ``CONFIG_GENERIC_FEM`` with ``CONFIG_MPSL_FEM_SIMPLE_GPIO`` in the :file:`CMakeLists.txt` file of the sample. + **Workaround:** Do not use the :kconfig:option:`CONFIG_RADIO_TEST_POWER_CONTROL_AUTOMATIC` Kconfig option and replace ``CONFIG_GENERIC_FEM`` with :kconfig:option:`CONFIG_MPSL_FEM_SIMPLE_GPIO` in the :file:`CMakeLists.txt` file of the sample. .. rst-class:: v2-3-0 @@ -2619,7 +2989,7 @@ NCSDK-13925: Build warning in the RF test samples when the nRF21540 EK support i **Affected platforms:** nRF5340, nRF21540 - **Workaround:** Change the parameter type in the :c:func:`nrf21540_tx_gain_set()` function in :file:`ncs/nrf/samples/bluetooth/direct_test_mode/src/fem/nrf21540.c` from :c:type:`uint8_t` to :c:type:`uint32_t`. + **Workaround:** Change the parameter type in the :c:func:`nrf21540_tx_gain_set` function in :file:`ncs/nrf/samples/bluetooth/direct_test_mode/src/fem/nrf21540.c` from :c:type:`uint8_t` to :c:type:`uint32_t`. .. rst-class:: v1-5-2 v1-5-1 v1-5-0 @@ -2639,7 +3009,7 @@ The issues in this section are related to :ref:`libraries`. Binary libraries ================ -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 NCSDK-26682: In the Verizon network, the :ref:`liblwm2m_carrier_readme` library fails to complete bootstrap process unless the same device has previously completed a bootstrap This is because one of the required pre-shared keys is not generated unless there is a pre-existing one in the modem. @@ -2676,7 +3046,7 @@ NCSDK-18746: The :ref:`liblwm2m_carrier_readme` library fails to complete non-se .. rst-class:: v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-3-1 v1-2-1 v1-2-0 NCSDK-12912: The :ref:`liblwm2m_carrier_readme` library does not recover if initial network connection fails - When the device is switched on, if :cpp:func:`lte_lc_connect()` returns an error at timeout, it will cause :cpp:func:`lwm2m_carrier_init()` to fail. + When the device is switched on, if the :c:func:`lte_lc_connect` function returns an error at timeout, it will cause ``lwm2m_carrier_init()`` to fail. Thus, the device will fail to connect to carrier device management servers. **Affected platforms:** nRF9160 @@ -2810,6 +3180,13 @@ NCSDK-15512: Modem traces retrieval incompatible with TF-M Libraries for networking ======================== +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +CIA-1400: :ref:`lib_nrf_cloud` FOTA and P-GPS downloads over CoAP might fail to resume + nRF Cloud FOTA and P-GPS downloads over CoAP might fail to resume at the correct file offset if the download is interrupted. + + **Workaround:** Disable the :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option to use HTTP for downloads instead. + .. rst-class:: v2-7-0 NCSDK-28046: LwM2M firmware update cannot resume push mode delta update @@ -2828,14 +3205,14 @@ NCSDK-26534: When :ref:`lib_lwm2m_client_utils` is used for downloading FOTA upd .. rst-class:: v2-7-0 -NCSDK-28192: Hardfault in coap_codec_agnss_encode +NCSDK-28192: Hardfault in :c:func:`coap_codec_agnss_encode` When using the :ref:`lib_nrf_cloud_coap` library, if the ``net_info`` field of the request parameter provided to the :c:func:`coap_codec_agnss_encode` is ``NULL``, a hardfault will occur. **Affected platforms:** nRF9160, nRF9161, nRF9151 ** Workaround:** Apply the fix from `sdk-nrf PR #16242`_. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 CIA-351: Connectivity issues with :ref:`lib_azure_iot_hub` If a ``device-bound`` message is sent to the device while it is in the LTE Power Saving Mode (PSM), the TCP connection will most likely be terminated by the server. @@ -2849,6 +3226,15 @@ CIA-351: Connectivity issues with :ref:`lib_azure_iot_hub` Bluetooth libraries and services ================================ +.. _ncsdk_30288: + +.. rst-class:: v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 v0-4-0 + +NCSDK-30288: The :c:func:`bt_hogp_rep_read` function of :ref:`hogp_readme` library does not forward ATT error code through the user callback + The library passes value of ``0`` to the user instead of the error code. + + **Workaround:** Manually cherry-pick and apply the commit with the fix from the ``main`` branch (commit hash: ``0d227d82bbdf56a3c066021fa6c323a00107fe6f``). + .. rst-class:: v2-4-3 v2-4-2 v2-4-1 v2-4-0 NCSDK-23315: The :ref:`bt_le_adv_prov_readme` has an incorrect range and default value for the :kconfig:option:`CONFIG_BT_ADV_PROV_FAST_PAIR_ADV_BUF_SIZE` Kconfig option @@ -2858,7 +3244,7 @@ NCSDK-23315: The :ref:`bt_le_adv_prov_readme` has an incorrect range and default **Workaround:** Manually cherry-pick and apply the commit with the fix from the ``main`` branch (commit hash: ``a8b668e82837295962348e9e681125c2ae11bb4e``). -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 NCSDK-23682: The Fast Pair Seeker might be unable to bond again after losing the bonding information multiple times If the :kconfig:option:`CONFIG_BT_SETTINGS_CCC_LAZY_LOADING` Kconfig option is disabled on the Fast Pair Provider side, the Fast Pair Seeker that uses the RPA address to connect with the Provider might be unable to bond again after losing the bonding information multiple times. @@ -2898,10 +3284,20 @@ NCSDK-15471: Compilation with :ref:`SUPL client ` library fails whe The time returned by :ref:`lib_date_time` library becomes incorrect after one week of uptime The time returned by :ref:`lib_date_time` library becomes incorrect after one week elapses. - This is due to an issue with clock_gettime() API. + This is due to an issue with ``clock_gettime()`` API. **Affected platforms:** nRF9160, nRF52840 +Security +======== + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-29559: KMU slots 0-2 cannot be used to store keys in nRF54L15 + The application cannot use KMU slots 0-2 to store keys in the nRF54L15. + The import of the keys will work but they will fail when used. + These slots can still be used to store the CRACEN IKG seed using the :kconfig:option:`CONFIG_CRACEN_IKG_SEED_KMU_SLOT` Kconfig option. + Subsystems ********** @@ -2912,7 +3308,12 @@ Build system The issues in this section are related to :ref:`app_build_system`. -.. rst-class:: v2-7-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-30119: For nRF54L15 SoC, dynamic partitioning for a project building with MCUboot's direct-xip mode is not supported + Static partition manager file is required for building such project. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 NCSDK-28495: Sysbuild runs CMake code before processing application :file:`sysbuild.cmake` When using a :file:`sysbuild.cmake` file to set configuration for images that have variants, this extra configuration might end up not being applied to the variant image, causing the images to be incompatible. @@ -2923,28 +3324,28 @@ NCSDK-28495: Sysbuild runs CMake code before processing application :file:`sysbu * If applying configuration to MCUboot with application secure boot enabled, also apply the configuration to ``s1_image``. * If applying configuration to the default image with application secure boot enabled and MCUboot disabled, also apply the configuration to ``s1_image``. -.. rst-class:: v2-7-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 NCSDK-28462: MCUboot signing configuration cannot be updated without pristine build When using :ref:`configuration_system_overview_sysbuild`, the MCUboot signing configuration cannot be updated in an already configured project. **Workaround:** Perform a :ref:`pristine build ` to change any of the MCUboot signing configuration. Do not update it using menuconfig, guiconfig or the nRF Kconfig GUI, and instead :ref:`provide it on the command line ` when configuring the application if it needs setting manually. -.. rst-class:: v2-7-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 NCSDK-28461: Sysbuild partition manager file changes cannot be propagated to builds unless they are pristine When using :ref:`configuration_system_overview_sysbuild` and a :ref:`partition_manager` file, the Partition Manager configuration for things such as MCUboot signing will not be updated if the Partition Manager configuration is changed in an already configured project. **Workaround:** Perform a :ref:`pristine build ` after changing configuration in Partition Manager files. -.. rst-class:: v2-7-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 NCSDK-28451: Sysbuild silently does not use relative path (relative to application config dir) user-specified (PM_STATIC_YML_FILE) static PM files When building an application using :ref:`configuration_system_overview_sysbuild` with a :ref:`static partition file ` specified using ``PM_STATIC_YML_FILE`` with a relative path, the relative path will be relative to the sysbuild folder in Zephyr, not to the application configuration directory, and the file will silently be ignored. **Workaround:** Use an absolute path when specifying the static partition file and ensure that the output shows the file as being used. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 NCSDK-20567: When building an application for MCUboot, the build system does not check whether the compiled application is too big for being an update image In this case the update cannot be applied, because the swap algorithm requires some free space in the secondary slot (even if the image fits inside the slot). @@ -2983,7 +3384,7 @@ NCSDK-9786: Wrong FLASH_PAGE_ERASE_MAX_TIME_US for the nRF53 network core **Affected platforms:** nRF5340 - **Workaround:** Increase ``FLASH_PAGE_ERASE_MAX_TIME_US`` (defined in :file:`ncs/zephyr/soc/arm/nordic_nrf/nrf53/soc.h`) from 44850UL to 89700UL (the same value as for the application core). + **Workaround:** Increase ``FLASH_PAGE_ERASE_MAX_TIME_US`` (defined in :file:`ncs/zephyr/soc/arm/nordic_nrf/nrf53/soc.h`) from ``44850UL`` to ``89700UL`` (the same value as for the application core). .. rst-class:: v1-4-2 v1-4-1 v1-4-0 @@ -3017,7 +3418,6 @@ KRKNWK-7827: Application build system is not aware of the settings partition You can use one of the following solutions: * :ref:`partition_manager` from |NCS| - see the page for all configuration options. - For example, for single image (without bootloader and with the settings partition used), set the :kconfig:option:`CONFIG_PM_SINGLE_IMAGE` Kconfig option to ``y`` and define the value for :kconfig:option:`CONFIG_PM_PARTITION_SIZE_SETTINGS_STORAGE` to the required settings storage size. * :ref:`Devicetree code partition ` from Zephyr. Set :kconfig:option:`CONFIG_USE_DT_CODE_PARTITION` Kconfig option to ``y``. Make sure that the code partition is defined and chosen correctly (``offset`` and ``size``). @@ -3070,9 +3470,9 @@ Missing :file:`CMakeLists.txt` You can `download this file `_ from the upstream Zephyr repository. After you add it, the file is automatically included by the build system. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 +.. rst-class:: v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 -NCSDK-29124: Cannot set the NSIB signing key using environment or command line value while using child image for a project. +NCSDK-29124: Cannot set the NSIB signing key using environment or command line value while using child image for a project Environment value ``SB_SIGNING_KEY_FILE`` and command line value passing under ``-DSB_SIGNING_KEY_FILE=`` are ignored by build system. Instead, an auto-generated key is used for signing. @@ -3088,7 +3488,7 @@ The issues in this section are related to :ref:`app_bootloaders`. .. rst-class:: v2-5-3 v2-5-2 v2-5-1 v2-5-0 NCSDK-24203: If fault injection hardening (FIH) is enabled, a bug is observed in the :c:func:`boot_image_check_hook` function - Due to this, multicore applications cannot be booted for nRF5340 MCUboot builds with simultaneous multimage update enabled. + Due to this, multicore applications cannot be booted for nRF5340 MCUboot builds with simultaneous multi-image update enabled. **Affected platforms:** nRF5340, Thingy:53 @@ -3104,7 +3504,7 @@ NCSDK-23761: MCUboot fails to boot when both the :kconfig:option:`CONFIG_MCUBOOT **Workaround:** To fix the issue, disable either the :kconfig:option:`CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION` or :kconfig:option:`CONFIG_BOOT_FIH_PROFILE_LOW` Kconfig option in MCUboot. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 SHEL-1352: Incorrect base address used in the OTP TX trim coefficients Incorrect base address used for TX trim coefficients in the One-Time Programmable (OTP) memory results in transmit power deviating by +/- 2 dB from the target value. @@ -3169,7 +3569,54 @@ DFU and FOTA The issues in this section are related to :ref:`app_dfu`. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 + +NCSDK-30976: [suit] Update candidate envelope with oversized manifest are not rejected + An update candidate envelope with a manifest that is too large to fit into its applicable storage slot is still attempted to be installed. + This results in mismatches between digests for images or dependencies, leading to boot failure. + + **Affected platforms:** nRF54H20 + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-30161 Combination of :kconfig:option:`CONFIG_ASSERT`, :kconfig:option:`CONFIG_SOC_NRF54H20_GPD`, and external flash causes an assertion during boot time + A combination of these three will cause an assert. + Disabling one of them will fix the issue. + + **Affected platforms:** nRF54H20 + + **Workaround:** Set :kconfig:option:`CONFIG_ASSERT` to ``n`` or :kconfig:option:`CONFIG_SOC_NRF54H20_GPD` to ``n``. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-30117: [suit] It is possible to declare a MEM component pointing to a memory region not assigned to particular core + An update candidate with envelope for APP/RAD containing declared MEM component that points to memory range outside of space assigned to a particular core is accepted and installed. + + **Affected platforms:** nRF54H20 + + **Workaround:** Declare MEM components pointing to correct regions. + This issue will be fixed in further releases. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-29682: [suit] cose-alg-sha-512 is not supported + SUIT envelope using digest with algorithm cose-alg-sha-512 is rejected due to unsupported algorithm. + + **Affected platforms:** nRF54H20 + + **Workaround:** Use sha-256 until next release of Nordic binaries where this issue will be fixed. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-28241: DFU transfer starts and fails if previous transfer is still in progress + Since the mobile application implements the :guilabel:`Cancel` button, it is possible to restart the transfer on the mobile phone even if the first transfer is still in progress (image fetcher waits for a timeout event or the external flash is being erased, which takes ~5 seconds). + As a result, such restarted transfer fails due to state mismatch in the DFU cache module. + + **Affected platforms:** nRF54H20 + + **Workaround:** Repeat DFU transfer attempt - the next transfer attempt will succeed. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 NCSDK-21790: Errors during DFU when using nRF Connect for mobile app MCUmgr is incorrectly reporting an error when DFU is performed using the nRF Connect for mobile app. @@ -3214,7 +3661,7 @@ NCSDK-18422: Serial recovery fails to write to slots in QSPI NCSDK-18108: ``s1`` variant image configuration mismatch If an image with an ``s1`` variant is configured and the ``s0`` image configuration is changed using menuconfig, these changes will not be reflected in the ``s1`` configuration, which can lead to a differing build configuration or the build does not upgrade. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 NCSDK-11308: Powering off device immediately after serial recovery of the nRF53 network core firmware results in broken firmware The network core will not be able to boot if the device is powered off too soon after completing a serial recovery update procedure of the network core firmware. @@ -3240,9 +3687,9 @@ NCSDK-11432: DFU: Erasing secondary slot returns error response NCSDK-6238: Socket API calls might hang when using Download client When using the :ref:`lib_download_client` library with HTTP (without TLS), the application might not process incoming fragments fast enough, which can starve the :ref:`nrfxlib:nrf_modem` buffers and make calls to the Modem library hang. - Samples and applications that are affected include those that use :ref:`lib_download_client` to download files through HTTP, or those that use :ref:`lib_fota_download` with modem updates enabled. + Samples and applications that are affected include those that use the :ref:`lib_download_client` library to download files through HTTP, or those that use :ref:`lib_fota_download` with modem updates enabled. - **Workaround:** Set :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_RANGE_REQUESTS`. + **Workaround:** Set :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_RANGE_REQUESTS` with the :ref:`lib_download_client` library. .. rst-class:: v1-1-0 @@ -3254,7 +3701,7 @@ Jobs not received after reset .. rst-class:: v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 NCSDK-24305: fota_download library sends FOTA_DOWNLOAD_EVT_FINISHED when unable to connect - The :ref:`lib_download_client` library does not resume a download if the device cannot connect to a target server. + The :ref:`lib_download_client` library do not resume a download if the device cannot connect to a target server. This causes the :ref:`lib_fota_download` library to incorrectly assume that the download has completed. **Workaround:** Set the :kconfig:option:`CONFIG_FOTA_SOCKET_RETRIES` Kconfig option to ``0``. @@ -3331,7 +3778,32 @@ MCUboot The issues in this section are related to :ref:`MCUboot `. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-30867: KMU keys are not protected against being revoked by the application that is running in secure mode + You must provision *locked* keys if you cannot trust the application running in secure mode. + + **Affected platforms:** nRF54L Series + +.. rst-class:: v2-8-0 + +NCSDK-30263: direct-xip with revert does not work on nRF54L15 + The revert mechanism in direct-xip mode does not work on nRF54L15 devices. + + **Affected platforms:** nRF54L15 + + **Workaround:** Manually cherry-pick the commit ``ff0e8fabe1566349dbfd1786b31b325b46be205a`` from the main branch of the ``sdk-nrf`` repository. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-31066: MCUboot updates take a long time + The current implementation of MCUboot does not optimally utilize RRAM, which causes longer update times. + + **Affected platforms:** nRF54L Series + + **Workaround:** Set MCUBoot's Kconfig option :kconfig:option:`CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE` to ``32``. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 NCSDK-20567: Partitioning limitation with MCUboot swap move The swap algorithm in MCUboot (especially the default one - swap_move) requires some extra space to perform the swap move operation, so not entire partition space can be spent for the image. @@ -3342,7 +3814,7 @@ NCSDK-20567: Partitioning limitation with MCUboot swap move Typically, for the nRF52, nRF53, and nRF91 devices, the size of the application must be less than ``mcuboot_primary_size - 80 - (mcuboot_primary_size/ 4096) * 12 -4096``. Some additional margin is suggested. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 NCSIDB-1194: MCUboot not properly disabling UARTE instances Increased power consumption may be observed (400 µA). @@ -3372,7 +3844,7 @@ Crypto The issues in this section are related to :ref:`nrfxlib:crypto`. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 NSCDK-26412: Updating to TF-M 2.0 using Mbed TLS 3.5.2 introduced a regression in resolving legacy crypto configurations from ``PSA_WANT_ALG_XXXX`` configurations Wi-Fi samples enabling OpenThread are affected by this bug as well as possible use cases with a dependency on some legacy features while using PSA crypto APIs. @@ -3391,12 +3863,12 @@ NCSDK-25144: Enabling Kconfig option :kconfig:option:`CONFIG_SECURE_BOOT_CRYPTO` .. rst-class:: v2-4-3 v2-4-2 v2-4-1 v2-4-0 -NCSDK-22091: Selecting both :kconfig:option:`NORDIC_SECURITY_BACKEND` and :kconfig:option:`PSA_CORE_BUILTIN` causes a build failure - Selecting both :kconfig:option:`NORDIC_SECURITY_BACKEND` and :kconfig:option:`PSA_CORE_BUILTIN` results in a build failure due to undefined references to different structs. +NCSDK-22091: Selecting both :kconfig:option:`CONFIG_NORDIC_SECURITY_BACKEND` and :kconfig:option:`CONFIG_PSA_CORE` causes a build failure + Selecting both :kconfig:option:`CONFIG_NORDIC_SECURITY_BACKEND` and :kconfig:option:`CONFIG_PSA_CORE` results in a build failure due to undefined references to different structs. **Workaround:** Manually define ``PSA_CORE_BUILTIN`` in the file :file:`nrf_security/configs/legacy_crypto_config.h.template`. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 NCSDK-22593: Selecting :kconfig:option:`CONFIG_PSA_WANT_ALG_CCM` without :kconfig:option:`CONFIG_MBEDTLS_AES_C` causes a build failure Selecting :kconfig:option:`CONFIG_PSA_WANT_ALG_CCM` without :kconfig:option:`CONFIG_MBEDTLS_AES_C` results in a build failure due to unsatisfied dependencies in :file:`check_config.h`. @@ -3559,7 +4031,18 @@ Modem library The issues in this section are related to :ref:`nrfxlib:nrf_modem`. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-29993: The :c:func:`nrf_send` function with ``NRF_MSG_WAITACK`` flag will incorrectly set the ``errno`` to ``0xBAADBAAD`` if the socket is closed before the send operation finishes + This will trigger an assert in :c:func:`nrf_modem_os_errno_set` if asserts are enabled. + + **Affected platforms:** nRF9161, nRF9151 + + **Affected modem firmware versions:** v2.0.2 + + **Workaround:** Disable asserts or remove the assert in :c:func:`nrf_modem_os_errno_set`. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 NCSDK-10106: Elevated current consumption when using applications without :ref:`nrfxlib:nrf_modem` on nRF9160 When running applications that do not enable :ref:`nrfxlib:nrf_modem` on nRF9160 with build code B1A, current consumption will stay at 3 mA when in sleep. @@ -3580,8 +4063,8 @@ NCSDK-13360: The :c:func:`nrf_recv` function crashes if closed by another thread .. rst-class:: v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 -NCSDK-6073: ``nrf_send`` is blocking - The :cpp:func:`nrf_send` function in the :ref:`nrfxlib:nrf_modem` might be blocking for several minutes, even if the socket is configured for non-blocking operation. +NCSDK-6073: :c:func:`nrf_send` is blocking + The :c:func:`nrf_send` function in the :ref:`nrfxlib:nrf_modem` might be blocking for several minutes, even if the socket is configured for non-blocking operation. The behavior depends on the cellular network connection. **Affected platforms:** nRF9160 @@ -3606,19 +4089,28 @@ Multiprotocol Service Layer (MPSL) The issues in this section are related to :ref:`nrfxlib:mpsl`. +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 + +UARTE will have a frequency error beyond the specific limits + In low temperatures and if :ref:`nrfxlib:mpsl` (MPSL) (Bluetooth LE, 802.15.4) is not used, UARTE will have a frequency error beyond the specific limits. + + **Affected platforms:** nRF54L15 + + **Workaround:** Enable LFXO before using UART. + .. rst-class:: v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 DRGN-22314: MPSL can encounter fatal errors and crashes when used without SoftDevice Controller or the :ref:`nrfxlib:nrf_802154` This happens because of the of the allocation functions in the files :file:`nrfx_ppi.h` and :file:`nrfx_dppi.h` can allocate channels reserved by MPSL. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 DRGN-18247: Assertion with :c:enumerator:`MPSL_CLOCK_HF_LATENCY_BEST` When setting the ramp-up time of the high-frequency crystal oscillator with :c:enumerator:`MPSL_CLOCK_HF_LATENCY_BEST`, an assert in MPSL occurs. **Workaround:** Use :c:enumerator:`MPSL_CLOCK_HF_LATENCY_TYPICAL` instead of :c:enumerator:`MPSL_CLOCK_HF_LATENCY_BEST` when setting the time it takes for the HFCLK to ramp up. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 DRGN-15979: :kconfig:option:`CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC_CALIBRATION` must be set when :kconfig:option:`CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC` is set MPSL requires RC clock calibration to be enabled when the RC clock is used as the Low Frequency clock source. @@ -3629,7 +4121,7 @@ DRGN-14153: Radio Notification power performance penalty The Radio Notification feature has a power performance penalty proportional to the notification distance. This means an additional average current consumption of about 600 µA for the duration of the radio notification. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 KRKNWK-8842: MPSL does not support nRF21540 revision 1 or older The nRF21540 revision 1 or older is not supported by MPSL. @@ -3687,7 +4179,7 @@ DRGN-15223: :kconfig:option:`CONFIG_SYSTEM_CLOCK_NO_WAIT` is not supported for n .. rst-class:: v1-4-2 v1-4-1 DRGN-15176: :kconfig:option:`CONFIG_SYSTEM_CLOCK_NO_WAIT` is ignored when Low Frequency Clock is started before initializing MPSL - If the application starts the Low Frequency Clock before calling :c:func:`mpsl_init()`, the clock configuration option :kconfig:option:`CONFIG_SYSTEM_CLOCK_NO_WAIT` has no effect. + If the application starts the Low Frequency Clock before calling the :c:func:`mpsl_init` function, the clock configuration option :kconfig:option:`CONFIG_SYSTEM_CLOCK_NO_WAIT` has no effect. MPSL will wait for the Low Frequency Clock to start. **Workaround:** When :kconfig:option:`CONFIG_SYSTEM_CLOCK_NO_WAIT` is set, do not start the Low Frequency Clock. @@ -3696,7 +4188,7 @@ DRGN-15176: :kconfig:option:`CONFIG_SYSTEM_CLOCK_NO_WAIT` is ignored when Low Fr DRGN-15064: External Full swing and External Low swing not working Even though the MPSL Clock driver accepts a Low Frequency Clock source configuration for External Full swing and External Low swing, the clock control system is not configured correctly. - For this reason, do not use :c:macro:`CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING` and :c:macro:`CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING`. + For this reason, do not use :kconfig:option:`CLOCK_CONTROL_NRF_K32SRC_EXT_FULL_SWING` and :kconfig:option:`CLOCK_CONTROL_NRF_K32SRC_EXT_LOW_SWING`. .. rst-class:: v1-5-0 v1-4-2 v1-4-1 v1-4-0 @@ -3710,6 +4202,30 @@ DRGN-11059: Front-end module API not implemented for SoftDevice Controller The issues in this section are related to :ref:`nrfxlib:nrf_802154`. In addition to the known issues listed here, see also :ref:`802.15.4 Radio driver limitations ` for permanent limitations. +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +KRKNWK-19574: nRF 802.15.4 Radio Driver stuck in ``RADIO RXDISABLE`` state + The nRF 802.15.4 Radio Driver might get stuck in the function :c:func:`wait_until_radio_disabled` while waiting for the radio peripheral transition from state ``RXDISABLE`` to ``DISABLED``. + When used with MPSL, this issue might cause a crash caused by MPSL assertion failure. + This phenomenon was observed very rarely during stress testing lasting several hours on the nRF54L15 DK v0.8.1. + The root cause is not known. + +**Affected platforms:** nRF54L Series + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +KRKNWK-19689: nRF 802.15.4 Radio Driver transmits frames without ensuring ``CLOCK.EVENTS_XOTUNED`` + This issue affects only these transmissions that are started from sleep state and are not preceded by an automatic CCA operation. + This includes the transmission of frames without CCA, continuous carriers, and modulated carriers. + + * For transmissions from a sleep state but preceded with automatic CCA operation, the XO tuning happens in parallel with CCA operation and does not affect transmission. + * For transmissions of ACK frames generated automatically after receiving a frame, this issue does not occur. + * For transmissions from states other than sleep, this issue does not occur. + +**Affected platforms:** nRF54L Series + +**Workaround:** Transmit frames preceded by CCA operation or switch to a receive state before transmission. + .. rst-class:: v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 KRKNWK-18589: Timestamps for delayed operations triggering very shortly after a sleep request may be very inaccurate @@ -3781,6 +4297,106 @@ SoftDevice Controller The issues in this section are related to :ref:`nrfxlib:softdevice_controller`. In addition to the known issues listed here, see also :ref:`softdevice_controller_limitations` for permanent limitations. +.. rst-class:: v2-8-0 + +DRGN-23776: Sending CIS packets with invalid MIC + When the CIS central running on an nRF5340 device is sending encrypted ISO packets, the MIC may be invalid. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 + +DRGN-22443: A rare assert when disabling a periodic advertising set with responses + In some rare cases, the controller can assert when disabling a periodic advertising set with responses. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 + +DRGN-22441: The length byte of the HCI packet could be incorrect + This could happen when the packet contains an LE BIG Sync Established event or LE BIG Complete event with status not equal to success. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 + +DRGN-22652: Assert when receiving on the S8 Coded PHY + This could happen in a connection where link peer device is transmitting on S8 Coded PHY. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 + +DRGN-22686: Missing truncated advertising report + The extended scanner would not generate a truncated advertising report after the coexistence interface aborted the reception of an AUX_CHAIN_IND packet. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 + +DRGN-22678: A very rare issue where the controller stopped generating advertising reports + On nRF52 and nRF53 Series devices, this would happen at least one hour after the scanner started. + On nRF54L and nRF54H Series devices, this would occur immediately after the scanner started. + It would only happen when one of the following applies: + + * There was another central-like scheduling activity running. + Examples of roles with such activities are the ACL central, periodic advertiser, isochronous broadcaster, and the CIS central. + This activity was configured with an event length or event spacing equal or greater than the scan interval. + This is typically only true for use cases where the application enables isochronous channels or uses very short scan windows. + * The scanner was configured with scan window equal to scan interval (continuous scanning). + * The central-like scheduling activity required less than one ms to complete at the point in time where the scanner started. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 + +DRGN-22230: A rare issue where the scanner would be stuck in the synchronizing state after failing to receive an AUX_ADV_IND packet + This could only happen when the corresponding ADV_EXT_IND packet contains a resolvable address, private address resolution is enabled, and the periodic advertising list is not used. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 + +DRGN-22705: The controller could generate the LE Advertising Set Terminated event one event sooner than expected + This could only happen when all of the following apply: + + * A non-zero ``Max_Extended_Advertising_Events`` parameter was used in the LE Set Extended Advertising Enable command. + * Other ongoing activities in the controller prevented the first advertising event from taking place when the advertising set was created. + +.. rst-class:: v2-7-0 + +DRGN-22930: The SoftDevice Controller may de-reference a NULL pointer + This can occur when using the vendor-specific HCI command ``Zephyr Write TX Power Level`` for a connection. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 + +DRGN-22879: The Central could fail to receive the last packet in an isochronous event + This could only happen if the Connected Isochronous Stream Creation procedure was initiated by the host before the Encryption Start procedure completed. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 + +DRGN-23002: An assert could happen when using the coexistence interface + This could happen when any of the following controller activities were ongoing: + + * Isochronous Broadcaster + * Connected Isochronous channel in the peripheral role + * Periodic Sync with Responses + +.. rst-class:: v2-7-0 + +DRGN-23291: LE Power Control was not being used for CIS + This could happen when the CIS was not the first CIS in the CIG. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 + +DRGN-23204: The SoftDevice Controller in the peripheral role could terminate a connection due to a MIC failure during a valid encryption start procedure + This could only happen if the LL_ENC_RSP packet was corrupted due to on-air interference. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 + +DRGN-23586: The received unframed Isochronous SDUs were not reported to be an SDU interval apart + This could happen when the ISO interval is greater than the SDU interval and multiple SDUs can be received in a single ISO interval. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 + +DRGN-23693: Wrong sleep clock accuracy + The sleep clock accuracy communicated to the peer is too inaccurate if MPSL is initialized with a low frequency clock accuracy better than 20 ppm. + +.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 + +DRGN-22036: A rare issue in the controller that could lead to a bus fault + This could only happen when all of the following conditions are met: + + * The host was too slow at pulling HCI events. + * One or more HCI events were masked in the controller. + * The controller was raising ACL or ISO data to the host. + .. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 DRGN-22633: The VS Set Connection Event Trigger command does not always trigger the provided task @@ -3790,7 +4406,7 @@ DRGN-22633: The VS Set Connection Event Trigger command does not always trigger .. rst-class:: v2-6-2 v2-6-1 v2-6-0 -DRGN-22024: The controller might assert when the peripheral receives a connection update indication. +DRGN-22024: The controller might assert when the peripheral receives a connection update indication This only occurs when the central uses a wide receive window for the connection update, and both sends at the end of the receive window and sends a lot of data in the connection event with the connection update instant. .. rst-class:: v2-6-2 v2-6-1 v2-6-0 @@ -3853,7 +4469,7 @@ DRGN-21962: Assert when using SPI FEM with Coded PHY on nRF53 Series devices **Affected platforms:** nRF5340, Thingy:53 -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 DRGN-21293: The LE Read ISO TX Sync command is implemented according to the raised errata ES-23138 In ES-23138, the return parameter ``TX_Time_Stamp`` is used as the SDU synchronization reference of the SDU previously scheduled for transmission. @@ -3910,7 +4526,7 @@ DRGN-21020: The continuous extended scanner sometimes stops generating advertisi .. rst-class:: v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 -DRGN-20956: Rare assert when terminating the Periodic Sync with Responses. +DRGN-20956: Rare assert when terminating the Periodic Sync with Responses In rare cases, when a Periodic Sync with Responses is being terminated while it is waiting for a sync to a Periodic Advertiser with Responses, the controller can assert. .. rst-class:: v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 @@ -3961,7 +4577,7 @@ DRGN-17562: One of the LE Transmit Power Reporting Events might not be reported When multiple LE Transmit Power Reporting Events are generated at the same time for the same PHY, one of these events will be missed. This will occur only when there are simultaneous remote and local power level changes on the same PHY. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 DRGN-19039: Multirole advertiser not seen by peer in some cases This can happen when the controller attempts to reschedule the advertising events due to scheduling conflicts with the scanner or initiator and both of the following apply: @@ -4064,7 +4680,7 @@ DRGN-18655: Wrongly set the address if calling :c:func:`bt_ctlr_set_public_addr` DRGN-18568: Using :kconfig:option:`CONFIG_MPSL_FEM` Kconfig option lowers the value of radio output power The actual value is lower than the default one in case the :kconfig:option:`CONFIG_BT_CTLR_TX_PWR_ANTENNA` or :kconfig:option:`CONFIG_BT_CTLR_TX_PWR` Kconfig options are used together with the :kconfig:option:`CONFIG_MPSL_FEM` Kconfig option. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 DRGN-16013: Initiating connections over extended advertising is not supported when external radio coexistence and FEM support are enabled The initiator can assert when initiating a connection to an extended advertiser when both external radio coexistence and FEM are enabled. @@ -4169,7 +4785,7 @@ DRGN-16650: Undefined behavior when extended scanning is enabled .. rst-class:: v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 -DRGN-16394: The host callback provided to :c:func:`sdc_enable()` is always called after every advertising event +DRGN-16394: The host callback provided to :c:func:`sdc_enable` is always called after every advertising event This will cause slightly increased power consumption. .. rst-class:: v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 @@ -4306,7 +4922,7 @@ DRGN-15531: The coding scheme provided by the LE Set PHY HCI Command is ignored .. rst-class:: v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 -DRGN-15758: The controller might still have pending events after :c:func:`sdc_hci_evt_get()` returns false +DRGN-15758: The controller might still have pending events after :c:func:`sdc_hci_evt_get` returns false This will only occur if the host has masked out events. .. rst-class:: v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 @@ -4341,7 +4957,7 @@ DRGN-15465: Corrupted advertising data when :kconfig:option:`CONFIG_BT_EXT_ADV` DRGN-15475: Samples might not initialize the SoftDevice Controller HCI driver correctly Samples using both the advertising and the scanning state, but not the connected state, fail to initialize the SoftDevice Controller HCI driver. - As a result, the function :c:func:`bt_enable()` returns an error code. + As a result, the function :c:func:`bt_enable` returns an error code. **Workaround:** Manually enable :kconfig:option:`CONFIG_SOFTDEVICE_CONTROLLER_MULTIROLE` for the project configuration. @@ -4468,7 +5084,7 @@ Assert risk after performing a DLE procedure .. rst-class:: v1-0-0 No data issue when connected to multiple devices - :c:func:`hci_data_get()` might return "No data available" when there is data available. + :c:func:`hci_data_get` might return "No data available" when there is data available. This issue will only occur when connected to multiple devices at the same time. .. rst-class:: v1-0-0 @@ -4564,14 +5180,29 @@ Trusted Firmware-M (TF-M) The issues in this section are related to the TF-M implementation in the |NCS|. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 + +NCSDK-29095: Writing assets to NVM using TF-M causes increased interrupt latencies + Writes to NVM provoke increased latencies even for the highest-priority interrupts. + When TF-M is used (``*/ns`` board targets), writes to NVM made by the secure image can disturb the normal flow of operations happening on the non-secure image. + + This includes the SoftDevice Controller on the nRF54L15 DK. + Its asserts may be triggered when the interrupt latency is too high, which will result in fatal errors. + The interrupt latency increases are much higher on the nRF53 and nRF91 Series devices (~80ms) compared to the nRF54L15 (~100us). + Writes to NVM happen on the secure image when writing assets to the Internal Trusted Storage (ITS) and the Protected Storage (PS). + + **Affected platforms:** nRF54L15, nRF5340, nRF91 Series + + **Workaround:** Write persistent assets using the PSA APIs only when there are no ongoing time-critical operations. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 CIA-1182: TF-M flash partition overflow When building for Thingy:91 and enabling debug optimizations (or enabling Debug build in the VS code extension), the TF-M flash partition will overflow. **Affected platforms:** Thingy:91 - **Workaround:**: Set the :kconfig:option:`CONFIG_TFM_CMAKE_BUILD_TYPE_MINISIZEREL` to ``y``. + **Workaround:** Set the :kconfig:option:`CONFIG_TFM_CMAKE_BUILD_TYPE_MINSIZEREL` to ``y``. .. rst-class:: v2-5-0 @@ -4624,7 +5255,7 @@ NRFJPROG-454: TF-M might fail to reset when using nrfjprog version 10.22.x on nR nrfjprog -f nrf91 --debugreset -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 NCSDK-18321: TF-M PSA architecture tests do not build with CMake v3.25.x The :ref:`tfm_psa_test` fails to build with CMake version 3.25.x with missing header files. @@ -4672,7 +5303,7 @@ NCSDK-19536: TF-M does not compile when the board is missing a ``uart1`` node an .. rst-class:: v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 NCSDK-15909: TF-M failing to build with Zephyr SDK 0.14.2 - TF-M may fail to build due to flash overflow with Zephyr SDK 0.14.2 when ``TFM_PROFILE_TYPE_NOT_SET`` is set to ``y``. + TF-M may fail to build due to flash overflow with Zephyr SDK 0.14.2 when :kconfig:option:`CONFIG_TFM_PROFILE_TYPE_NOT_SET` is set to ``y``. **Workaround:** Use one of the following workarounds: @@ -4732,7 +5363,7 @@ NCSDK-12483: Missing debug symbols NCSDK-12342: Potential SecureFault exception while accessing protected storage When accessing protected storage, a SecureFault exception is sometimes triggered and execution halts. -.. rst-class:: v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 NCSDK-11195: Build errors when enabling :kconfig:option:`CONFIG_BUILD_WITH_TFM` option Enabling the :kconfig:option:`CONFIG_BUILD_WITH_TFM` Kconfig option in SES project configuration or using ``west -t menuconfig`` results in build errors. @@ -4749,9 +5380,9 @@ NCSDK-12306: Enabling debug configuration causes usage fault on nRF9160 .. rst-class:: v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 NCSDK-14590: Usage fault in interrupt handlers when using FPU extensions - When the :kconfig:option:`ARM_NONSECURE_PREEMPTIBLE_SECURE_CALLS` Kconfig option is disabled, a usage fault can be triggered when an interrupt handler uses FPU extensions while interrupting the secure processing environment. + When the :kconfig:option:`CONFIG_ARM_NONSECURE_PREEMPTIBLE_SECURE_CALLS` Kconfig option is disabled, a usage fault can be triggered when an interrupt handler uses FPU extensions while interrupting the secure processing environment. - **Workaround:** Do not disable the :kconfig:option:`ARM_NONSECURE_PREEMPTIBLE_SECURE_CALLS` option when the :kconfig:option:`FPU` option is enabled. + **Workaround:** Do not disable the :kconfig:option:`CONFIG_ARM_NONSECURE_PREEMPTIBLE_SECURE_CALLS` option when the :kconfig:option:`FPU` option is enabled. .. rst-class:: v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 @@ -4802,7 +5433,7 @@ NCSDK-20104: MCUboot configuration can prevent application from being able to ru **Affected platforms:** nRF52840, nRF52833, nRF52830, nRF52820 - **Workaround:** Enable :kconfig:option:`CONFIG_MCUBOOT_CLEANUP_ARM_CORE`` in MCUboot configuration. + **Workaround:** Enable :kconfig:option:`CONFIG_MCUBOOT_CLEANUP_ARM_CORE` in MCUboot configuration. .. rst-class:: v2-5-3 v2-5-2 v2-5-1 v2-5-0 @@ -4836,8 +5467,8 @@ NCSIDB-840: Compilation of I2C TWIM driver fails when PINCTRL is disabled .. rst-class:: v1-9-2 v1-9-1 v1-9-0 -The time returned by clock_gettime() API becomes incorrect after one week of uptime - The time returned by POSIX clock_gettime() API becomes incorrect after one week elapses. +The time returned by ``clock_gettime()`` API becomes incorrect after one week of uptime + The time returned by POSIX ``clock_gettime()`` API becomes incorrect after one week elapses. This is due to an overflow in the uptime conversion. .. rst-class:: v1-4-2 v1-4-1 v1-4-0 @@ -4892,6 +5523,40 @@ NCSDK-6832: SMP Server sample fails upon initialization Other issues ************ +.. rst-class:: v2-9-0-nRF54H20-rc1 + +KRKNWK-31013: Issues with ``nrfutil trace`` and missing STM stream information on the nRF54H20 SoC + While running ``nrfutil trace`` without resetting any domain, the tool can synchronize against Coresight packets and the underlying STPv2 protocol. + However, the stream decoder receives packets that lack clear indicators for the start or end of the associated packet. + This issue results in incomplete packet decoding and potential data loss. + + **Affected platforms:** nRF54H20 + +.. rst-class:: v2-9-0-nRF54H20-rc1 + +KRKNWK-31038: Instruction trace reliability issues during ETM debugging on the nRF54H20 SoC + During ETM debugging, disconnecting and reconnecting to the device often causes the instruction trace to fail to appear reliably. + Multiple resets are required to restore functionality. + + **Affected platforms:** nRF54H20 + + .. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-28152: TPIU Trace Signal Skew on the nRF54H20 SoC + Segger TPIU tracing on the nRF54H20 DK encounters instability due to a minimal skew between clock and data signals. + This skew causes unreliable trace performance, resulting in intermittent data capture. + + **Workaround:** Adjusting the TPIU trace delay on SEGGER's J-Trace Pro can improve signal stability, enhancing ETM capture reliability. + For more information on adjusting trace timing, refer to the SEGGER Wiki's `Adjusting Trace Timings and General Troubleshooting`_ section. + +.. rst-class:: v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 + +NCSDK-30095: Cannot flash a device if the ``nrfutil device x-adac-discovery`` command is called before flashing + It leaves the device into ``RomOperation`` mode. + + **Workaround:** The issue is fixed in ``nrfutil-device`` version 2.7.5. + Update the tool version. + .. rst-class:: v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 v1-5-2 v1-5-1 v1-5-0 v1-4-2 v1-4-1 v1-4-0 v1-3-2 v1-3-1 v1-3-0 v1-2-1 v1-2-0 v1-1-0 v1-0-0 Receive error with large packets @@ -4929,7 +5594,7 @@ KRKNWK-17343: Accessories become significantly slower when some data pairs in th As a result, the accessory does not pass the certification test cases exceeding the maximum operation time (for example, TCT012, TCT022 and TCT023). **Workaround:** Enable the NVS cache by setting the Kconfig options :kconfig:option:`CONFIG_NVS_LOOKUP_CACHE` to ``y`` and :kconfig:option:`CONFIG_NVS_LOOKUP_CACHE_SIZE` to ``512`` (requires additional 2 KB of RAM). - Additional optimization can be enabled by setting the Kconfig options :kconfig:option:`CONFIG_SETTINGS_NVS_NAME_CACHE` to ``y`` and :kconfig:option:`SETTINGS_NVS_NAME_CACHE_SIZE` to ``512`` (requires additional 2 KB of RAM). + Additional optimization can be enabled by setting the Kconfig options :kconfig:option:`CONFIG_SETTINGS_NVS_NAME_CACHE` to ``y`` and :kconfig:option:`CONFIG_SETTINGS_NVS_NAME_CACHE_SIZE` to ``512`` (requires additional 2 KB of RAM). Alternatively, you can manually cherry-pick and apply commit with fix from ``main`` (commit hash: ``216d6588d069390d2c5291560002ca47684fbfc0``). .. rst-class:: v2-3-0 v2-2-0 @@ -4942,7 +5607,7 @@ KRKNWK-16503: OTA DFU using the iOS Home app (over UARP) does not work on the nR **Workaround:** Manually cherry-pick and apply commit from the main branch (commit hash: ``09874a36edf21ced7d3c9356de07df6f0ff3d457``). -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 KRKNWK-13010: Dropping from Thread to Bluetooth LE takes too long Dropping from Thread to Bluetooth LE, after a Thread Border Router is powered off, takes much longer for FTD accessories than estimated in TCT030 test case. @@ -4979,14 +5644,14 @@ NCSDK-13947: Net core downgrade prevention does not work on nRF5340 KRKNWK-13607: Stateless switch application crashes upon factory reset When running Thread test suit on the stateless switch application, the CI crashes upon factory reset. -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 KRKNWK-13249: Unexpected assertion in HAP Bluetooth Peripheral Manager When Bluetooth LE layer emits callback with a connect or disconnect event, one of its parameters is an underlying Bluetooth LE connection object. On rare occasions, this connection object is no longer valid by the time it is processed in HomeKit, and this results in assertion. There is no proven workaround yet. -.. rst-class:: wontfix v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 +.. rst-class:: wontfix v2-9-0-nRF54H20-rc1 v2-9-0 v2-8-0 v2-7-0 v2-6-2 v2-6-1 v2-6-0 v2-5-3 v2-5-2 v2-5-1 v2-5-0 v2-4-4 v2-4-3 v2-4-2 v2-4-1 v2-4-0 v2-3-0 v2-2-0 v2-1-4 v2-1-3 v2-1-2 v2-1-1 v2-1-0 v2-0-2 v2-0-1 v2-0-0 v1-9-2 v1-9-1 v1-9-0 v1-8-0 v1-7-1 v1-7-0 v1-6-1 v1-6-0 KRKNWK-11729: Stateless switch event characteristic value not handled according to specification in Bluetooth LE mode The stateless programmable switch application does not handle the value of the stateless switch event characteristic in the Bluetooth LE mode according to the specification. diff --git a/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_application.rst b/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_application.rst index c45d1cb7d40f..7c7b49186ca1 100644 --- a/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_application.rst +++ b/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_application.rst @@ -98,7 +98,7 @@ Security It is not backward compatible with the previous PSA ITS implementation. Migrating from the PSA ITS implementation, enabled by the ``CONFIG_PSA_NATIVE_ITS`` option, to the new :ref:`trusted_storage_readme` library requires manual data migration. - * For :ref:`lib_wifi_credentials` library and Wi-Fi samples: + * For :ref:`lib_wifi_credentials` library and Wi-Fi® samples: * ``CONFIG_WIFI_CREDENTIALS_BACKEND_PSA_UID_OFFSET`` has been removed because it was specific to the previous solution that used PSA Protected Storage instead of PSA Internal Trusted Storage (ITS). Use :kconfig:option:`CONFIG_WIFI_CREDENTIALS_BACKEND_PSA_OFFSET` to specify the key offset for PSA ITS. diff --git a/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_environment.rst b/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_environment.rst index 49bf2e572dda..6cb1e79c1ca6 100644 --- a/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_environment.rst +++ b/doc/nrf/releases_and_maturity/migration/2.4.99-cs3_to_2.6.99-cs2/migration_guide_2.4.99-cs3_to_2.6.99-cs2_environment.rst @@ -233,12 +233,12 @@ After you have updated the toolchain, complete the following steps to get the |N Updating the Terminal application ********************************* -To update `Serial Terminal from nRF Connect for Desktop`, follow these steps: +To update the `Serial Terminal app`_, follow these steps: -1. On your computer, open `nRF Connect for Desktop`_ +1. On your computer, open `nRF Connect for Desktop`_. If there is an update available, a pop up will notify you of its availability. #. If available, install the update from the pop up screen. -#. Update `Serial Terminal from nRF Connect for Desktop`. +#. Update the Serial Terminal app. If you are using the nRF Terminal application part of the `nRF Connect for Visual Studio Code`_ extension, open Visual Studio Code instead and ensure you are running the newest version of both the editor and the extension. diff --git a/doc/nrf/releases_and_maturity/migration/migration_guide_2.6.rst b/doc/nrf/releases_and_maturity/migration/migration_guide_2.6.rst index 86f04155e708..d32a2ceab876 100644 --- a/doc/nrf/releases_and_maturity/migration/migration_guide_2.6.rst +++ b/doc/nrf/releases_and_maturity/migration/migration_guide_2.6.rst @@ -71,10 +71,10 @@ Matter To :ref:`inherit Thread certification ` from Nordic Semiconductor, you must use the PSA Crypto API backend. * The device can automatically migrate all operational keys from the Matter's generic persistent storage to the PSA ITS secure storage. This means that all keys needed to establish the secure connection between Matter nodes will be moved to the PSA ITS secure storage. - To enable operational keys migration, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_OPERATIONAL_KEYS_MIGRATION_TO_ITS` Kconfig option to ``y``. + To enable operational keys migration, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_OPERATIONAL_KEYS_MIGRATION_TO_ITS` Kconfig option to ``y``. The default reaction to migration failure in |NCS| Matter samples is a factory reset of the device. - To change the default reaction, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_FACTORY_RESET_ON_KEY_MIGRATION_FAILURE` Kconfig option to ``n`` and implement the reaction in your Matter event handler. + To change the default reaction, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_FACTORY_RESET_ON_KEY_MIGRATION_FAILURE` Kconfig option to ``n`` and implement the reaction in your Matter event handler. * When the Device Attestation Certificate (DAC) private key exists in the factory data set, it can migrate to the PSA ITS secure storage. You can also have the DAC private key replaced by zeros in the factory data partition by setting the :kconfig:option:`CONFIG_CHIP_CRYPTO_PSA_MIGRATE_DAC_PRIV_KEY` Kconfig option to ``y``. diff --git a/doc/nrf/releases_and_maturity/migration/migration_guide_2.7.rst b/doc/nrf/releases_and_maturity/migration/migration_guide_2.7.rst index 6921ef6bee69..55c845771e92 100644 --- a/doc/nrf/releases_and_maturity/migration/migration_guide_2.7.rst +++ b/doc/nrf/releases_and_maturity/migration/migration_guide_2.7.rst @@ -58,7 +58,7 @@ Samples and applications using short-range radio All samples and applications built for multi-core SoCs were migrated to use :ref:`ipc_radio` as the default image for the network core (on nRF5340) or the radio core (on nRF54H20). - The samples previously built for those cores are no longer used in the default builds: :zephyr:code-sample:`bluetooth_hci_ipc`, :zephyr:code-sample:`nrf_ieee802154_rpmsg`, :ref:`multiprotocol-rpmsg-sample`, and :ref:`ble_rpc_host`. + The samples previously built for those cores are no longer used in the default builds: :zephyr:code-sample:`bluetooth_hci_ipc`, :zephyr:code-sample:`nrf_ieee802154_rpmsg`, ``nRF5340: Multiprotocol RPMsg``, and :ref:`ble_rpc_host`. .. _nrf5340_audio_migration_notes_2.7: @@ -71,8 +71,8 @@ nRF5340 Audio applications :ref:`ug_ble_controller_softdevice` is included and built automatically. Make sure to remove references to LE Audio controller for nRF5340 from your application and transition to the new controller. -Wi-Fi ------ +Wi-Fi® +------ .. toggle:: diff --git a/doc/nrf/releases_and_maturity/migration/migration_guide_2.8.rst b/doc/nrf/releases_and_maturity/migration/migration_guide_2.8.rst index 650522d09faa..fb8865e90cc6 100644 --- a/doc/nrf/releases_and_maturity/migration/migration_guide_2.8.rst +++ b/doc/nrf/releases_and_maturity/migration/migration_guide_2.8.rst @@ -1,7 +1,7 @@ .. _migration_2.8: -Migration guide for |NCS| v2.8.0 (Working draft) -################################################ +Migration guide for |NCS| v2.8.0 +################################ .. contents:: :local: @@ -28,6 +28,225 @@ Required changes The following changes are mandatory to make your application work in the same way as in previous releases. +Build and configuration system +============================== + +.. toggle:: + + * Sysbuild now handles the following MCUboot image ID assignments: + + * MCUboot updates (using b0) are automatically assigned to MCUboot. + The ``SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES`` Kconfig option must not be incremented to include this image. + * Applications and MCUboot must now use the MCUboot assigned image ID Kconfig values to refer to image IDs instead of hardcoding them. + * Applications interacting with the device using MCUboot serial recovery MCUmgr must use the image IDs assigned to them, as well as MCUboot or MCUmgr hooks. + * Depending upon enabled images, some image IDs might differ in |NCS| 2.8 and higher than from previous releases. + + +Nordic Secure Immutable Bootloader (NSIB, B0, or B0n) +===================================================== + +.. toggle:: + + * Custom printing has been dropped in favor of using the logging subsystem, with output printed out to the default logging device. + The ``CONFIG_SECURE_BOOT_DEBUG`` Kconfig option has been removed. + To disable logging in b0 or b0n, set the :kconfig:option:`CONFIG_LOG` option to ``n``. + To send logs over RTT instead of UART, apply the following settings: + + * Enable the :kconfig:option:`CONFIG_USE_SEGGER_RTT` and :kconfig:option:`CONFIG_RTT_CONSOLE` Kconfig options. + * Disable the :kconfig:option:`CONFIG_UART_CONSOLE` and :kconfig:option:`CONFIG_SERIAL` Kconfig options. + +nRF70 Series +============ + +.. toggle:: + + * The nRF70 Series support is now part of Zephyr upstream and it requires the following changes: + + * The nRF70 Series driver namespace has been renamed from ``NRF700X`` to ``NRF70``. + For example, ``CONFIG_NRF700X_RAW_DATA_RX`` to ``CONIFG_NRF70_RAW_DATA_RX``. + Update your application configurations to use the new namespace. + + * The nRF70 Series driver now uses per-module kernel heap with a higher default. + If a sample or an application uses the kernel heap but uses less than the default size, a build warning is displayed. + Use the :kconfig:option:`CONFIG_HEAP_MEM_POOL_IGNORE_MIN` Kconfig option and enable it to suppress the warning. + + * The WPA supplicant is also now part of Zephyr upstream and it requires the following changes: + + * The WPA supplicant namespace has been renamed from ``WPA_SUPP`` to ``WIFI_NM_WPA_SUPPLICANT``. + For example, ``CONFIG_WPA_SUPP=y`` to ``CONFIG_WIFI_NM_WPA_SUPPLICANT=y``. + Update your application configurations to use the new namespace. + + * The SR co-existence feature should now be explicitly enabled using the :kconfig:option:`CONFIG_NRF70_SR_COEX` Kconfig option. + The RF switch feature should be enabled using the :kconfig:option:`CONFIG_NRF70_SR_COEX_RF_SWITCH` Kconfig option. + +nRF54L Series +============= + +.. toggle:: + + * Use the :ref:`ZMS (Zephyr Memory Storage) ` storage system for all devices with RRAM memory technology. + See the :ref:`memory_storage` page for more details on how to enable ZMS for an nRF54L Series. + +.. _migration_2.8_nrf54h: + +nRF54H20 +======== + +This section describes the changes specific to the nRF54H20 SoC and DK support in the |NCS|. +For more information on changes related to samples and applications usage on the nRF54H20 DK, see :ref:`migration_2.8_required_nrf54h`. + +DK compatibility +---------------- + +.. toggle:: + + * The |NCS| v2.8.0 is compatible only with the following versions of the nRF54H20 DK, PCA10175: + + * Engineering B - versions ranging from v0.8.0 to 0.8.2 + * Engineering C - v0.8.3 and later revisions + + Check the version number on your DK's sticker to verify its compatibility with the |NCS|. + +Dependencies +------------ + +The following required dependencies for the nRF54H20 SoC and DK have been updated. + +nRF54H20 BICR ++++++++++++++ + +.. toggle:: + + * The nRF54H20 BICR has been updated (from the one supporting |NCS| v2.7.0). + + .. note:: + BICR update is not required if migrating from |NCS| v2.7.99-cs1 or v2.7.99-cs2. + + To update the BICR of your development kit while in Root of Trust, do the following: + + 1. Download the `BICR new binary file`_. + #. Connect the nRF54H20 DK to your computer using the **DEBUGGER** port on the DK. + + .. note:: + On MacOS, connecting the DK might repeatedly trigger a popup displaying the message ``Disk Not Ejected Properly``. + To disable this, run ``JLinkExe``, then run ``MSDDisable`` in the J-Link Commander interface. + + #. List all the connected development kits to see their serial number (matching the one on the DK's sticker):: + + nrfutil device list + + #. Move the BICR HEX file to a folder of your choice, then program the BICR by running nRF Util from that folder using the following command:: + + nrfutil device program --options chip_erase_mode=ERASE_NONE --firmware --core Application --serial-number + +nRF54H20 SoC binaries ++++++++++++++++++++++ + +.. toggle:: + + * The *nRF54H20 SoC binaries* bundle has been updated to version 0.7.0. + + .. caution:: + If migrating from |NCS| v2.7.0, before proceeding with the SoC binaries update, you must first update the BICR as described in the previous section. + + To update the SoC binaries bundle of your development kit while in Root of Trust, do the following: + + 1. Download the nRF54H20 SoC binaries v0.7.0: + + * `nRF54H20 SoC Binaries v0.7.0 for EngC DKs`_, compatible with the nRF54H20 DK v0.8.3 and later revisions + * `nRF54H20 SoC Binaries v0.7.0 for EngB DKs`_, compatible with the nRF54H20 DKs ranging from v0.8.0 to v0.8.2. + + .. note:: + On MacOS, ensure that the ZIP file is not unpacked automatically upon download. + + #. Purge the device as follows:: + + nrfutil device recover --core Application --serial-number + nrfutil device recover --core Network --serial-number + + #. Run ``west update``. + #. Move the correct :file:`.zip` bundle to a folder of your choice, then run nRF Util to program the binaries using one of the following commands, depending on your DK: + + * For Engineering B:: + + nrfutil device x-suit-dfu --firmware nrf54h20_soc_binaries_v0.7.0_.zip --serial-number + + * For Engineering C:: + + nrfutil device x-suit-dfu --firmware nrf54h20_soc_binaries_v0.7.0_.zip --serial-number --update-candidate-info-address 0x0e1ef340 + +nrfutil device +++++++++++++++ + +.. toggle:: + + * ``nrfutil device`` has been updated to version 2.7.2. + + Install the nRF Util ``device`` command version 2.7.2 as follows:: + + nrfutil install device=2.7.2 --force + + For more information, consult the `nRF Util`_ documentation. + +nrfutil-trace ++++++++++++++ + +.. toggle:: + + * ``nrfutil-trace`` has been updated to version 2.11.0. + + Install the nRF Util ``trace`` command version 2.11.0 as follows:: + + nrfutil install trace=2.11.0 --force + + For more information, consult the `nRF Util`_ documentation. + +nrf-regtool ++++++++++++ + +.. toggle:: + + * ``nrf-regtool`` has been updated to version 8.0.0. + + 1. Open nRF Connect for Desktop, navigate to the Toolchain Manager, select the v2.8 toolchain, and click the :guilabel:`Open terminal` button. + #. In the terminal window, install ``nrf-regtool`` version 8.0.0 as follows:: + + pip install nrf-regtool==8.0.0 + + +SEGGER J-Link ++++++++++++++ + +.. toggle:: + + * A new version of SEGGER J-Link is supported: `SEGGER J-Link` version 7.94i. + + .. note:: + On Windows, to update to the new J-link version, including the USB Driver for J-Link, you must manually install J-Link v7.94i from the command line, using the ``-InstUSBDriver=1`` parameter: + + 1. Navigate to the download location of the J-Link executable and run one of the following commands: + + * From the Command Prompt:: + + JLink_Windows_V794i_x86_64.exe -InstUSBDriver=1 + + * From PowerShell:: + + .\JLink_Windows_V794i_x86_64.exe -InstUSBDriver=1 + + #. In the :guilabel:`Choose optional components` window, select :guilabel:`update existing installation`. + #. Add the J-Link executable to the system path on Linux and MacOS, or to the environment variables on Windows, to run it from anywhere on the system. + + * The STM logging feature for the nRF54H20 SoC was tested using the J-Trace PRO V2 Cortex-M, with firmware compiled on ``Mar 28 2024 15:14:04``. + Using this feature also requires ``nrfutil-trace`` version 2.10.0 or later. + +nRF Connect Device Manager +++++++++++++++++++++++++++ + +.. toggle:: + + * The nRF54H20 SUIT DFU feature now requires `nRF Connect Device Manager`_ version v2.2.2 or higher. + Samples and applications ======================== @@ -38,27 +257,32 @@ Serial LTE Modem (SLM) .. toggle:: - * The handling of Release Assistance Indication (RAI) socket options has been updated in the ``#XSOCKETOPT`` command. - The individual RAI-related socket options have been consolidated into a single ``SO_RAI`` option. - You must modify your application to use the new ``SO_RAI`` option with the corresponding value to specify the RAI behavior. - The changes are as follows: + * The handling of Release Assistance Indication (RAI) socket options has been updated in the ``#XSOCKETOPT`` command. + The individual RAI-related socket options have been consolidated into a single ``SO_RAI`` option. + You must modify your application to use the new ``SO_RAI`` option with the corresponding value to specify the RAI behavior. + The changes are as follows: - The ``SO_RAI_NO_DATA``, ``SO_RAI_LAST``, ``SO_RAI_ONE_RESP``, ``SO_RAI_ONGOING``, and ``SO_RAI_WAIT_MORE`` options have been replaced by the ``SO_RAI`` option with values from ``1`` to ``5``. + The ``SO_RAI_NO_DATA``, ``SO_RAI_LAST``, ``SO_RAI_ONE_RESP``, ``SO_RAI_ONGOING``, and ``SO_RAI_WAIT_MORE`` options have been replaced by the ``SO_RAI`` option with values from ``1`` to ``5``. - Replace the following commands in your application code if they were used previously: + Replace the following commands in your application code if they were used previously: - * ``AT#XSOCKETOPT=1,50,`` with ``AT#XSOCKETOPT=1,61,1`` to indicate ``RAI_NO_DATA``. - * ``AT#XSOCKETOPT=1,51,`` with ``AT#XSOCKETOPT=1,61,2`` to indicate ``RAI_LAST``. - * ``AT#XSOCKETOPT=1,52,`` with ``AT#XSOCKETOPT=1,61,3`` to indicate ``RAI_ONE_RESP``. - * ``AT#XSOCKETOPT=1,53,`` with ``AT#XSOCKETOPT=1,61,4`` to indicate ``RAI_ONGOING``. - * ``AT#XSOCKETOPT=1,54,`` with ``AT#XSOCKETOPT=1,61,5`` to indicate ``RAI_WAIT_MORE``. + * ``AT#XSOCKETOPT=1,50,`` with ``AT#XSOCKETOPT=1,61,1`` to indicate ``RAI_NO_DATA``. + * ``AT#XSOCKETOPT=1,51,`` with ``AT#XSOCKETOPT=1,61,2`` to indicate ``RAI_LAST``. + * ``AT#XSOCKETOPT=1,52,`` with ``AT#XSOCKETOPT=1,61,3`` to indicate ``RAI_ONE_RESP``. + * ``AT#XSOCKETOPT=1,53,`` with ``AT#XSOCKETOPT=1,61,4`` to indicate ``RAI_ONGOING``. + * ``AT#XSOCKETOPT=1,54,`` with ``AT#XSOCKETOPT=1,61,5`` to indicate ``RAI_WAIT_MORE``. -SUIT DFU for nRF54H20 ---------------------- +.. _migration_2.8_required_nrf54h: + +nRF54H20 +-------- .. toggle:: - * The manifest sequence number is no longer configured through a :ref:`sysbuild ` Kconfig option. + * When using the nRF54H20 DK Engineering B (from v0.8.0 to 0.8.2), you must build samples and applications using the board revision 0.8.0 with the ``@`` syntax. + For example, ``nrf54h20dk@0.8.0/nrf54h20/cpuapp`` when building for the application core, or ``nrf54h20dk@0.8.0/nrf54h20/cpurad`` when building for the radio core. + + * When using SUIT DFU on the nRF54H20 SoC, the manifest sequence number is no longer configured through a :ref:`sysbuild ` Kconfig option. The values are now read from the :file:`VERSION` file, used for :ref:`zephyr:app-version-details` in Zephyr and the |NCS|. This change to the :ref:`sysbuild ` Kconfig option requires the following updates in the SUIT templates for your project: @@ -82,46 +306,43 @@ SUIT DFU for nRF54H20 For the list of all variables, set through the :file:`VERSION`, refer to the :ref:`ug_nrf54h20_suit_customize_dfu`. -Nordic Secure Immutable Bootloader (NSIB, B0, or B0n) ------------------------------------------------------ + * When using MCU Manager, the ``Confirm`` command is now needed to trigger a device firmware update. + * The build command to enable DFU from the external flash is now the following:: -.. toggle:: + west build ./ -b nrf54h20dk/nrf54h20/cpuapp -T sample.suit.smp_transfer.cache_push.extflash.bt - Custom printing has been dropped in favor of using the logging subsystem, with output printed out to the default logging device. - The ``CONFIG_SECURE_BOOT_DEBUG`` Kconfig option has been removed. - To disable logging in B0 or B0n, set the :kconfig:option:`CONFIG_LOG` option to ``n``. - To send logs over RTT instead of UART, apply the following settings: + * For updating using the SUIT Device Manager application, you can also use the following zip file: :file:`/zephyr/dfu_suit_recovery.zip`. + * Some Kconfig options and SUIT manifests have been modified, changing names and configurations. + Ensure the compatibility of your application with these changes. - * Enable the :kconfig:option:`CONFIG_USE_SEGGER_RTT` and :kconfig:option:`CONFIG_RTT_CONSOLE` Kconfig options. - * Disable the :kconfig:option:`CONFIG_UART_CONSOLE` and :kconfig:option:`CONFIG_SERIAL` Kconfig options. +Libraries +========= -nRF70 Series ------------- +This section describes the changes related to libraries. + +AT command parser +----------------- .. toggle:: - * The nRF70 Series support is now part of Zephyr upstream and it requires the following changes: + * The :c:func:`at_parser_cmd_type_get` has been renamed to :c:func:`at_parser_at_cmd_type_get`. - * The nRF70 Series driver namespace has been renamed from ``NRF700X`` to ``NRF70``. - For example, ``CONFIG_NRF700X_RAW_DATA_RX`` to ``CONIFG_NRF70_RAW_DATA_RX``. - Update your application configurations to use the new namespace. - * The nRF70 Series driver now uses per-module kernel heap with a higher default. - If a sample or an application uses the kernel heap but uses less than the default size, a build warning is displayed. - Use the :kconfig:option:`CONFIG_HEAP_MEM_POOL_IGNORE_MIN` Kconfig option and enable it to suppress the warning. +nRF Cloud +--------- - * The WPA supplicant is also now part of Zephy upstream and it requires the following changes: +.. toggle:: - * The WPA supplicant namespace has been renamed from ``WPA_SUPP`` to ``WIFI_NM_WPA_SUPPLICANT``. - For example, ``CONFIG_WPA_SUPP=y`` to ``CONFIG_WIFI_NM_WPA_SUPPLICANT=y``. - Update your application configurations to use the new namespace. + * The :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option has been enabled by default for nRF Cloud CoAP projects using the :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_POLL` or :kconfig:option:`CONFIG_NRF_CLOUD_PGPS` Kconfig option. + Set the :kconfig:option:`CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE` Kconfig option to at least ``80`` for P-GPS and ``192`` for FOTA. - * The SR co-existence feature should now be explicitly enabled using the :kconfig:option:`CONFIG_NRF70_SR_COEX` Kconfig option. - The RF switch feature should be enabled using the :kconfig:option:`CONFIG_NRF70_SR_COEX_RF_SWITCH` Kconfig option. +nRF Security +------------ -Libraries -========= +.. toggle:: -This section describes the changes related to libraries. + * The ``CONFIG_CRACEN_LOAD_KMU_SEED`` Kconfig option was renamed to :kconfig:option:`CONFIG_CRACEN_IKG_SEED_LOAD`. + * The ``CONFIG_MBEDTLS_CIPHER_MODE_CFB`` and ``CONFIG_MBEDTLS_CIPHER_MODE_OFB`` Kconfig options have been removed. + Use other cipher modes instead. LTE link control library ------------------------ @@ -139,29 +360,91 @@ LTE link control library Use the :kconfig:option:`CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT` or :kconfig:option:`CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT_GPS` Kconfig option instead. In addition, you can control the priority between LTE-M and NB-IoT using the :kconfig:option:`CONFIG_LTE_MODE_PREFERENCE` Kconfig option. -AT command parser ------------------ + * The library has been reorganized into modules that are enabled via their respective Kconfig options. + This change requires the following updates: -.. toggle:: + * If your application uses: - * The :c:func:`at_parser_cmd_type_get` has been renamed to :c:func:`at_parser_at_cmd_type_get`. + * :c:func:`lte_lc_conn_eval_params_get` -nRF Cloud ---------- + You must use the new :kconfig:option:`CONFIG_LTE_LC_CONN_EVAL_MODULE` Kconfig option. + + * If your application uses: + + * :c:enumerator:`LTE_LC_EVT_EDRX_UPDATE` + * :c:func:`lte_lc_ptw_set` + * :c:func:`lte_lc_edrx_param_set` + * :c:func:`lte_lc_edrx_req` + * :c:func:`lte_lc_edrx_get` + * :kconfig:option:`CONFIG_LTE_EDRX_REQ` + + You must use the new :kconfig:option:`CONFIG_LTE_LC_EDRX_MODULE` Kconfig option. + + * If your application uses: + + * :c:enumerator:`LTE_LC_EVT_NEIGHBOR_CELL_MEAS` + * :c:func:`lte_lc_neighbor_cell_measurement_cancel` + * :c:func:`lte_lc_neighbor_cell_measurement` + + You must use the new :kconfig:option:`CONFIG_LTE_LC_NEIGHBOR_CELL_MEAS_MODULE` Kconfig option. + + * If your application uses: + + * :c:func:`lte_lc_periodic_search_request` + * :c:func:`lte_lc_periodic_search_clear` + * :c:func:`lte_lc_periodic_search_get` + * :c:func:`lte_lc_periodic_search_set` + + You must use the new :kconfig:option:`CONFIG_LTE_LC_PERIODIC_SEARCH_MODULE` Kconfig option. + + * If your application uses: + + * :c:enumerator:`LTE_LC_EVT_PSM_UPDATE` + * :c:func:`lte_lc_psm_param_set` + * :c:func:`lte_lc_psm_param_set_seconds` + * :c:func:`lte_lc_psm_req` + * :c:func:`lte_lc_psm_get` + * :c:func:`lte_lc_proprietary_psm_req` + * :kconfig:option:`CONFIG_LTE_PSM_REQ` + + You must use the new :kconfig:option:`CONFIG_LTE_LC_PSM_MODULE` Kconfig option. + + * If your application uses: + + * :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_EXIT_PRE_WARNING` + * :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_ENTER` + * :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_EXIT` + * :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS` + + You must use the new :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_MODULE` Kconfig option. + + * If your application uses: + + * :c:enumerator:`LTE_LC_EVT_TAU_PRE_WARNING` + * :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_NOTIFICATIONS` + + You must use the new :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_MODULE` Kconfig option. + +LwM2M carrier library +--------------------- .. toggle:: - * The :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option has been enabled by default for nRF Cloud CoAP projects using the :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_POLL` or :kconfig:option:`CONFIG_NRF_CLOUD_PGPS` Kconfig option. - Set the :kconfig:option:`CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE` Kconfig option to at least ``80`` for P-GPS and ``192`` for FOTA. + The bootstrap from smartcard feature is no longer enabled by default in the library and the ``CONFIG_LWM2M_CARRIER_BOOTSTRAP_SMARTCARD`` Kconfig option has been removed. + To continue using this functionality, the :ref:`lib_uicc_lwm2m` library must be included in the project by enabling the :kconfig:option:`CONFIG_UICC_LWM2M` Kconfig option. -nRF Security ------------- +Wi-Fi® +------ .. toggle:: - * The ``CONFIG_CRACEN_LOAD_KMU_SEED`` Kconfig option was renamed to :kconfig:option:`CONFIG_CRACEN_IKG_SEED_LOAD`. - * The ``CONFIG_MBEDTLS_CIPHER_MODE_CFB`` and ``CONFIG_MBEDTLS_CIPHER_MODE_OFB`` Kconfig options have been removed. - Use other cipher modes instead. + * For :ref:`lib_wifi_credentials` library: + + * Syntax for ``add`` command has been modified to support ``getopt`` model. + For example, the following command with old syntax: + ``wifi_cred add SSID WPA2-PSK password`` should be replaced with the following command with new syntax: + ``wifi_cred add -s SSID -k 1 -p password``. + ``wifi_cred add --help`` command will provide more information on the new syntax. .. _migration_2.8_recommended: @@ -170,6 +453,75 @@ Recommended changes The following changes are recommended for your application to work optimally after the migration. +Devicetree +========== + +.. toggle:: + + The ``nordic,owned-memory`` and ``nordic,owned-partitions`` bindings have been updated, making these properties deprecated: + + * ``owner-id`` + * ``perm-read`` + * ``perm-write`` + * ``perm-execute`` + * ``perm-secure`` + * ``non-secure-callable`` + + It is recommended to use the ``nordic,access`` property instead. + The board files and sample overlays in the |NCS| are already updated to use it. + See :file:`ncs/zephyr/dts/bindings/reserved-memory/nordic,owned-memory.yaml` for more details. + + If both of the new and deprecated properties are set on the same devicetree node, then only ``nordic,access`` will take effect. + Therefore, it may not be possible to override the default permissions of an existing memory node using the old properties. + + Example before: + + .. code-block:: devicetree + + &cpuapp_ram0x_region { + compatible = "nordic,owned-memory"; + owner-id = <2>; + perm-read; + perm-write; + perm-execute; + perm-secure; + }; + + Example after: + + .. code-block:: devicetree + + &cpuapp_ram0x_region { + compatible = "nordic,owned-memory"; + nordic,access = ; + }; + + +Snippets +======== + +This section describes the changes related to snippets. + +.. toggle:: + + The existing snippet ``nrf70-debug`` has been removed and divided into three sub-snippets as below: + + * ``nrf70-driver-debug`` - To enable the nRF70 driver debug logs. + * ``nrf70-driver-verbose-logs`` - To enable the nRF70 driver, firmware interface, and BUS interface debug logs. + * ``wpa-supplicant-debug`` - To enable supplicant logs. + +Protocols +========= + +This section provides detailed lists of changes by :ref:`protocol `. + +Bluetooth® LE +------------- + +.. toggle:: + + * To use the Zephyr Bluetooth LE Controller, use the :ref:`bt-ll-sw-split ` snippet (see :ref:`app_build_snippets`). + Samples and applications ======================== @@ -180,8 +532,8 @@ Serial LTE Modem (SLM) .. toggle:: - The :file:`overlay-native_tls.conf` overlay file is no longer supported with the ``thingy91/nrf9160/ns`` board target due to flash memory constraints. - If you need to use native TLS with Thingy:91, you must disable features from the :file:`prj.conf` and :file:`overlay-native_tls.conf` configuration files to free up flash memory. + * The :file:`overlay-native_tls.conf` overlay file is no longer supported with the ``thingy91/nrf9160/ns`` board target due to flash memory constraints. + If you need to use native TLS with Thingy:91, you must disable features from the :file:`prj.conf` and :file:`overlay-native_tls.conf` configuration files to free up flash memory. Libraries ========= @@ -193,191 +545,191 @@ AT command parser .. toggle:: - * The :ref:`at_cmd_parser_readme` library has been deprecated in favor of the :ref:`at_parser_readme` library and will be removed in a future version. + * The :ref:`at_cmd_parser_readme` library has been deprecated in favor of the :ref:`at_parser_readme` library and will be removed in a future version. - You can follow this guide to migrate your application to use the :ref:`at_parser_readme` library. - This will reduce the footprint of the application and will decrease memory requirements on the heap. + You can follow this guide to migrate your application to use the :ref:`at_parser_readme` library. + This will reduce the footprint of the application and will decrease memory requirements on the heap. - To replace :ref:`at_cmd_parser_readme` with the :ref:`at_parser_readme`, complete the following steps: + To replace :ref:`at_cmd_parser_readme` with the :ref:`at_parser_readme`, complete the following steps: - 1. Replace the :kconfig:option:`CONFIG_AT_CMD_PARSER` Kconfig option with the :kconfig:option:`CONFIG_AT_PARSER` Kconfig option. + 1. Replace the :kconfig:option:`CONFIG_AT_CMD_PARSER` Kconfig option with the :kconfig:option:`CONFIG_AT_PARSER` Kconfig option. - #. Replace header files: + #. Replace header files: - * Remove: + * Remove: - .. code-block:: C + .. code-block:: C - #include - #include + #include + #include - * Add: + * Add: - .. code-block:: C + .. code-block:: C - #include + #include - #. Replace AT parameter list: + #. Replace AT parameter list: - * Remove: + * Remove: - .. code-block:: C + .. code-block:: C - struct at_param_list param_list; + struct at_param_list param_list; - * Add: + * Add: - .. code-block:: C + .. code-block:: C - struct at_parser parser; + struct at_parser parser; - #. Replace AT parameter list initialization: + #. Replace AT parameter list initialization: - * Remove: + * Remove: - .. code-block:: C + .. code-block:: C - /* `param_list` is a pointer to the AT parameter list. - * `AT_PARAMS_COUNT` is the maximum number of parameters of the list. - */ - at_params_list_init(¶m_list, AT_PARAMS_COUNT); + /* `param_list` is a pointer to the AT parameter list. + * `AT_PARAMS_COUNT` is the maximum number of parameters of the list. + */ + at_params_list_init(¶m_list, AT_PARAMS_COUNT); - /* Other code. */ + /* Other code. */ - /* `at_string` is the AT command string to be parsed. - * `&remainder` is a pointer to the returned remainder after parsing. - * `¶m_list` is a pointer to the AT parameter list. - */ - at_parser_params_from_str(at_string, &remainder, ¶m_list); + /* `at_string` is the AT command string to be parsed. + * `&remainder` is a pointer to the returned remainder after parsing. + * `¶m_list` is a pointer to the AT parameter list. + */ + at_parser_params_from_str(at_string, &remainder, ¶m_list); - * Add: + * Add: - .. code-block:: C + .. code-block:: C - /* `&at_parser` is a pointer to the AT parser. - * `at_string` is the AT command string to be parsed. - */ - at_parser_init(&at_parser, at_string); + /* `&at_parser` is a pointer to the AT parser. + * `at_string` is the AT command string to be parsed. + */ + at_parser_init(&at_parser, at_string); - .. note:: + .. note:: - Remember to check the returned error codes from the :ref:`at_parser_readme` functions. - For the sake of simplicity, they have been omitted in this migration guide. - Refer to the :ref:`at_parser_readme` documentation for more information on the API and the returned error codes. + Remember to check the returned error codes from the :ref:`at_parser_readme` functions. + For the sake of simplicity, they have been omitted in this migration guide. + Refer to the :ref:`at_parser_readme` documentation for more information on the API and the returned error codes. - #. Replace integer parameter retrieval: + #. Replace integer parameter retrieval: - * Remove: + * Remove: - .. code-block:: C + .. code-block:: C - int value; + int value; - /* `¶m_list` is a pointer to the AT parameter list. - * `index` is the index of the parameter to retrieve. - * `&value` is a pointer to the output integer variable. - */ - at_params_int_get(¶m_list, index, &value); + /* `¶m_list` is a pointer to the AT parameter list. + * `index` is the index of the parameter to retrieve. + * `&value` is a pointer to the output integer variable. + */ + at_params_int_get(¶m_list, index, &value); - uint16_t value; - at_params_unsigned_short_get(¶m_list, index, &value); + uint16_t value; + at_params_unsigned_short_get(¶m_list, index, &value); - /* Other variants: */ - at_params_short_get(¶m_list, index, &value); - at_params_unsigned_int_get(¶m_list, index, &value); - at_params_int64_get(¶m_list, index, &value); + /* Other variants: */ + at_params_short_get(¶m_list, index, &value); + at_params_unsigned_int_get(¶m_list, index, &value); + at_params_int64_get(¶m_list, index, &value); - * Add: + * Add: - .. code-block:: C + .. code-block:: C - int value; + int value; - /* `&at_parser` is a pointer to the AT parser. - * `index` is the index of the parameter to retrieve. - * `&value` is a pointer to the output integer variable. - * - * Note: this function is type-generic on the type of the output integer variable. - */ - err = at_parser_num_get(&at_parser, index, &value); + /* `&at_parser` is a pointer to the AT parser. + * `index` is the index of the parameter to retrieve. + * `&value` is a pointer to the output integer variable. + * + * Note: this function is type-generic on the type of the output integer variable. + */ + err = at_parser_num_get(&at_parser, index, &value); - uint16_t value; - /* Note: this function is type-generic on the type of the output integer variable. */ - err = at_parser_num_get(&at_parser, index, &value); + uint16_t value; + /* Note: this function is type-generic on the type of the output integer variable. */ + err = at_parser_num_get(&at_parser, index, &value); - #. Replace string parameter retrieval: + #. Replace string parameter retrieval: - * Remove: + * Remove: - .. code-block:: C + .. code-block:: C - /* `¶m_list` is a pointer to the AT parameter list. - * `index` is the index of the parameter to retrieve. - * `value` is the output buffer where the string is copied into. - * `&len` is a pointer to the length of the copied string. - * - * Note: the copied string is not null-terminated. - */ - at_params_string_get(¶m_list, index, value, &len); + /* `¶m_list` is a pointer to the AT parameter list. + * `index` is the index of the parameter to retrieve. + * `value` is the output buffer where the string is copied into. + * `&len` is a pointer to the length of the copied string. + * + * Note: the copied string is not null-terminated. + */ + at_params_string_get(¶m_list, index, value, &len); - /* Null-terminate the string. */ - value[len] = '\0'; + /* Null-terminate the string. */ + value[len] = '\0'; - * Add: + * Add: - .. code-block:: C + .. code-block:: C - /* `&at_parser` is a pointer to the AT parser. - * `index` is the index of the parameter to retrieve. - * `value` is the output buffer where the string is copied into. - * `&len` is a pointer to the length of the copied string. - * - * Note: the copied string is null-terminated. - */ - at_parser_string_get(&at_parser, index, value, &len); + /* `&at_parser` is a pointer to the AT parser. + * `index` is the index of the parameter to retrieve. + * `value` is the output buffer where the string is copied into. + * `&len` is a pointer to the length of the copied string. + * + * Note: the copied string is null-terminated. + */ + at_parser_string_get(&at_parser, index, value, &len); - #. Replace parameter count retrieval: + #. Replace parameter count retrieval: - * Remove: + * Remove: - .. code-block:: C + .. code-block:: C - /* `¶m_list` is a pointer to the AT parameter list. - * `count` is the returned parameter count. - */ - uint32_t count = at_params_valid_count_get(¶m_list); + /* `¶m_list` is a pointer to the AT parameter list. + * `count` is the returned parameter count. + */ + uint32_t count = at_params_valid_count_get(¶m_list); - * Add: + * Add: - .. code-block:: C + .. code-block:: C - size_t count; + size_t count; - /* `&at_parser` is a pointer to the AT parser. - * `&count` is a pointer to the returned parameter count. - */ - at_parser_cmd_count_get(&at_parser, &count); + /* `&at_parser` is a pointer to the AT parser. + * `&count` is a pointer to the returned parameter count. + */ + at_parser_cmd_count_get(&at_parser, &count); - #. Replace command type retrieval: + #. Replace command type retrieval: - * Remove: + * Remove: - .. code-block:: C + .. code-block:: C - /* `at_string` is the AT string that we want to retrieve the command type of. - */ - enum at_cmd_type type = at_parser_at_cmd_type_get(at_string); + /* `at_string` is the AT string that we want to retrieve the command type of. + */ + enum at_cmd_type type = at_parser_at_cmd_type_get(at_string); - * Add: + * Add: - .. code-block:: C + .. code-block:: C - enum at_parser_cmd_type type; + enum at_parser_cmd_type type; - /* `&at_parser` is a pointer to the AT parser. - * `&type` pointer to the returned command type. - */ - at_parser_cmd_type_get(&at_parser, &type); + /* `&at_parser` is a pointer to the AT parser. + * `&type` pointer to the returned command type. + */ + at_parser_cmd_type_get(&at_parser, &type); LTE link control library ------------------------ @@ -444,30 +796,3 @@ LTE link control library #include err = nrf_modem_at_printf("AT%%REDMOB=2"); - -Snippets -======== - -This section describes the changes related to snippets. - -.. toggle:: - - The existing snippet ``nrf70-debug`` has been removed and divided into three sub-snippets as below: - - * ``nrf70-driver-debug`` - To enable the nRF70 driver debug logs. - - * ``nrf70-driver-verbose-logs`` - To enable the nRF70 driver, firmware interface, and BUS interface debug logs. - - * ``wpa-supplicant-debug`` - To enable supplicant logs. - -Protocols -========= - -This section provides detailed lists of changes by :ref:`protocol `. - -Bluetooth® LE -------------- - -.. toggle:: - - * To use the Zephyr Bluetooth LE Controller, use the :ref:`bt-ll-sw-split ` snippet (see :ref:`app_build_snippets`). diff --git a/doc/nrf/releases_and_maturity/migration/migration_guide_2.9.0-nrf54h20-rc1.rst b/doc/nrf/releases_and_maturity/migration/migration_guide_2.9.0-nrf54h20-rc1.rst new file mode 100644 index 000000000000..92dc7bd423ab --- /dev/null +++ b/doc/nrf/releases_and_maturity/migration/migration_guide_2.9.0-nrf54h20-rc1.rst @@ -0,0 +1,167 @@ +.. _migration_2.9.0-nrf54h20-rc1: + +Migration guide for |NCS| v2.9.0-nRF54H20-rc1 +############################################# + +.. contents:: + :local: + :depth: 3 + +This document describes the changes required or recommended when migrating your nRF54H20 application from the |NCS| v2.8.0 to the |NCS| v2.9.0-nRF54H20-rc1. + +.. HOWTO + + Add changes in the following format: + + Component (for example, application, sample or libraries) + ********************************************************* + + .. toggle:: + + * Change1 and description + * Change2 and description + +.. _migration_2.9.0-nrf54h20-rc1_required: + +Required changes +**************** + +The following changes are mandatory to make your application work in the same way as in previous releases. + +nRF54H20 +======== + +This section describes the changes specific to the nRF54H20 SoC and DK support in the |NCS|. + +DK compatibility +---------------- + +.. toggle:: + + * The |NCS| v2.9.0-nRF54H20-rc1 is compatible only with the Engineering C - v0.9.0 and later revisions of the nRF54H20 DK, PCA10175. + Check the version number on your DK's sticker to verify its compatibility with the |NCS|. + +Dependencies +------------ + +The following required dependencies for the nRF54H20 SoC and DK have been updated. + +SDK and toolchain ++++++++++++++++++ + +.. toggle:: + + * To update the SDK and the toolchain, do the following: + + 1. Open Toolchain Manager in nRF Connect for Desktop. + #. Click :guilabel:`SETTINGS` in the navigation bar to specify where you want to install the |NCS|. + #. In :guilabel:`SDK ENVIRONMENTS`, click the :guilabel:`Install` button next to the |NCS| version |release|. + +nRF54H20 SoC binaries ++++++++++++++++++++++ + +.. toggle:: + + * The *nRF54H20 SoC binaries* bundle has been updated to version 0.8.0. + + To update the SoC binaries bundle of your development kit while in Root of Trust, do the following: + + 1. Download the `nRF54H20 SoC Binaries v0.8.0`_. + + .. note:: + On macOS, ensure that the ZIP file is not unpacked automatically upon download. + + #. Purge the device as follows:: + + nrfutil device recover --core Application --serial-number + nrfutil device recover --core Network --serial-number + + #. Erase the device as follows:: + + nrfutil device erase --all --core Network --serial-number + nrfutil device erase --all --core Application --serial-number + nrfutil device reset --reset-kind RESET_PIN --serial-number + + #. Run ``west update``. + #. Move the correct :file:`.zip` bundle to a folder of your choice, then run nRF Util to program the binaries using the following command:: + + nrfutil device x-suit-dfu --firmware nrf54h20_soc_binaries_v0.8.0.zip --serial-number + + #. Purge the device again as follows:: + + nrfutil device recover --core Application --serial-number + nrfutil device recover --core Network --serial-number + + #. Erase the device again as follows:: + + nrfutil device erase --all --core Network --serial-number + nrfutil device erase --all --core Application --serial-number + nrfutil device reset --reset-kind RESET_PIN --serial-number + +nrfutil ++++++++ + +.. toggle:: + + * ``nrfutil`` has been updated to version 7.13.0. + + Install nRF Util version 7.13.0 as follows: + + 1. Download the nRF Util executable file from the `nRF Util development tool`_ product page. + #. Add nRF Util to the system path on Linux and macOS, or environment variables on Windows, to run it from anywhere on the system. + On Linux and macOS, use one of the following options: + + * Add nRF Util's directory to the system path. + * Move the file to a directory in the system path. + + #. On macOS and Linux, give ``nrfutil`` execute permissions by typing ``chmod +x nrfutil`` in a terminal or using a file browser. + This is typically a checkbox found under file properties. + #. On macOS, to run the nRF Util executable, you need to allow it in the system settings. + #. Verify the version of the nRF Util installation on your machine by running the following command:: + + nrfutil --version + + #. If your version is below 7.13.0, run the following command to update nRF Util:: + + nrfutil self-upgrade + + For more information, see the `nRF Util`_ documentation. + +nrfutil device +++++++++++++++ + +.. toggle:: + + * ``nrfutil device`` has been updated to version 2.7.10. + + Install the nRF Util ``device`` command version 2.7.10 as follows:: + + nrfutil install device=2.7.10 --force + + For more information, consult the `nRF Util`_ documentation. + +nrfutil trace ++++++++++++++ + +.. toggle:: + + * ``nrfutil trace`` has been updated to version 3.10.0. + + Install the nRF Util ``trace`` command version 3.10.0 as follows:: + + nrfutil install trace=3.10.0 --force + + For more information, consult the `nRF Util`_ documentation. + +nrfutil suit +++++++++++++ + +.. toggle:: + + * ``nrfutil suit`` has been updated to version 0.9.0. + + Install the nRF Util ``suit`` command version 0.9.0 as follows:: + + nrfutil install suit=0.9.0 --force + + For more information, consult the `nRF Util`_ documentation. diff --git a/doc/nrf/releases_and_maturity/migration/migration_guide_2.9.rst b/doc/nrf/releases_and_maturity/migration/migration_guide_2.9.rst new file mode 100644 index 000000000000..411b7cf4934e --- /dev/null +++ b/doc/nrf/releases_and_maturity/migration/migration_guide_2.9.rst @@ -0,0 +1,50 @@ +.. _migration_2.9: + +Migration guide for |NCS| v2.9.0 +################################ + +.. contents:: + :local: + :depth: 3 + +This document describes the changes required or recommended when migrating your application from |NCS| v2.8.0 to |NCS| v2.9.0. + +.. HOWTO + Add changes in the following format: + Component (for example, application, sample or libraries) + ********************************************************* + .. toggle:: + * Change1 and description + * Change2 and description + +.. _migration_2.9_required: + +Required changes +**************** + +The following changes are mandatory to make your application work in the same way as in previous releases. + +.. _migration_2.9_recommended: + +Recommended changes +******************* + +The following changes are recommended for your application to work optimally after the migration. + +Samples and applications +======================== + +This section describes the changes related to samples and applications. + +Matter +------ + +.. toggle:: + + * For the Matter samples and applications: + + * The :ref:`ug_matter_device_watchdog` mode has been changed. + Previously, the :ref:`ug_matter_device_watchdog_pause_mode` was enabled by default for all Matter samples. + Now, this mode is disabled and all Matter watchdog sources must be fed within the specified time window. + + To re-enable the pause mode, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_PAUSE_IN_SLEEP` Kconfig option to ``y``. diff --git a/doc/nrf/releases_and_maturity/migration/migration_guide_3.0.rst b/doc/nrf/releases_and_maturity/migration/migration_guide_3.0.rst new file mode 100644 index 000000000000..528c68db6745 --- /dev/null +++ b/doc/nrf/releases_and_maturity/migration/migration_guide_3.0.rst @@ -0,0 +1,213 @@ +.. _migration_3.0: + +Migration guide for |NCS| v3.0.0 (Working draft) +################################################ + +.. contents:: + :local: + :depth: 3 + +This document describes the changes required or recommended when migrating your application from |NCS| v2.9.0 to |NCS| v3.0.0. + +.. HOWTO + Add changes in the following format: + Component (for example, application, sample or libraries) + ********************************************************* + .. toggle:: + * Change1 and description + * Change2 and description + +.. _migration_3.0_required: + +Required changes +**************** + +The following changes are mandatory to make your application work in the same way as in previous releases. + +Samples and applications +======================== + +This section describes the changes related to samples and applications. + +|no_changes_yet_note| + +Libraries +========= + +This section describes the changes related to libraries. + +|no_changes_yet_note| + +.. _migration_3.0_recommended: + +Recommended changes +******************* + +The following changes are recommended for your application to work optimally after the migration. + +Samples and applications +======================== + +This section describes the changes related to samples and applications. + +|no_changes_yet_note| + +Libraries +========= + +This section describes the changes related to libraries. + +Download client +--------------- + +.. toggle:: + + * The :ref:`lib_download_client` library has been deprecated in favor of the :ref:`lib_downloader` library and will be removed in a future |NCS| release. + + You can follow this guide to migrate your application to use the :ref:`lib_downloader` library. + This will reduce the footprint of the application and will decrease memory requirements on the heap. + + To replace :ref:`lib_download_client` with the :ref:`lib_downloader`, complete the following steps. + + 1. Kconfig options: + + * Replace: + + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_MAX_HOSTNAME_SIZE` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER_MAX_HOSTNAME_SIZE` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_MAX_FILENAME_SIZE` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER_MAX_FILENAME_SIZE` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_STACK_SIZE` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER_STACK_SIZE` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_SHELL` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER_SHELL` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_TCP_SOCK_TIMEO_MS` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER_HTTP_TIMEO_MS` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_COAP_MAX_RETRANSMIT_REQUEST_COUNT` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER_COAP_MAX_RETRANSMIT_REQUEST_COUNT` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_COAP_BLOCK_SIZE` Kconfig option with the :kconfig:option:`CONFIG_DOWNLOADER_COAP_BLOCK_SIZE_512` Kconfig option. + + * Remove: + + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_BUF_SIZE` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_RANGE_REQUESTS` Kconfig option. + * The :kconfig:option:`CONFIG_DOWNLOAD_CLIENT_CID` Kconfig option. + + * Add: + + * The :kconfig:option:`CONFIG_DOWNLOADER_TRANSPORT_COAP` Kconfig option to enable CoAP support. + * The :kconfig:option:`CONFIG_NET_IPV4` Kconfig option to enable IPv4 support. + * The :kconfig:option:`CONFIG_NET_IPV6` Kconfig option to enable IPv6 support. + + #. Replace header files: + + * Remove: + + .. code-block:: C + + #include + + * Add: + + .. code-block:: C + + #include + + #. Replace download client initialization: + + * Remove: + + .. code-block:: C + + static struct download_client dlc; + static int callback(const struct download_client_evt *event); + + download_client_init(&dlc, callback) + + * Add: + + .. code-block:: C + + static struct downloader dl; + static int callback(const struct downloader_evt *event); + static char dl_buf[2048]; /* Use buffer size set by CONFIG_DOWNLOAD_CLIENT_BUF_SIZE previously */ + static struct downloader_cfg dl_cfg = { + .callback = callback, + .buf = dl_buf, + .buf_size = sizeof(dl_buf), + }; + + downloader_init(&dl, &dl_cfg); + + #. Update download client callback: + + * Replace: + + * :c:enumerator:`DOWNLOAD_CLIENT_EVT_FRAGMENT` event with :c:enumerator:`DOWNLOADER_EVT_FRAGMENT`. + * :c:enumerator:`DOWNLOAD_CLIENT_EVT_ERROR` event with :c:enumerator:`DOWNLOADER_EVT_ERROR`. + * :c:enumerator:`DOWNLOAD_CLIENT_EVT_DONE` event with :c:enumerator:`DOWNLOADER_EVT_DONE`. + + * Remove: + + * :c:enumerator:`DOWNLOAD_CLIENT_EVT_CLOSED` event. + + * Add: + + * :c:enumerator:`DOWNLOADER_EVT_STOPPED` event. + * :c:enumerator:`DOWNLOADER_EVT_DEINITIALIZED` event. + + #. Server connect and disconnect: + + * The :c:func:`download_client_disconnect` function is not ported to the new downloader. + The downloader is expected to connect when the download begins. + If the ``keep_connection`` flag is set in the host configuration the connection persists after the download completes or is aborted by the :c:func:`downloader_cancel` function. + In this case, the downloader is disconnected when it is deinitialized by the :c:func:`downloader_deinit` function. + + + #. Replace file download: + + We show the changes for the :c:func:`download_client_start` function here, though the required work is + similar to the :c:func:`download_client_get` function. + + * Remove: + + .. code-block:: C + + int err; + const struct download_client_cfg dlc_config = { + ... + }; + + err = download_client_set_host(&dlc, dl_host, &dlc_config); + + err = download_client_start(&dlc, dl_file, offset); + + * Add: + + .. code-block:: C + + /* Note: All configuration of the downloader is done through the config structs. + * The downloader struct should not be modified by the application. + */ + + static struct downloader_host_cfg dl_host_cfg = { + ... + /* Note: + * .frag_size_override is replaced by .range_override. + * .set_tls_hostname is replaced by .set_native_tls. + * dlc.close_when_done is moved here and inverted(.keep_connection). + * Set .cid if CONFIG_DOWNLOAD_CLIENT_CID was enabled in the download client. + */ + }; + + int err = downloader_get_with_host_and_file(&dl, &dl_host_cfg, dl_host, dl_file, offset); + + .. note:: + The new downloader has an API to download the file using the URI directly. + + #. [optional] Deinitialize the downloader after use: + + The new downloader can be deinitialized to free its resources. + If another download is required later on, a new downloader instance needs to be initialized. + + * Add: + + .. code-block:: C + + err = downloader_deinit(&dl); diff --git a/doc/nrf/releases_and_maturity/migration/migration_hwmv2.rst b/doc/nrf/releases_and_maturity/migration/migration_hwmv2.rst index c8721e98a065..5568857ddc18 100644 --- a/doc/nrf/releases_and_maturity/migration/migration_hwmv2.rst +++ b/doc/nrf/releases_and_maturity/migration/migration_hwmv2.rst @@ -3,6 +3,10 @@ Migrating to the current hardware model ####################################### +.. contents:: + :local: + :depth: 2 + The *hardware model* refers to how SoCs and boards are named, defined, and used. Starting with |NCS| version 2.7.0, this model has been completely updated. diff --git a/doc/nrf/releases_and_maturity/migration/migration_sysbuild.rst b/doc/nrf/releases_and_maturity/migration/migration_sysbuild.rst index 8196089eeb73..45c2ab02cbfb 100644 --- a/doc/nrf/releases_and_maturity/migration/migration_sysbuild.rst +++ b/doc/nrf/releases_and_maturity/migration/migration_sysbuild.rst @@ -3,6 +3,10 @@ Migrating from multi-image builds to sysbuild ############################################# +.. contents:: + :local: + :depth: 2 + :ref:`sysbuild` is a build system used in zephyr to configure, build, and flash multiple images as part of a single project. It replaces the :ref:`child/parent system for multi-image builds ` in |NCS|. As the previous system has been deprecated, you must update your existing multi-image build projects to support being built using sysbuild. @@ -26,7 +30,7 @@ Review how :ref:`sysbuild` works to understand the basic usage and configuration .. _child_parent_to_sysbuild_migration_sysbuild_configuration_file: Sysbuild configuration files -============================ +**************************** You can set sysbuild configuration for projects in the ``sysbuild.conf`` file in the project folder. You can also add custom Kconfig values in the ``Kconfig.sysbuild`` file in the project folder, or use this file to set Kconfig defaults that depend on a board or other parameters when building a project. @@ -80,7 +84,7 @@ Both approaches are used in |NCS| applications and samples depending on the requ .. _child_parent_to_sysbuild_migration_network_core: Network core -============ +************ Sysbuild handles the selection of the network core image. The following Kconfig options are available to include the desired image in the build or to set network core options: @@ -96,8 +100,6 @@ The following Kconfig options are available to include the desired image in the +---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_802154_RPMSG`` | Zephyr 802.15.4 image: :zephyr:code-sample:`nrf_ieee802154_rpmsg` | +---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ -| ``SB_CONFIG_NETCORE_MULTIPROTOCOL_RPMSG`` | |NCS| multiprotocol_rpmsg Bluetooth and 802.15.4 image: :ref:`multiprotocol-rpmsg-sample` | -+---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_IPC_RADIO`` | |NCS| ipc_radio image: :ref:`ipc_radio` | +---------------------------------------------------------+-----------------------------------------------------------------------------------------------------------+ | ``SB_CONFIG_NETCORE_NONE`` | No network core image | @@ -111,7 +113,7 @@ Projects must be updated to select the correct network core image. .. _child_parent_to_sysbuild_migration_mcuboot: MCUboot -======= +******* Sysbuild handles MCUboot mode selection and key file configuration. The following Kconfig options are available: @@ -172,7 +174,7 @@ If this is not done, the settings of these builds will be forcefully replaced wi .. _child_parent_to_sysbuild_migration_secure_boot: Secure boot -=========== +*********** Sysbuild handles the mode selection of secure boot and the configuration of the key file. The following Kconfig options are available: @@ -206,7 +208,7 @@ If not, the secure boot images are not built, or the settings of these builds ar .. _child_parent_to_sysbuild_migration_bluetooth_fast_pair: Google Fast Pair -================ +**************** Sysbuild now handles the HEX generation with Google Fast Pair provisioning data. See the :ref:`ug_bt_fast_pair_provisioning_register` section in the Fast Pair integration guide for more details regarding the provisioning process. @@ -219,7 +221,7 @@ The following Kconfig options are available: +------------------------------------------+----------------------------------------+ To generate the Google Fast Pair provisioning data, you must set this Kconfig option at the sysbuild level. -The method of supplying the Fast Pair Model ID and Anti-Spoofing Private Key via the command line arguments remains unchanged from previous |NCS| versions. +The method of supplying the Fast Pair Model ID and Anti-Spoofing Private Key using the command line arguments remains unchanged from previous |NCS| versions. .. note:: When building with sysbuild, the value of the :kconfig:option:`CONFIG_BT_FAST_PAIR` Kconfig option is overwritten by ``SB_CONFIG_BT_FAST_PAIR``. @@ -228,7 +230,7 @@ The method of supplying the Fast Pair Model ID and Anti-Spoofing Private Key via .. _child_parent_to_sysbuild_migration_matter: Matter -====== +****** Sysbuild now directly controls Matter configuration for generating factory data and over-the-air firmware update images. The following Kconfig options are available: @@ -256,7 +258,7 @@ Applications must enable these options if they generate factory data or need an .. _child_parent_to_sysbuild_migration_nrf700x: nRF70 Series -============ +************ Support for the nRF70 Series operating mode and firmware storage has moved to sysbuild. The following Kconfig options are available: @@ -288,7 +290,7 @@ If these options are not set, nRF700x functionality will not work. .. _child_parent_to_sysbuild_migration_dfu_multi_image_build: Multi-image builds for DFU -========================== +************************** Support for creating multi-image build files for Device Firmware Update (DFU) was moved to sysbuild. The following Kconfig options are available: @@ -312,7 +314,7 @@ You must update your application to select the required Kconfig options at the s .. _child_parent_to_sysbuild_migration_dfu_zip: DFU Zip file generation -======================= +*********************** Support for generating a firmware update zip has moved to sysbuild. The following Kconfig options are available: @@ -336,7 +338,7 @@ You must update your application to select the required Kconfig options at the s .. _child_parent_to_sysbuild_migration_partition_manager: Partition Manager -================= +***************** Support for using the Partition Manager for an image has been moved to sysbuild. The following Kconfig options are available: @@ -359,7 +361,7 @@ If these options are not set, firmware updates may not work or images may fail t .. _child_parent_to_sysbuild_migration_qspi_xip: QSPI XIP flash split code -------------------------- +************************* Support for using an application image based on the Quad Serial Peripheral Interface (QSPI) with the Execute in place (XIP) flash memory split has been moved to sysbuild. The following Kconfig options are available: @@ -407,7 +409,7 @@ For more details about the QSPI XIP flash split image feature, see :ref:`qspi_xi .. _child_parent_to_sysbuild_migration_filename_changes: Filename changes -================ +**************** Some output file names have changed from child/parent image configurations or have changed the directory where they are created. This is because sysbuild properly namespaces images in a project. @@ -476,12 +478,12 @@ The changes to final output files (ignoring artifacts and intermediary files) ar +-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+ Example output files -==================== +******************** To demonstrate the expected output files when using sysbuild for an application build, the following sections show and describe the output files for the ``matter_weather_station`` application when building using the ``thingy53/nrf5340/cpaupp`` board target: Provision/container files -------------------------- +========================= The expected output files are the following: @@ -494,7 +496,7 @@ The expected output files are the following: +-----------------------+-------------------------------------------------------+ Image build files ------------------ +================= The expected output files are the following: @@ -525,7 +527,7 @@ The expected output files are the following: +-----------------------------------------------------+-------------------------------------------------------------------------------------------------------+ Combined files --------------- +============== The expected output files are the following: @@ -538,7 +540,7 @@ The expected output files are the following: +-----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Update files ------------- +============ The expected output files are the following: @@ -559,7 +561,7 @@ The expected output files are the following: .. _child_parent_to_sysbuild_migration_image_overlay_changes: Image overlay configuration -=========================== +*************************** In child/parent image configurations, an application could include additional configuration files in the ``child_image`` folder that would be applied to these images (see :ref:`ug_multi_image_permanent_changes`). This feature has been adapted in sysbuild; see :ref:`sysbuild_application_configuration` for an overview. @@ -573,7 +575,7 @@ In sysbuild, if an image application configuration directory is created then it Sysbuild includes support for :ref:`application-file-suffixes` in applications, and it can also use :ref:`sysbuild_file_suffixes`. Example for MCUboot -=================== +******************* The following table shows how to add custom MCUboot configuration for a project. The ``sysbuild`` folder must be created in the application's folder: @@ -597,7 +599,7 @@ The ``sysbuild`` folder must be created in the application's folder: .. _child_parent_to_sysbuild_migration_scope_changes: Scope changes -============= +************* In child/parent images, the application controlled all images, so variables without a prefix would apply to the main application only. In Sysbuild, elements like file suffixes, shields, and snippets without an image prefix will be applied **globally** to all images. @@ -630,7 +632,7 @@ They function the same in both systems: .. _child_parent_to_sysbuild_migration_building: Building with sysbuild -====================== +********************** Sysbuild needs to be enabled from the command-line when building with ``west build``. You can pass the ``--sysbuild`` parameter to the build command or :ref:`configure west to use sysbuild whenever you build `. @@ -712,14 +714,14 @@ See the following command patterns for building with sysbuild for different use .. _child_parent_to_sysbuild_forced_kconfig_options: Forced Kconfig options -====================== +********************** As sysbuild deals with configuration of features for some features and propagating this information to other images, some Kconfig options in applications will be forcefully overwritten by sysbuild, for details on these options and how to set them from sysbuild, check the :ref:`sysbuild_forced_options` section. .. _child_parent_to_sysbuild_migration_incompatibilities: -Incompatibities -=============== +Incompatibilities +***************** In the sysbuild release included in the |NCS| 2.7, the following features of the multi-image builds using child and parent images are not supported: diff --git a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.4.99-cs3_to_2.7_application.rst b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.4.99-cs3_to_2.7_application.rst index af72d0beeca0..cc113143b22d 100644 --- a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.4.99-cs3_to_2.7_application.rst +++ b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.4.99-cs3_to_2.7_application.rst @@ -21,7 +21,7 @@ Updated |NCS| toolchain Sysbuild A new build system was recently introduced in the |NCS|. - For more information, see the :ref:`Migrating to sysbuild ` userguide. + For more information, see the :ref:`Migrating to sysbuild ` user guide. Hardware Model v2 A new hardware model was recently introduced in the |NCS|. @@ -79,7 +79,7 @@ General * Sysbuild A new build system was recently introduced in |NCS| - For more information, see the :ref:`Migrating to sysbuild ` userguide. + For more information, see the :ref:`Migrating to sysbuild ` user guide. * Hardware Model v2 A new hardware model was recently introduced in the |NCS|. @@ -562,7 +562,7 @@ Security It is not backward compatible with the previous PSA ITS implementation. Migrating from the PSA ITS implementation, enabled by the ``CONFIG_PSA_NATIVE_ITS`` option, to the new :ref:`trusted_storage_readme` library requires manual data migration. - * For :ref:`lib_wifi_credentials` library and Wi-Fi samples: + * For :ref:`lib_wifi_credentials` library and Wi-Fi® samples: * ``CONFIG_WIFI_CREDENTIALS_BACKEND_PSA_UID_OFFSET`` has been removed because it was specific to the previous solution that used PSA Protected Storage instead of PSA Internal Trusted Storage (ITS). Use :kconfig:option:`CONFIG_WIFI_CREDENTIALS_BACKEND_PSA_OFFSET` to specify the key offset for PSA ITS. diff --git a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2.7_application.rst b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2.7_application.rst index 61a8934855ce..47a0a16f545b 100644 --- a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2.7_application.rst +++ b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2.7_application.rst @@ -22,7 +22,7 @@ Updated |NCS| toolchain Sysbuild A new build system was recently introduced in the |NCS|. - For more information, see the :ref:`Migrating to sysbuild ` userguide. + For more information, see the :ref:`Migrating to sysbuild ` user guide. Hardware Model v2 A new hardware model was recently introduced in the |NCS|. @@ -54,7 +54,7 @@ General * Sysbuild A new build system was recently introduced in |NCS| - For more information, see the :ref:`Migrating to sysbuild ` userguide. + For more information, see the :ref:`Migrating to sysbuild ` user guide. * Hardware Model v2 A new hardware model was recently introduced in the |NCS|. diff --git a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2_7_environment.rst b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2_7_environment.rst index babb48d150ab..dac4b7f1da1d 100644 --- a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2_7_environment.rst +++ b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/migration_guide_2.6.99-cs2_to_2_7_environment.rst @@ -112,12 +112,12 @@ To proceed with the update, complete the following steps: Updating the Terminal application ********************************* -To update `Serial Terminal from nRF Connect for Desktop`, follow these steps: +To update the `Serial Terminal app`_, follow these steps: -1. On your computer, open `nRF Connect for Desktop`_ +1. On your computer, open `nRF Connect for Desktop`_. If there is an update available, a pop up will notify you of its availability. #. If available, install the update from the pop up screen. -#. Update `Serial Terminal from nRF Connect for Desktop`. +#. Update the Serial Terminal app. If you are using the nRF Terminal application part of the `nRF Connect for Visual Studio Code`_ extension, open Visual Studio Code instead and ensure you are running the newest version of both the editor and the extension. diff --git a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/transition_guide_2.4.99-cs3_to_2.7_environment.rst b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/transition_guide_2.4.99-cs3_to_2.7_environment.rst index 341c8d45f6be..fd1064794aeb 100644 --- a/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/transition_guide_2.4.99-cs3_to_2.7_environment.rst +++ b/doc/nrf/releases_and_maturity/migration/nRF54H20_migration_2.7/transition_guide_2.4.99-cs3_to_2.7_environment.rst @@ -159,12 +159,12 @@ To install the toolchain and the SDK using the Toolchain Manager app, complete t Updating the Terminal application ********************************* -To update `Serial Terminal from nRF Connect for Desktop`, follow these steps: +To update the `Serial Terminal app`_, follow these steps: -1. On your computer, open `nRF Connect for Desktop`_ +1. On your computer, open `nRF Connect for Desktop`_. If there is an update available, a pop up will notify you of its availability. #. If available, install the update from the pop up screen. -#. Update `Serial Terminal from nRF Connect for Desktop`. +#. Update the Serial Terminal app. If you are using the nRF Terminal application part of the `nRF Connect for Visual Studio Code`_ extension, open Visual Studio Code instead and ensure you are running the newest version of both the editor and the extension. diff --git a/doc/nrf/releases_and_maturity/release_notes.rst b/doc/nrf/releases_and_maturity/release_notes.rst index 743b2a8596bc..ae9c471466ff 100644 --- a/doc/nrf/releases_and_maturity/release_notes.rst +++ b/doc/nrf/releases_and_maturity/release_notes.rst @@ -21,6 +21,9 @@ This page is included only in the latest documentation, because it might contain :caption: Subpages: releases/release-notes-changelog + releases/release-notes-2.9.0-nrf54h20-rc1 + releases/release-notes-2.9.0 + releases/release-notes-2.8.0 releases/release-notes-2.7.99-cs2 releases/release-notes-2.7.99-cs1 releases/release-notes-2.7.0 diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-1.5.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-1.5.0.rst index b4a04a249307..d18b7bff8ab7 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-1.5.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-1.5.0.rst @@ -146,7 +146,7 @@ nRF5340 SoC * Added: - * :ref:`multiprotocol-rpmsg-sample` sample for network core, which enables support for multiprotocol, IEEE 802.15.4, and Bluetooth LE applications. + * ``nRF5340: Multiprotocol RPMsg`` sample for network core, which enables support for multiprotocol, IEEE 802.15.4, and Bluetooth LE applications. * Updated: diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-1.6.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-1.6.0.rst index 2da590a1f4b1..4b2881629437 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-1.6.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-1.6.0.rst @@ -408,7 +408,7 @@ Modem library * Updated :ref:`nrf_modem` to version 1.2.1. See the :ref:`nrfxlib:nrf_modem_changelog` for detailed information. * Added a new function-based GNSS API with support for new GNSS features in modem firmware v1.3.0. - See :ref:`nrfxlib:gnss_interface` for more information. + See :ref:`GNSS interface` for more information. * GNSS socket API is now deprecated. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-1.7.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-1.7.0.rst index 4f998f8ce033..14cabbf9f923 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-1.7.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-1.7.0.rst @@ -140,7 +140,7 @@ nRF9160 * nRF9160: Asset Tracker has been deprecated in favor of :ref:`asset_tracker_v2`. * ``at_notif`` library has been deprecated in favor of the :ref:`at_monitor_readme` library. * ``at_cmd`` library has been deprecated in favor of Modem library's native AT interface. - * GPS driver has been deprecated in favor of the :ref:`nrfxlib:gnss_interface`. + * GPS driver has been deprecated in favor of the :ref:`GNSS interface`. nRF5 ==== diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.0.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.0.0.rst index 84660cdf7fcc..bf3f0aad6003 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-2.0.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.0.0.rst @@ -357,7 +357,7 @@ nRF9160 samples * :ref:`modem_callbacks_sample` sample, showcasing initialization and de-initialization callbacks. * :ref:`nrf_cloud_multi_service` sample, demonstrating a simple but robust integration of location services, FOTA, sensor sampling, and more. * Shell functionality to HTTP Update samples. - * :ref:`nrf_cloud_rest_cell_pos_sample` sample, demonstrating how to use the :ref:`lib_nrf_cloud_rest` library to perform cellular positioning requests. + * :ref:`nrf_cloud_rest_cell_location` sample, demonstrating how to use the :ref:`lib_nrf_cloud_rest` library to perform cellular positioning requests. * :ref:`ciphersuites` sample, demonstrating how to use TLS cipher suites. * Secure Partition Manager (rather than TF-M) is enabled by default for the applications and samples that support Thingy:91. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.2.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.2.0.rst index b41541df0aa7..9288867a5879 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-2.2.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.2.0.rst @@ -472,7 +472,7 @@ nRF9160 samples * Removed A-GPS and P-GPS processing. It is now handled by the :ref:`lib_nrf_cloud` library. -* Renamed the nRF9160: nRF Cloud REST cellular position sample to :ref:`nrf_cloud_rest_cell_pos_sample` sample. +* Renamed the nRF9160: nRF Cloud REST cellular position sample to :ref:`nrf_cloud_rest_cell_location` sample. Sample files are moved from ``samples/nrf9160/nrf_cloud_rest_cell_pos`` to ``samples/nrf9160/nrf_cloud_rest_cell_location``. Trusted Firmware-M (TF-M) samples @@ -513,7 +513,7 @@ Matter samples nRF5340 samples --------------- -* :ref:`multiprotocol-rpmsg-sample` sample: +* ``nRF5340: Multiprotocol RPMsg`` sample: * Updated by decreasing the maximum supported number of concurrent Bluetooth LE connections to four. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.3.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.3.0.rst index 32778c5d1157..6ee340243db3 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-2.3.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.3.0.rst @@ -499,7 +499,7 @@ nRF9160 samples * Timeout command-line arguments for the ``location get`` command changed from integers in milliseconds to floating-point values in seconds. * Replaced deprecated LwM2M API calls with calls to new functions. -* :ref:`nrf_cloud_rest_cell_pos_sample` sample: +* :ref:`nrf_cloud_rest_cell_location` sample: * Added the usage of GCI search option if running modem firmware v1.3.4. * Updated the sample to wait for RRC idle mode before requesting neighbor cell measurements. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.4.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.4.0.rst index 6f5724bd6647..5000c21013f2 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-2.4.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.4.0.rst @@ -58,7 +58,7 @@ The following list includes the summary of the most relevant changes introduced * Charger, BUCKs, LDOs, Load Switches, and GPIOs. * :ref:`Sample showing fuel gauge functionality `. The sample calculates battery state of charge, time to empty, time to full and provides updates of these over the terminal once every second. - * :ref:`Sample providing a shell interface ` that supports PMIC features: regulators (BUCKs, LDO) and GPIOs. + * :zephyr:code-sample:`npm1300_ek` that supports PMIC features: regulators (BUCKs, LDO) and GPIOs. * Bluetooth Low Energy: @@ -818,7 +818,7 @@ Libraries for networking * Updated: - * The ``download_client_connect`` function has been refactored to :c:func:`download_client_set_host` and made it non-blocking. + * The :c:func:`download_client_connect` function has been refactored to :c:func:`download_client_set_host` and made it non-blocking. * The configuration from one security tag to a list of security tags. * The library reports error ``ERANGE`` when HTTP range is requested but not supported by server. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.5.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.5.0.rst index 1fc0bd7f0ef1..7b9a2719db29 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-2.5.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.5.0.rst @@ -606,7 +606,7 @@ Cellular samples (renamed from nRF9160 samples) * Updated the TF-M Mbed TLS overlay to fix an issue when connecting to the server. -* :ref:`nrf_cloud_rest_cell_pos_sample` sample: +* :ref:`nrf_cloud_rest_cell_location` sample: * Added: @@ -1330,8 +1330,8 @@ Documentation * :ref:`release_notes`, :ref:`software_maturity`, :ref:`known_issues`, :ref:`glossary`, and :ref:`dev-model` are now located under :ref:`releases_and_maturity`. * The :ref:`ug_thread` documentation to improve the overall presentation and add additional details where necessary. - * The :ref:`ug_nrf9160_gs` and :ref:`ug_thingy91_gsg` instructions to use `Cellular Monitor`_ instead of Programmer for the :ref:`nrf9160_gs_updating_fw` and :ref:`thingy91_update_firmware` sections, respectively. + * The :ref:`ug_nrf9160_gs` and :ref:`ug_thingy91_gsg` instructions to use the `Cellular Monitor app`_ instead of Programmer for the :ref:`nrf9160_gs_updating_fw` and :ref:`thingy91_update_firmware` sections, respectively. The instructions for using Programmer were moved to the :ref:`ug_nrf9160` and :ref:`ug_thingy91` pages. - * All instances of LTE Link Monitor and Trace Collector apps by replacing them with `nRF Connect Serial Terminal`_ and `Cellular Monitor`_ apps. + * All instances of LTE Link Monitor and Trace Collector apps by replacing them with the `Serial Terminal app`_ and the `Cellular Monitor app`_. * Renamed nRF91 AT Commands Reference Guide to `nRF9160 AT Commands Reference Guide`_, and added references to the `nRF91x1 AT Commands Reference Guide`_ in the documentation. * All references to GNSS assistance from ``A-GPS`` to `A-GNSS`_. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.6.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.6.0.rst index 6385206f3d38..b3f73f803948 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-2.6.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.6.0.rst @@ -195,7 +195,7 @@ Working with nRF91 Series * The :ref:`ug_nrf9160_gs` and :ref:`ug_thingy91_gsg` pages so that instructions in the :ref:`nrf9160_gs_connecting_dk_to_cloud` and :ref:`thingy91_connect_to_cloud` sections, respectively, match the updated nRF Cloud workflow. * The :ref:`ug_nrf9160_gs` by replacing the Updating the DK firmware section with a new :ref:`nrf9160_gs_installing_software` section. - This new section includes steps for using Quick Start, a new application in `nRF Connect for Desktop`_ that streamlines the getting started process with the nRF91 Series DKs. + This new section includes steps for using the `Quick Start app`_, a new application in `nRF Connect for Desktop`_ that streamlines the getting started process with the nRF91 Series DKs. * :ref:`ug_nrf9160` user guide by separating the information about snippets into its own page, :ref:`ug_nrf91_snippet`. Working with nRF70 Series @@ -308,10 +308,10 @@ Matter * Migration of the Node Operational Key Pair (NOK) from the generic Matter persistent storage to the PSA ITS secure storage. All existing NOKs for all Matter fabrics will be migrated to the PSA ITS secure storage at boot. After the migration, generic Matter persistent storage entries in the settings storage will be removed and are no longer available. - To enable operational keys migration, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_OPERATIONAL_KEYS_MIGRATION_TO_ITS` Kconfig option to ``y``. + To enable operational keys migration, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_OPERATIONAL_KEYS_MIGRATION_TO_ITS` Kconfig option to ``y``. In |NCS| Matter samples, the default reaction to migration failure is a factory reset of the device. - To change the default reaction, set the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_FACTORY_RESET_ON_KEY_MIGRATION_FAILURE` Kconfig option to ``n``. + To change the default reaction, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_FACTORY_RESET_ON_KEY_MIGRATION_FAILURE` Kconfig option to ``n``. * Experimental support for building Matter samples and applications with Link Time Optimization (LTO). To enable it, set the :kconfig:option:`CONFIG_LTO` and :kconfig:option:`CONFIG_ISR_TABLES_LOCAL_DECLARATION` Kconfig options to ``y``. * Documentation page about :ref:`ug_matter_gs_matter_api`. @@ -765,7 +765,7 @@ Cellular samples * The sample now uses the functions in the :file:`nrf_cloud_fota_poll.c` and :file:`nrf_cloud_fota_common.c` files. * The :kconfig:option:`CONFIG_AT_HOST_STACK_SIZE` Kconfig option value has been increased to 2048 bytes since nRF Cloud credentials are sometimes longer than 1024 bytes. -* :ref:`nrf_cloud_rest_cell_pos_sample` sample: +* :ref:`nrf_cloud_rest_cell_location` sample: * Added: diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.7.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.7.0.rst index 9fb8a84f86e1..6b31492d4541 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-2.7.0.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.7.0.rst @@ -59,7 +59,7 @@ Added the following features as supported: * :ref:`zephyr:sysbuild`, an improved and extensible system for multi-image build, replacing :ref:`ug_multi_image` (parent/child images). See `Migrating from multi-image builds to sysbuild`_. * Samples and applications that use short-range radio and run on multi-core SoCs were migrated to use the :ref:`ipc_radio` as the default image for the network/radio core. - Samples previously used for the network/radio core are no longer used in the default builds: :zephyr:code-sample:`bluetooth_hci_ipc`, :zephyr:code-sample:`nrf_ieee802154_rpmsg`, :ref:`multiprotocol-rpmsg-sample`, and :ref:`ble_rpc_host`. + Samples previously used for the network/radio core are no longer used in the default builds: :zephyr:code-sample:`bluetooth_hci_ipc`, :zephyr:code-sample:`nrf_ieee802154_rpmsg`, ``nRF5340: Multiprotocol RPMsg``, and :ref:`ble_rpc_host`. Added the following features as experimental: @@ -258,7 +258,7 @@ Amazon Sidewalk * Added: - * Experimental support for the Bluetooth LE and sub-GHz protocols on the :ref:`zephyr:nrf54l15pdk_nrf54l15`. + * Experimental support for the Bluetooth LE and sub-GHz protocols on the nRF54L15 PDK. * Support for the DFU FUOTA. * Updated: @@ -349,7 +349,7 @@ Thread * Added: - * Support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` in the :ref:`ot_cli_sample` and :ref:`ot_coprocessor_sample` samples. + * Support for the nRF54L15 PDK in the :ref:`ot_cli_sample` and :ref:`ot_coprocessor_sample` samples. * New :ref:`feature set ` option :kconfig:option:`CONFIG_OPENTHREAD_NORDIC_LIBRARY_RCP`. Zigbee @@ -372,7 +372,7 @@ Enhanced ShockBurst (ESB) * Added: - * Support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and the :ref:`zephyr:nrf54l15pdk_nrf54l15`. + * Support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and the nRF54L15 PDK. * Fast switching between radio states for the nRF54H20 SoC. * Fast radio channel switching for the nRF54H20 SoC. @@ -381,7 +381,7 @@ Wi-Fi * Added: - * Support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and :ref:`zephyr:nrf54l15pdk_nrf54l15` boards with :ref:`nRF7002 EB `. + * Support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and nRF54L15 PDK boards with :ref:`nRF7002 EB `. * General enhancements in low-power mode including watchdog based recovery. Applications @@ -389,7 +389,7 @@ Applications This section provides detailed lists of changes by :ref:`application `. -Applications that used :zephyr:code-sample:`bluetooth_hci_ipc`, :zephyr:code-sample:`nrf_ieee802154_rpmsg`, or :ref:`multiprotocol-rpmsg-sample` radio core firmware, now use the :ref:`ipc_radio`. +Applications that used :zephyr:code-sample:`bluetooth_hci_ipc`, :zephyr:code-sample:`nrf_ieee802154_rpmsg`, or ``nRF5340: Multiprotocol RPMsg`` radio core firmware, now use the :ref:`ipc_radio`. Asset Tracker v2 ---------------- @@ -483,7 +483,7 @@ nRF Desktop * Added: - * Support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` with the ``nrf54l15pdk/nrf54l15/cpuapp`` board target. + * Support for the nRF54L15 PDK with the ``nrf54l15pdk/nrf54l15/cpuapp`` board target. The PDK can act as a sample mouse or keyboard. It supports the Bluetooth LE HID data transport and uses SoftDevice Link Layer with Low Latency Packet Mode (LLPM) enabled. @@ -601,7 +601,7 @@ Bluetooth samples * :ref:`peripheral_status` sample * :ref:`shell_bt_nus` sample - * Support for both the :ref:`zephyr:nrf54h20dk_nrf54h20` and the :ref:`zephyr:nrf54l15pdk_nrf54l15` boards in the following samples: + * Support for both the :ref:`zephyr:nrf54h20dk_nrf54h20` and the nRF54L15 PDK boards in the following samples: * :ref:`peripheral_lbs` sample * :ref:`bluetooth_central_hids` sample @@ -626,7 +626,7 @@ Bluetooth Fast Pair samples * :ref:`fast_pair_input_device` sample: - * Added support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` board. + * Added support for the nRF54L15 PDK board. * Updated: @@ -638,7 +638,7 @@ Bluetooth Fast Pair samples Bluetooth Mesh samples ---------------------- -* Added support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` board in the following samples: +* Added support for the nRF54L15 PDK board in the following samples: * :ref:`bluetooth_mesh_sensor_client` sample * :ref:`bluetooth_mesh_sensor_server` sample @@ -707,7 +707,7 @@ Cellular samples * Removed ESP8266 Wi-Fi DTC and Kconfig overlay files. -* :ref:`nrf_cloud_rest_cell_pos_sample` sample: +* :ref:`nrf_cloud_rest_cell_location` sample: * Added the :ref:`CONFIG_REST_CELL_SEND_DEVICE_STATUS ` Kconfig option to control sending device status on initial connection. @@ -743,7 +743,7 @@ Cryptography samples * Added: * :ref:`crypto_spake2p` sample. - * Support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` board for all crypto samples. + * Support for the nRF54L15 PDK board for all crypto samples. * Support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board in all crypto samples, except :ref:`crypto_persistent_key` and :ref:`crypto_tls`. * Support for the :ref:`zephyr:nrf9151dk_nrf9151` board for all crypto samples. * Support for the :ref:`nRF9161 DK ` board for the :ref:`crypto_test`. @@ -771,7 +771,7 @@ Enhanced ShockBurst samples * :ref:`esb_prx` sample: - * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and :ref:`zephyr:nrf54l15pdk_nrf54l15` boards. + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and nRF54L15 PDK boards. Keys samples ------------ @@ -787,7 +787,7 @@ Matter samples By utilizing the test event triggers, you can simulate various operational conditions and responses in your Matter device without the need for external setup. To get started with using test event triggers in your Matter samples and to understand the capabilities of this feature, refer to the :ref:`ug_matter_test_event_triggers` page. - * Support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` with the ``nrf54l15pdk/nrf54l15/cpuapp`` board target to the following Matter samples: + * Support for the nRF54L15 PDK with the ``nrf54l15pdk/nrf54l15/cpuapp`` board target to the following Matter samples: * :ref:`matter_template_sample` sample. * :ref:`matter_light_bulb_sample` sample. @@ -811,7 +811,7 @@ Matter samples * Updated: - * Matter samples that used :zephyr:code-sample:`nrf_ieee802154_rpmsg` or :ref:`multiprotocol-rpmsg-sample` radio core firmware, now use the :ref:`ipc_radio`. + * Matter samples that used :zephyr:code-sample:`nrf_ieee802154_rpmsg` or ``nRF5340: Multiprotocol RPMsg`` radio core firmware, now use the :ref:`ipc_radio`. * Enabled the Bluetooth LE Extended Announcement feature for all samples, and increased advertising timeout from 15 minutes to 1 hour. * Removed: @@ -865,8 +865,8 @@ NFC samples * Added: - * Support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` board in the :ref:`nrf-nfc-system-off-sample` sample. - * Support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and :ref:`zephyr:nrf54l15pdk_nrf54l15` boards in the following samples: + * Support for the nRF54L15 PDK board in the :ref:`nrf-nfc-system-off-sample` sample. + * Support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and nRF54L15 PDK boards in the following samples: * :ref:`record_launch_app` sample * :ref:`record_text` sample @@ -879,14 +879,14 @@ Peripheral samples * :ref:`radio_test` sample: - * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and :ref:`zephyr:nrf54l15pdk_nrf54l15` boards. + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` and nRF54L15 PDK boards. * The CLI command ``fem tx_power_control `` replaces ``fem tx_gain `` . This change applies to the sample built with the :ref:`CONFIG_RADIO_TEST_POWER_CONTROL_AUTOMATIC ` set to ``n``. * :ref:`802154_phy_test` sample: - * Added support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` board. + * Added support for the nRF54L15 PDK board. * :ref:`802154_sniffer` sample: @@ -913,21 +913,21 @@ Thread samples * Added new :ref:`feature set ` Kconfig option :kconfig:option:`CONFIG_OPENTHREAD_NORDIC_LIBRARY_RCP`. -* Updated the Thread samples that used :zephyr:code-sample:`nrf_ieee802154_rpmsg` or :ref:`multiprotocol-rpmsg-sample` radio core firmware, so that they now use the :ref:`ipc_radio`. +* Updated the Thread samples that used :zephyr:code-sample:`nrf_ieee802154_rpmsg` or ``nRF5340: Multiprotocol RPMsg`` radio core firmware, so that they now use the :ref:`ipc_radio`. * :ref:`ot_cli_sample` sample: - * Added support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` board. + * Added support for the nRF54L15 PDK board. * :ref:`ot_coprocessor_sample` sample: - * Added support for the :ref:`zephyr:nrf54l15pdk_nrf54l15` board. + * Added support for the nRF54L15 PDK board. * Changed the default :ref:`feature set ` from Master to RCP. Zigbee samples -------------- -* Updated the Zigbee samples that used :zephyr:code-sample:`nrf_ieee802154_rpmsg` or :ref:`multiprotocol-rpmsg-sample` radio core firmware, so that they now use the :ref:`ipc_radio`. +* Updated the Zigbee samples that used :zephyr:code-sample:`nrf_ieee802154_rpmsg` or ``nRF5340: Multiprotocol RPMsg`` radio core firmware, so that they now use the :ref:`ipc_radio`. Wi-Fi samples ------------- diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.8.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.8.0.rst new file mode 100644 index 000000000000..d226014a35cb --- /dev/null +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.8.0.rst @@ -0,0 +1,1549 @@ +.. _ncs_release_notes_280: + +|NCS| v2.8.0 Release Notes +########################## + +.. contents:: + :local: + :depth: 2 + +|NCS| delivers reference software and supporting libraries for developing low-power wireless applications with Nordic Semiconductor products in the nRF52, nRF53, nRF54, nRF70, and nRF91 Series. +The SDK includes open source projects (TF-M, MCUboot, OpenThread, Matter, and the Zephyr RTOS), which are continuously integrated and redistributed with the SDK. + +Release notes might refer to "experimental" support for features, which indicates that the feature is incomplete in functionality or verification, and can be expected to change in future releases. +To learn more, see :ref:`software_maturity`. + +Highlights +********** + +Added the following features as supported: + +* nRF54L Series: + + * This is the first release of |NCS| that brings comprehensive support for `nRF54L15 DK`_ and `nRF54L15 SoC `_. + nRF54L15 DK is now publicly available. + See the `nRF54L15 DK`_ page for distributors with stock. + * The protocols include Bluetooth® LE 6.0, Bluetooth Mesh, 2.4 GHz proprietary Enhanced ShockBurst (ESB), :ref:`Thread 1.4 `, Matter-over-Thread, Sidewalk, and Google Find My Device. + * For members signed up for both Apple MFi program and Apple Find My. + * All standard SoC peripherals. + * Device Firmware Update (DFU) provided by single-stage immutable bootloader MCUboot. + * :ref:`PSA Crypto APIs (HW accelerated) ` for cryptographic operations and key storage. + * :ref:`Wi-Fi® Scan `, :ref:`wifi_shell_sample`, and :ref:`wifi_station_sample` in combination with nRF7002 EB. + * :ref:`nPM1300 PMIC `. + +* Bluetooth LE: + + * LE Power Control that was introduced in |NCS| 2.2.0 as experimental, is now supported. + This feature automatically adjusts the signal strength between devices, enhancing connection reliability and power efficiency. + * Connection subrating that was introduced in |NCS| 2.7.0 as experimental, is now supported. + This feature offers a highly flexible way to change between high and low duty cycle connections without changing the connection interval, and is showcased in the sample :ref:`ble_subrating`. + * |NCS| 2.8.0 is qualifiable for the Bluetooth LE core 6.0 specifications. + +* Bluetooth Mesh: + + * The :ref:`Subnet Bridge ` profile, part of Bluetooth Mesh Protocol Specification version 1.1, is now qualified. + +* Thread: + + * :ref:`Thread 1.4 ` is now supported on nRF52840, nRF5340, and nRF54L15 devices. + It brings new features such as Thread credential sharing, enhanced internet connectivity, Thread-over-infrastructure, and secure commissioning at scale with TCAT. + For more information about Thread 1.4, see the `Thread Group’s Whitepaper `_. + +* Sidewalk: + + * Sidewalk version 1.17 is now supported on nRF52840, nRF5340, and nRF54L15 devices. + It brings improvements in metrics and capability reporting, and enables an end point to limit the uplink traffic (End Points traffic threshold). + +* Cellular IoT: + + * Thingy:91 X cellular IoT prototyping platform based on the nRF9151 System in Package (SiP), which includes the nRF7002 Wi-Fi 6 companion IC for Wi-Fi locationing. + +Added the following features as experimental: + +* nRF54L Series: + + * :ref:`Channel Sounding ` + * :ref:`Trusted Firmware-M ` + +* LE Audio: + + * The :ref:`nrf_auraconfig` sample, which implements the BIS gateway mode for the :ref:`nrf53_audio_app` and can act as an `Auracast™`_ broadcaster if you are using pre-sets compatible with Auracast. + It features a shell interface that allows you to configure the broadcast source in many different ways. + +* Bluetooth LE: + + * :ref:`Channel Sounding `, which enables accurate and secure distance measuring with built-in security features and seamless interoperability. + +* Wi-Fi : + + * :ref:`Offloaded raw transmit beaconing `, allowing the beaconing to be done autonomously by nRF70 Series companion devices instead of being triggered by the host. + This simplifies the host application firmware. + * :ref:`Enterprise mode for station EAP-TLS `, which allows nRF70 Series companion devices to connect to Wi-Fi enterprise installations using EAP-TLS. + +* DECT NR+: + + * A new sample :ref:`nRF91x1: DECT NR+ Shell ` that demonstrates how to setup a DECT NR+ application and enables testing various modem features and performance. + +* nRF Cloud: + + * SMP FOTA, which allows updating a companion device such as an nRF52 Series device running MCUboot from a FOTA image received by an nRF91 Series device from the cloud. + This is showcased in the sample :ref:`nrf_cloud_rest_fota`. + +* Bootloaders and DFU: + + * :ref:`mcuboot_image_compression` on nRF52840, nRF5340, and nRF54L15 targets. + This feature uses LZMA2 to compress the candidate image by ~30%, which gives more space for the application as it allows slot 1 (DFU slot) to be ~70% the size of slot 0 (application slot). + +Improved: + +* Wi-Fi: + + * Overall improvements that will bring increased connection stability and better interoperability with Access Points (APs). + * Significant reduction in the boot-up current on nRF70 Series devices for passive scanning use case, by skipping TX calibration, as TX is not required for passive scanning operation. + Boot up current drops from ~270 mA to ~80 mA. + +Deprecated: + +* Zigbee R22, which will be removed no earlier than after the next two releases, as per our :ref:`deprecation ` policy. + As a result, nRF52833, nRF52840, and nRF5340 devices are not recommended for new Zigbee designs. + Support for Zigbee R23 will be available for the nRF54L Series devices as an `Add-on `_. + +Sign up for the `nRF Connect SDK v2.8.0 webinar`_ to learn more about the new features. + +Release tag +*********** + +The release tag for the |NCS| manifest repository (|ncs_repo|) is **v2.8.0**. +Check the :file:`west.yml` file for the corresponding tags in the project repositories. + +To use this release, check out the tag in the manifest repository and run ``west update``. +See :ref:`cloning_the_repositories` and :ref:`gs_updating_repos_examples` for more information. + +For information on the included repositories and revisions, see `Repositories and revisions for v2.8.0`_. + +Integration test results +************************ + +The integration test results for this tag can be found in the following external artifactory: + +* `Twister test report for nRF Connect SDK v2.8.0`_ +* `Hardware test report for nRF Connect SDK v2.8.0`_ + +IDE and tool support +******************** + +`nRF Connect extension for Visual Studio Code `_ is the recommended IDE for |NCS| v2.8.0. +See the :ref:`installation` section for more information about supported operating systems and toolchain. + +Supported modem firmware +************************ + +See the following documentation for an overview of which modem firmware versions have been tested with this version of the |NCS|: + +* `Modem firmware compatibility matrix for the nRF9151 DK`_ +* `Modem firmware compatibility matrix for the nRF9161 DK`_ +* `Modem firmware compatibility matrix for the nRF9160 DK`_ + +Use the latest version of the nRF Programmer app of `nRF Connect for Desktop`_ to update the modem firmware. +See :ref:`nrf9160_gs_updating_fw_modem` for instructions. + +Modem-related libraries and versions +==================================== + +.. list-table:: Modem-related libraries and versions + :widths: 15 10 + :header-rows: 1 + + * - Library name + - Version information + * - Modem library + - `Changelog `_ + * - LwM2M carrier library + - `Changelog `_ + +Known issues +************ + +Known issues are only tracked for the latest official release. +See `known issues for nRF Connect SDK v2.8.0`_ for the list of issues valid for the latest release. + +Migration notes +*************** + +See the `Migration guide for nRF Connect SDK v2.8.0`_ for the changes required or recommended when migrating your application from |NCS| v2.7.0 to |NCS| v2.8.0. + +.. _ncs_release_notes_280_changelog: + +Changelog +********* + +The following sections provide detailed lists of changes by component. + +IDE, OS, and tool support +========================= + +* Added: + + * Explicit mention of the :ref:`requirements_jlink` being required in the :ref:`installing_vsc` section of the installation page. + * :ref:`nrf_toolchain_docker_image`, a containerized version of the |NCS| toolchain that can be used for development and testing. + +* Updated: + + * The required `SEGGER J-Link`_ version to v7.94i. + * The :ref:`gs_recommended_versions` page by splitting the supported OS table into :ref:`supported_OS` and :ref:`additional_nordic_sw_tools_os_support`. + The latter has received the following updates: + + * Linux 24.04 and macOS 15 have been added to the list. + * macOS 10.15, macOS 11, and macOS 12 have been removed from the list. + +* Deprecated the :ref:`requirements_clt`. + They will be removed in an upcoming release. + Transition to using `nRF Util`_ for all related tasks going forward. + +Board support +============= + +* Added support for the Thingy:91 X board, which uses the ``nordic,pm-ext-flash`` node instead of external flash device name in static partitions. +* Updated nRF54L15 Series devices to support different revisions of DKs and PDKs. + For more information, see :ref:`nRF54L15 revisions `. + +Build and configuration system +============================== + +* Added: + + * The ``SB_CONFIG_MCUBOOT_USE_ALL_AVAILABLE_RAM`` sysbuild Kconfig option to system that allows utilizing all available RAM when using TF-M on an nRF5340 device. + + .. note:: + This has security implications and might allow secrets to be leaked to the non-secure application in RAM. + + * The ``SB_CONFIG_MCUBOOT_NRF53_MULTI_IMAGE_UPDATE`` sysbuild Kconfig option that enables updating the network core on the nRF5340 SoC from external flash. + * The AP-Protect sysbuild Kconfig options to enable the corresponding AP-Protect Kconfig options for all images in the build: + + * ``SB_CONFIG_APPROTECT_LOCK`` for the :kconfig:option:`CONFIG_NRF_APPROTECT_LOCK` Kconfig option. + * ``SB_CONFIG_APPROTECT_USER_HANDLING`` for the :kconfig:option:`CONFIG_NRF_APPROTECT_USER_HANDLING` Kconfig option. + * ``SB_CONFIG_APPROTECT_USE_UICR`` for the :kconfig:option:`CONFIG_NRF_APPROTECT_USE_UICR` Kconfig option. + * ``SB_CONFIG_SECURE_APPROTECT_LOCK`` for the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_LOCK` Kconfig option. + * ``SB_CONFIG_SECURE_APPROTECT_USER_HANDLING`` for the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USER_HANDLING` Kconfig option. + * ``SB_CONFIG_SECURE_APPROTECT_USE_UICR`` for the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USE_UICR` Kconfig option. + + * CMake warning when the static :ref:`partition_manager` file has been changed but changes will not be read until a pristine build is performed. + * Encrypted firmware update to :file:`dfu_application.zip` instead of the unencrypted firmware update when encrypted image support is enabled in sysbuild. + See :ref:`app_build_mcuboot_output` for details. + * Sysbuild-assigned MCUboot image IDs feature, which deals with MCUboot image IDs for different components in a project. + * The ``SB_CONFIG_LWM2M_CARRIER_DIVIDED_DFU`` sysbuild Kconfig option that enables the generation of proprietary application update files required for the LwM2M carrier divided FOTA procedure. + +* Fixed: + + * An issue with the |NCS| boot banner using ``CMAKE_SOURCE_DIR`` instead of ``APPLICATION_SOURCE_DIR``. + * An issue with :kconfig:option:`CONFIG_MBEDTLS_CFG_FILE` having a prompt which would, in some circumstances, lead to a sticky value if the configuration was changed. + * An issue with changes to image configurations in a ``sysbuild.cmake`` file not being applied to variant images. + * An issue with signing variables not expanding strings for nRF70 Series devices. + +* Deprecated the following devicetree properties: + + * ``owner-id`` + * ``perm-read`` + * ``perm-write`` + * ``perm-execute`` + * ``perm-secure`` + * ``non-secure-callable`` + + It is recommended to replace them with the new devicetree property: ``nordic,access``. + See the :ref:`migration guide ` for more information. + +* Removed documentation related to non-working support for configuring the NSIB signing key through the environmental or command line variable (``SB_SIGNING_KEY_FILE``) along with child image. + +Bootloaders and DFU +=================== + +* Added: + + * Support for handling SHA512 by MCUmgr server protocol implementation. + * ``SB_CONFIG_MCUBOOT_NRF53_MULTI_IMAGE_UPDATE`` sysbuild Kconfig to allow supporting network core application in MCUboot. + * :ref:`QSPI XIP split image ` support for the nRF52840 SoC and MCUboot's direct-xip mode. + * Documentation for :ref:`mcuboot_image_compression`. + * Documentation for :ref:`sysbuild_assigned_images_ids`. + * A section in the sysbuild-related migration guide about the migration of :ref:`child_parent_to_sysbuild_migration_qspi_xip` from child/parent image to sysbuild. + +* Updated the procedure for signing the application image built for booting by MCUboot in direct-xip mode with revert support. + Now, the Intel HEX file of the application image automatically receives a confirmation flag. + +* Fixed an issue with direct-xip (with revert) images not being marked as confirmed. +* Removed the secure bootloader Kconfig option ``CONFIG_SECURE_BOOT_DEBUG`` and replaced with usage of logging subsystem. + +See also the :ref:`MCUboot ` documentation. + +SUIT DFU for nRF54H20 +--------------------- + +* Added: + + * Semantic versioning. + * Support for push-mode DFU to external flash. + * ZIP file to allow to update using raw DFU caches. + * Option to build custom SUIT recovery image (for example, without radio core) + * Extended SUIT SMP commands to nRF Util and nRF Connect Device Manager. + +* Updated: + + * The ``Confirm`` SMP command is now needed to trigger SUIT DFU. + * Configuration options and SUIT manifests. + +* Fixed: + + * An issue where usage of ``nrfutil device recover`` leads to setting SUIT recovery. + * An issue where envelopes with SUIT components not needed for particular roles are not rejected as candidates. + * An issue where a duplicate class ID in MPI leads to cyclic SDFW resets. + * An issue where leftover data in SUIT storage prevents writing to SUIT storage for a new application or radio image. + * An issue where ``smp_transfer`` west flash fails with cyclic resets afterwards. + * An issue where the **suit-generator** generation of installed manifest images for custom manifest class ID is not possible. + * An issue where manifest could declare any ``INSTLD_MFST`` component regardless of its class ID. + +Developing with nRF91 Series +============================ + +* Added: + + * User guides for Thingy:91 X in the :ref:`ug_nrf91` documentation. + * The :ref:`nRF91 modem tracing with RTT backend snippet ` to enable modem tracing using the RTT trace backend. + * The :ref:`nRF91 modem tracing with RAM backend snippet ` to enable modem tracing using the RAM trace backend. + +Developing with nRF70 Series +============================ + +* Added the :ref:`ug_nrf70_features_hostap` section to the :ref:`ug_nrf70_features` page. + +Developing with nRF54L Series +============================= + +* Added: + + * nRF54l_snippets to emulate these targets on an nRF54L15 DK. + These are used only for development purposes. + * The :ref:`ug_nrf54l_cryptography` page that provides more information about the cryptographic peripherals of the nRF54L Series devices, programming model for referencing keys, and configuration. + * A page on :ref:`memory_storage` system. + * The :ref:`vpr_flpr_nrf54l` and :ref:`building_nrf54l` pages. + * The :ref:`ug_nrf54l_developing_ble_fota` page, describing FOTA update process and testing steps. + * The :ref:`ug_nrf54l_developing_provision_kmu` page, including instructions on generating keys and provisioning them to the board. + +* Updated the name and the structure of the section, with :ref:`ug_nrf54l` as the landing page. +* Removed the Getting started with the nRF54L15 PDK page, and instead included the information about the `Quick Start app`_ support. + +Security +======== + +* Added: + + * The :kconfig:option:`CONFIG_CRACEN_IKG_SEED_KMU_SLOT` Kconfig option to allow customization of the KMU slot used to store CRACEN's Internal Key Generator (IKG) seed. + The default IKG seed slot is now 183 (previously 0). + * TF-M support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (board target ``nrf54l15dk/nrf54l15/cpuapp/ns``), replacing the nRF54L15 PDK (board target ``nrf54l15pdk/nrf54l15/cpuapp/ns``). + * The ``west ncs-provision`` command, which allows to provision signature verification keys to the nRF54L15 SoC over the J-Link interface. + +* Deprecated legacy Mbed TLS crypto toolbox APIs that are enabled when the :kconfig:option:`CONFIG_NORDIC_SECURITY_BACKEND` Kconfig option is set. + Use the nRF Security (enabled with the :kconfig:option:`CONFIG_NRF_SECURITY` Kconfig option) and PSA crypto APIs instead. + +Protocols +========= + +This section provides detailed lists of changes by :ref:`protocol `. +See `Samples`_ for lists of changes for the protocol-related samples. + +Amazon Sidewalk +--------------- + +* Added: + + * Support for the :ref:`zephyr:nrf54l15dk_nrf54l15`. + * Protection mechanism for Sidewalk keys in non-volatile memory (secure storage). + * Amazon Sidewalk libraries v1.17. + * New CLI commands: + + * Commands for testing Sidewalk Bulk Data Transfer. + * A command for entering the Nordic DFU state. + * A command for retrieving the device ID. + +* Updated: + + * The manufacturing storage module. + * The SPI driver: + + * The recommended pin configuration has been changed for the nRF54L15 device. + * The chip select pin control has been moved to the SPI driver. + * The nrfx driver is directly used for the nRF52840 device. + + * The Sidewalk event module for the application. + * The Sidewalk version print information. + +* Removed the deprecated Bluetooth LE address type configuration. + +Bluetooth LE +------------ + +* Added functions ``bt_hci_err_to_str()`` and ``bt_security_err_to_str()`` to allow printing error codes as strings. + Each function returns string representations of the error codes when the corresponding Kconfig option, :kconfig:option:`CONFIG_BT_HCI_ERR_TO_STR` or :kconfig:option:`CONFIG_BT_SECURITY_ERR_TO_STR`, is enabled. + The :ref:`ble_samples` and :ref:`nrf53_audio_app` are updated to use these new functions. + +* Updated: + + * The SoftDevice Controller library to automatically select the :kconfig:option:`CONFIG_BT_LL_SOFTDEVICE_MULTIROLE` Kconfig option when using coexistence based on :kconfig:option:`CONFIG_MPSL_CX` for nRF52 Series devices. + * The Bluetooth HCI driver is now present as a devicetree node in the device tree. + The SoftDevice Controller driver uses a devicetree node named ``bt_hci_sdc`` with a devicetree binding compatible with ``nordic,bt-hci-sdc``. + The Zephyr Bluetooth LE Controller uses a devicetree node named ``bt_hci_controller`` with a devicetree binding compatible with ``zephyr,bt-hci-ll-sw-split``. + You need to update applications using the Zephyr Bluetooth Controller (see the :ref:`migration guide `). + * Host calls in GATT Discovery Manager (DM) callbacks are now scheduled in a workqueue. + The :kconfig:option:`CONFIG_BT_GATT_DM_WORKQ_CHOICE` Kconfig option allows you to select the workqueue implementation. + You can select either a workqueue specific to GATT DM (default) or the system workqueue. + You can use the system workqueue if creating a new thread is not viable due to memory constraints, but it is not recommended to have potential blocking calls in the system workqueue. + +* Fixed an issue where the Bluetooth subsystem deadlocked when a Bluetooth link was lost during data transfer. + In this scenario, the disconnected event was never delivered to the application. + The issue only occurred when the :kconfig:option:`CONFIG_BT_HCI_ACL_FLOW_CONTROL` Kconfig option was enabled. + This option is enabled by default on the nRF5340 DK. + +Bluetooth Mesh +-------------- + +* Added metadata as optional parameter for the following models: + + * :ref:`bt_mesh_lightness_srv_readme` + * :ref:`bt_mesh_light_hsl_srv_readme` + * :ref:`bt_mesh_light_temp_srv_readme` + * :ref:`bt_mesh_sensor_srv_readme` + * :ref:`bt_mesh_time_srv_readme` + + To use the metadata, enable the :kconfig:option:`CONFIG_BT_MESH_LARGE_COMP_DATA_SRV` Kconfig option. + +* Removed the ``CONFIG_BT_MESH_SENSOR_USE_LEGACY_SENSOR_VALUE`` Kconfig option, deprecated in the |NCS| v2.6.0, as the old APIs, based on the ``sensor_value`` type, are removed. + You need to update applications using the old APIs, as described in the :ref:`v2.6.0 migration guide `. + +Matter +------ + +* Added: + + * The following Kconfig options to configure parameters impacting persistent subscriptions re-establishment: + + * :kconfig:option:`CONFIG_CHIP_MAX_ACTIVE_CASE_CLIENTS` + * :kconfig:option:`CONFIG_CHIP_MAX_ACTIVE_DEVICES` + * :kconfig:option:`CONFIG_CHIP_SUBSCRIPTION_RESUMPTION_MIN_RETRY_INTERVAL` + * :kconfig:option:`CONFIG_CHIP_SUBSCRIPTION_RESUMPTION_RETRY_MULTIPLIER` + + * The :ref:`ug_matter_device_memory_profiling` section to the :ref:`ug_matter_device_optimizing_memory` page. + The section contains useful commands for measuring memory and troubleshooting tips. + * The ZMS file subsystem to all devices that contain RRAM, such as the nRF54L Series devices. + * Migration of the Device Attestation Certificates private key to Key Management Unit (KMU) for the nRF54L Series SoCs. + See :ref:`matter_platforms_security_dac_priv_key_kmu` to learn how to enable it in your sample. + * Support for the Device Firmware Upgrade over Bluetooth LE SMP and Matter Over-the-air Software Update (OTA) on nRF54H20 SoC. + +* Updated: + + * The default Trusted Storage AEAD key to Hardware Unique Key (HUK) for supported nRF54L Series devices. + * Renamed the ``CONFIG_CHIP_FACTORY_RESET_ERASE_NVS`` Kconfig option to :kconfig:option:`CONFIG_CHIP_FACTORY_RESET_ERASE_SETTINGS`. + The new Kconfig option now works for both NVS and ZMS file system backends. + * The firmware version format used for informational purposes when using the :file:`VERSION` file. + The format now includes the optional ``EXTRAVERSION`` component. + * Storing the Device Attestation Certificates private key in the Trusted Storage library to be enabled for all platforms that support the PSA crypto API. + See :ref:`matter_platforms_security_dac_priv_key_its` for more information. + * The stack sizes for OpenThread and CHIP (Matter) threads to increase them for the targets using the CRACEN crypto backend. + * The IPv6 multicast subscription mechanism for Wi-Fi to enable the MLDv2 join procedure and improve reliability in multicast communication. + * Storing the Device Attestation Certificates private key in the Key Management Unit (KMU) to be enabled for nRF54L Series devices. + See :ref:`matter_platforms_security_dac_priv_key_kmu` for more information. + +Matter fork ++++++++++++ + +The Matter fork in the |NCS| (``sdk-connectedhomeip``) contains all commits from the upstream Matter repository up to, and including, the ``v1.3.0.0`` tag. + +Thread +------ + +* Added the :ref:`ug_thread_build_report` and described how to use it. +* Updated the default Trusted Storage AEAD key to Hardware Unique Key (HUK) for supported nRF54L Series devices. + +Zigbee +------ + +* Updated: + + * :ref:`nrfxlib:zboss` to v3.11.5.0 and platform v5.1.6 (``v3.11.5.0+5.1.6``). + They contain a fix for the ZBOSS traces. + For details, see :ref:`zboss_changelog`. + * :ref:`ZBOSS Network Co-processor Host ` package to the new version v2.2.4. + +* Fixed the :file:`zb_add_ota_header.py` script not being able to handle an ``APPLICATION_VERSION_STRING`` which includes a tweak, such as ``1.0.0+3``. + +Wi-Fi +----- + +* Added: + + * The :ref:`ug_nrf70_developing_offloaded_raw_tx` feature. + * Support for :ref:`WPA2-EAP-TLS ` enterprise security mode. + * Support for :ref:`Platform Security Architecture (PSA) crypto APIs ` for WPA2™ security profiles. + +* Updated: + + * The WPA supplicant is now switched to Zephyr upstream's fork instead of |NCS|. + * The WPA supplicant now uses ``kernel heap`` instead of ``application (libc) heap``. + +Applications +============ + +This section provides detailed lists of changes by :ref:`application `. + +Machine learning +---------------- + +* Added: + + * Support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (``nrf54l15dk/nrf54l15/cpuapp``). + * Support for sampling ADXL362 sensor from PPR core on the :ref:`zephyr:nrf54h20dk_nrf54h20`. + +Asset Tracker v2 +---------------- + +* Added a note that the :ref:`asset_tracker_v2` application is in the maintenance mode and that it is recommended to use the :ref:`nrf_cloud_multi_service` sample instead. + +Connectivity bridge +------------------- + +* Updated the new nrfx UARTE driver implementation by setting the :kconfig:option:`CONFIG_UART_NRFX_UARTE_LEGACY_SHIM` Kconfig option to ``n``. + This resolves an issue where data from UART0 ends up in UART1 sometimes after the device was reset. + +Matter bridge +------------- + +* Added: + + * The :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_ZAP_FILES_PATH` Kconfig option that specifies ZAP files location for the application. + By default, the option points to the :file:`src/default_zap` directory and can be changed to any path relative to application's location that contains the ZAP file and :file:`zap-generated` directory. + * Experimental support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board. + * Optional smart plug device functionality. + * Experimental support for the Thread protocol. + * The :ref:`multiprotocol_bt_thread` page. + +nRF5340 Audio +------------- + +* Added: + + * The functions ``bt_hci_err_to_str()`` and ``bt_security_err_to_str()`` that are used to allow printing error codes as strings. + Each function returns string representations of the error codes when the corresponding Kconfig option, :kconfig:option:`CONFIG_BT_HCI_ERR_TO_STR` or :kconfig:option:`CONFIG_BT_SECURITY_ERR_TO_STR`, is enabled. + * CSIS to the BIS sink if the scan delegator feature, ``CONFIG_BT_AUDIO_SCAN_DELEGATOR``, is enabled. + Once a phone is connected to a BIS sink, the phone will find and connect to the second headset. + Also, the phone can control the BIS headset in a group and deliver the PAST to both headsets at the same time. + * Create CIG after reading the PACS from the first connected unicast server. + * A minimal scan delegator to the unicast server if the feature, ``CONFIG_BT_AUDIO_SCAN_DELEGATOR``, is enabled. + * Available or support context type to PACS in broadcast sink and unicast client if the feature, :kconfig:option:`CONFIG_BT_PAC_SRC_NOTIFIABLE` is enabled. + * The :ref:`nrf_auraconfig` sample. + +* Updated the :ref:`nrf53_audio_app_overview` documentation page with the :ref:`nrf53_audio_app_overview_files` section. +* Removed the ``EXPERIMENTAL`` flag from the sample rate converter. + +nRF Desktop +----------- + +* Added: + + * Support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (board target ``nrf54l15dk/nrf54l15/cpuapp``), replacing the nRF54L15 PDK (board target ``nrf54l15pdk/nrf54l15/cpuapp``). + * A debug configuration enabling the `Fast Pair`_ feature on the nRF54L15 DK with the ``nrf54l15dk/nrf54l15/cpuapp`` board target. + * An application versioning using the :file:`VERSION` file. + The versioning is only applied to the application configurations that use the MCUboot bootloader. + * The :ref:`CONFIG_DESKTOP_USB_HID_REPORT_SENT_ON_SOF ` Kconfig option to :ref:`nrf_desktop_usb_state`. + The option allows to synchronize providing HID data with USB Start of Frame (SOF). + The feature reduces the negative impact of jitter related to USB polls, but it also increases HID data latency. + For details, see :ref:`nrf_desktop_usb_state_sof_synchronization`. + * Local HID report buffering in :ref:`nrf_desktop_usb_state`. + This ensures that the memory buffer passed to the USB next stack is valid until a HID report is sent and allows to enqueue up to two HID input reports for a USB HID instance (used only when :ref:`CONFIG_DESKTOP_USB_HID_REPORT_SENT_ON_SOF ` Kconfig option is enabled). + * Bootup logs with the manifest semantic version information to :ref:`nrf_desktop_dfu_mcumgr` when the module is used for SUIT DFU and the SDFW supports semantic versioning (requires v0.6.2 and higher). + * Manifest semantic version information to the firmware information response in :ref:`nrf_desktop_dfu` when the module is used for SUIT DFU and the SDFW supports semantic versioning (requires v0.6.2 and higher). + * A missing DTS node compatible with ``zephyr,hid-device`` to the nRF52840 DK in the MCUboot QSPI configuration. + This ensures support for HID over USB when the USB next stack is selected. + * Partial erase feature as implied in the USB next stack (:ref:`CONFIG_DESKTOP_USB_STACK_NEXT `) for the nRF SoC flash driver (:kconfig:option:`CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE`). + This is done to improve stability of the USB next stack. + The partial erase feature works around device errors that might be reported by Windows USB host in Device Manager if USB cable is connected while erasing secondary image slot in the background. + * As implied in the Bluetooth connectivity support (:ref:`CONFIG_DESKTOP_BT `), a separate workqueue is used for connection TX notify processing (:kconfig:option:`CONFIG_BT_CONN_TX_NOTIFY_WQ`) if MPSL is used for synchronization between the flash memory driver and radio (:kconfig:option:`CONFIG_SOC_FLASH_NRF_RADIO_SYNC_MPSL`). + This is done to work around the timeout in MPSL flash synchronization (``NCSDK-29354`` known issue). + See :ref:`known_issues` for details. + * Note informing about :file:`dfu_application.zip` format version ``1`` support as part of :ref:`nrf_desktop_fwupd`. + The format version ``1`` is supported by the fwupd since the 1.9.25 release. + * :ref:`nrf_desktop_dvfs` that can be used on the nRF54H20 SoC. + The module is responsible for switching the frequency and voltage according to the application's needs. + The module ensures that lowest DVFS frequency and voltage are used unless computing-intensive operation requests higher frequency and voltage. + The module listens to Event Manager events and applies DVFS frequency according to the application state. + * Handling of :c:struct:`hid_report_subscriber_event` to :ref:`nrf_desktop_hid_forward`. + Handling the :c:struct:`hid_report_subscriber_event` allows to take into account the maximum number of reports with different IDs, which can be processed by the subscriber (:c:member:`hid_report_subscriber_event.report_max`). + * :ref:`nrf_desktop_hid_reportq`, which is integrated in :ref:`nrf_desktop_hid_forward`. + The utility can be used by an application module to simplify enqueuing HID input reports received from connected HID peripherals before providing them to HID subscriber. + The HID report queue utility is used to locally enqueue reports at the source to prevent HID report drops. + The ``CONFIG_DESKTOP_HID_FORWARD_MAX_ENQUEUED_REPORTS`` Kconfig option was removed, use :ref:`CONFIG_DESKTOP_HID_REPORTQ_MAX_ENQUEUED_REPORTS ` instead. + * The Kconfig option :ref:`CONFIG_DESKTOP_HID_FORWARD_SUBSCRIBER_COUNT ` that configures the number of HID subscribers in :ref:`nrf_desktop_hid_forward`. + The value of the Kconfig option must match the number of USB HID class instances. + * Bluetooth LE Low Latency Packet Mode (LLPM) dependency (:kconfig:option:`CONFIG_CAF_BLE_USE_LLPM`) to :ref:`nrf_desktop_hfclk_lock`. + Using LLPM connection parameters reduces HID data latency far more significantly than enabling the hotfix. + +* Updated: + + * The :kconfig:option:`CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL` Kconfig option value in configurations with the Fast Pair support. + The value is now aligned with the Fast Pair requirements. + * The :kconfig:option:`CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE` Kconfig option value in the nRF54L15 DK configurations to ensure short write slots. + It prevents timeouts in the MPSL flash synchronization caused by allocating long write slots while maintaining a Bluetooth LE connection with short intervals and no connection latency. + * The method of obtaining hardware ID using Zephyr's :ref:`zephyr:hwinfo_api` on the :ref:`zephyr:nrf54h20dk_nrf54h20`. + Replaced the custom implementation of the :c:func:`z_impl_hwinfo_get_device_id` function in the nRF Desktop application with the native Zephyr driver function that now supports the :ref:`zephyr:nrf54h20dk_nrf54h20` board target. + Removed the ``CONFIG_DESKTOP_HWINFO_BLE_ADDRESS_FICR_POSTFIX`` Kconfig option as a postfix constant is no longer needed for the Zephyr native driver. + The driver uses ``BLE.ADDR``, ``BLE.IR``, and ``BLE.ER`` fields of the Factory Information Configuration Registers (FICR) to provide 8 bytes of unique hardware ID. + * The :ref:`nrf_desktop_dfu_mcumgr` to recognize the MCUmgr custom group ID (:kconfig:option:`CONFIG_MGMT_GROUP_ID_SUIT`) from the SUITFU subsystem (:kconfig:option:`CONFIG_MGMT_SUITFU`) as a DFU-related command group. + * All build configurations with the DFU over MCUmgr support to require encryption for operations on the Bluetooth GATT SMP service (see the :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW_ENCRYPT` Kconfig option). + The Bluetooth pairing procedure of the unpaired Bluetooth peers must now be performed before the DFU operation. + * The :ref:`nrf_desktop_dfu_mcumgr` to enable the MCUmgr handler that is used to report the bootloader information (see the :kconfig:option:`CONFIG_MCUMGR_GRP_OS_BOOTLOADER_INFO` Kconfig option). + * The MCUboot image configurations for the :ref:`zephyr:nrf54l15dk_nrf54l15` board to enable Link Time Optimization (LTO) (see the :kconfig:option:`CONFIG_LTO` Kconfig option) and reduce the memory footprint of the bootloader. + * The partition memory configurations for the :ref:`zephyr:nrf54l15dk_nrf54l15` board to optimize the size of the MCUboot bootloader partition. + * The :ref:`nrf_desktop_constlat` to use the :c:func:`nrfx_power_constlat_mode_request` and :c:func:`nrfx_power_constlat_mode_free` functions instead of :c:func:`nrf_power_task_trigger` to control requesting Constant Latency sub-power mode. + This ensures correct behavior if another source requests Constant Latency sub-power mode through the nrfx API. + * The :ref:`CONFIG_DESKTOP_CONSTLAT_DISABLE_ON_STANDBY ` Kconfig option depends on :kconfig:option:`CONFIG_CAF_PM_EVENTS`. + CAF Power Management events support is necessary to disable constant latency interrupts on standby. + * The main application's configuration directory (``APPLICATION_CONFIG_DIR`` CMake option) is set only in the :file:`CMakeLists.txt` file of the application. + Configuration directories used for other built images and sysbuild are set through sysbuild's :file:`CMakeLists.txt` file. + +* Deprecated the :ref:`nrf_desktop_hfclk_lock`. + Use the :ref:`CONFIG_DESKTOP_BLE_LOW_LATENCY_LOCK ` Kconfig option instead. + Setting the peripheral latency Bluetooth LE connection parameter to ``0`` for a connection that uses Low Latency Packet Mode connection interval on peripheral leads to keeping the high frequency clock enabled. + That mitigates the extra HID report latency caused by the high frequency clock startup delay. + +* Removed support for the nRF54L15 PDK revision v0.2.x. + +Serial LTE modem +---------------- + +* Added: + + * DTLS support for the ``#XUDPSVR`` and ``#XSSOCKET`` (UDP server sockets) AT commands when the :file:`overlay-native_tls.conf` configuration file is used. + * The :kconfig:option:`CONFIG_SLM_PPP_FALLBACK_MTU` Kconfig option that is used to control the MTU used by PPP when the cellular link MTU is not returned by the modem in response to the ``AT+CGCONTRDP=0`` AT command. + * Handler for new nRF Cloud event type :c:enumerator:`NRF_CLOUD_EVT_RX_DATA_DISCON`. + * Support for socket option ``AT_SO_IPV6_DELAYED_ADDR_REFRESH``. + +* Updated: + + * AT string parsing to utilize the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. + * The ``#XUDPCLI`` and ``#XSSOCKET`` (UDP client sockets) AT commands to use Zephyr's Mbed TLS with DTLS when the :file:`overlay-native_tls.conf` configuration file is used. + +* Fixed reading network registration status with ``AT+CEREG`` when the :ref:`CONFIG_SLM_AUTO_CONNECT ` option is enabled. + +* Removed: + + * Support for the :file:`overlay-native_tls.conf` configuration file with the ``thingy91/nrf9160/ns`` board target. + * Support for deprecated RAI socket options ``AT_SO_RAI_LAST``, ``AT_SO_RAI_NO_DATA``, ``AT_SO_RAI_ONE_RESP``, ``AT_SO_RAI_ONGOING``, and ``AT_SO_RAI_WAIT_MORE``. + * The ``#XCARRIERCFG="bootstrap_smartcard"`` AT command. + +Thingy:53: Matter weather station +--------------------------------- + +* Added the :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_ZAP_FILES_PATH` Kconfig option, which specifies ZAP files location for the application. + By default, the option points to the :file:`src/default_zap` directory and can be changed to any path relative to application's location that contains the ZAP file and :file:`zap-generated` directory. + +Samples +======= + +This section provides detailed lists of changes by :ref:`sample `. + +Bluetooth samples +----------------- + +* Added: + + * The :ref:`ble_radio_notification_conn_cb` sample demonstrating how to use the :ref:`ug_radio_notification_conn_cb` feature. + * The :ref:`bluetooth_conn_time_synchronization` sample demonstrating microsecond-accurate synchronization of connections that are happening over Bluetooth Low Energy Asynchronous Connection-oriented Logical transport (ACL). + * The :ref:`ble_subrating` sample that showcases the effect of the LE Connection Subrating feature on the duty cycle of a connection. + * The :ref:`nrf_auraconfig` sample that implements the :ref:`BIS gateway mode ` and can act as an `Auracast `_ broadcaster if you are using a preset compatible with Auracast. + * Support for the :ref:`zephyr:nrf54l15dk_nrf54l15` board in the following samples: + + * :ref:`central_bas` + * :ref:`bluetooth_central_hr_coded` + * :ref:`multiple_adv_sets` + * :ref:`peripheral_bms` + * :ref:`peripheral_cgms` + * :ref:`peripheral_cts_client` + * :ref:`peripheral_gatt_dm` + * :ref:`peripheral_hr_coded` + * :ref:`peripheral_mds` + * :ref:`peripheral_nfc_pairing` + * :ref:`power_profiling` + * :ref:`peripheral_rscs` + * :ref:`shell_bt_nus` + * :ref:`ble_throughput` + * :ref:`bluetooth_central_dfu_smp` + * :ref:`peripheral_status` + +* :ref:`bluetooth_isochronous_time_synchronization` sample: + + * Fixed **LED** toggling issues on nRF52 and nRF53 Series devices that would occur after RTC wraps that occur approximately every 8.5 minutes. + The **LED** previously toggled unintentionally, at the wrong point in time, or not at all. + +* :ref:`ble_event_trigger` sample: + + * Moved to the :file:`samples/bluetooth/event_trigger` folder. + +* :ref:`peripheral_hr_coded` sample: + + * Fixed an issue where the HCI LE Set Extended Advertising Enable command was called with a NULL pointer. + +* :ref:`peripheral_mds` sample: + + * Fixed an issue where device ID was incorrectly set during system initialization because MAC address was not available at that time. + The device ID is now set to ``ncs-ble-testdevice`` by default using the :kconfig:option:`CONFIG_MEMFAULT_NCS_DEVICE_ID` Kconfig option. + +* :ref:`power_profiling` sample: + + * Added :ref:`CONFIG_BT_POWER_PROFILING_LED_DISABLED ` Kconfig option to disable the LEDs. + +* :ref:`ble_llpm` sample: + + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board. + +* :ref:`bluetooth_radio_coex_1wire_sample` sample: + + * Added support for the ``nrf54h20dk/nrf54h20/cpurad`` and ``nrf54l15dk/nrf54l15/cpuapp`` build targets. + +Bluetooth Fast Pair samples +--------------------------- + +* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (board target ``nrf54l15dk/nrf54l15/cpuapp``), replacing the nRF54L15 PDK (board target ``nrf54l15pdk/nrf54l15/cpuapp``). + +* Updated: + + * The values for the :kconfig:option:`CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL` Kconfig option in all configurations, and for the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_TX_POWER_CORRECTION_VAL` Kconfig option in configurations with the Find My Device Network (FMDN) extension support. + The values are now aligned with the Fast Pair requirements. + * The sample configurations to use a separate workqueue for connection TX notify processing (:kconfig:option:`CONFIG_BT_CONN_TX_NOTIFY_WQ`). + This is done to work around the timeout in MPSL flash synchronization (``NCSDK-29354`` known issue). + See :ref:`known_issues` for details. + +* :ref:`fast_pair_locator_tag` sample: + + * Added: + + * LED indication on development kits for the Fast Pair advertising state. + * An application versioning using the :file:`VERSION` file. + * The DFU support, which can be enabled using the ``SB_CONFIG_APP_DFU`` sysbuild Kconfig option. + DFU is available for all supported targets except the ``debug`` configurations of :ref:`zephyr:nrf52dk_nrf52832` and :ref:`zephyr:nrf52833dk_nrf52833` due to size constraints. + * An application module for the DULT motion detector feature and the new UI for supported board targets to interact with this feature. + The development kit board targets simulate the motion with the button presses. + The Thingy:53 target uses a 6-axis IMU with gyroscope to detect motion. + + * Updated: + + * The :ref:`ipc_radio` image configuration by splitting it into the debug and release configurations. + * The location of the sample configuration. + It has been moved from the root sample directory to the dedicated folder (:file:`locator_tag/configuration`). + * The ``fp_adv`` module to use the trigger requests for the Fast Pair advertising state instead of setting the Fast Pair advertising mode directly. + +Bluetooth Mesh samples +---------------------- + +* Added: + + * Support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (board target ``nrf54l15dk/nrf54l15/cpuapp``), replacing the nRF54L15 PDK (board target ``nrf54l15pdk/nrf54l15/cpuapp``). + * Support for Zephyr Memory Storage (ZMS) when compiling for the :ref:`zephyr:nrf54l15dk_nrf54l15` board. + +* :ref:`bluetooth_ble_peripheral_lbs_coex` sample: + + * Updated the usage of the :c:macro:`BT_LE_ADV_CONN` macro. + See the Bluetooth Host section in Zephyr's :ref:`zephyr:migration_3.7`. + +Cellular samples +---------------- + +* Added the :ref:`uicc_lwm2m_sample` sample. + +* :ref:`fmfu_smp_svr_sample` sample: + + * Removed the unused :ref:`at_cmd_parser_readme` library. + +* :ref:`modem_shell_application` sample: + + * Added ``link modem`` command for initializing and shutting down the modem. + * Updated to use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. + +* :ref:`nrf_cloud_rest_fota` sample: + + * Added: + + * Support for setting the FOTA update check interval using the config section in the shadow. + * Support for SMP FOTA on the nRF9160 DK. + + * Removed redundant logging that is now done by the :ref:`lib_nrf_cloud` library. + +* :ref:`nrf_cloud_multi_service` sample: + + * Added: + + * The :kconfig:option:`CONFIG_TEST_COUNTER_MULTIPLIER` Kconfig option to multiply the number of test counter messages sent, for testing purposes. + * A handler for new nRF Cloud event type :c:enumerator:`NRF_CLOUD_EVT_RX_DATA_DISCON` to stop sensors and location services. + * Board support files to enable Wi-Fi scanning for the Thingy:91 X. + * The :kconfig:option:`CONFIG_SEND_ONLINE_ALERT` Kconfig option to enable calling the :c:func:`nrf_cloud_alert` function on startup. + * Logging of the `reset reason code `_. + * The :kconfig:option:`CONFIG_POST_PROVISIONING_INTERVAL_M` Kconfig option to reduce the provisioning connection interval once the device successfully connects. + + * Updated: + + * Wi-Fi overlays from newlibc to picolib. + * Handling of JITP association to improve speed and reliability. + * Renamed the :file:`overlay_nrf7002ek_wifi_no_lte.conf` overlay to :file:`overlay_nrf700x_wifi_mqtt_no_lte.conf`. + * Renamed the :file:`overlay_nrf7002ek_wifi_coap_no_lte.conf` overlay to :file:`overlay_nrf700x_wifi_coap_no_lte.conf`. + * The value of the :kconfig:option:`CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE` Kconfig option in the :file:`overlay_coap.conf` file. + A larger value is required now that the :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option is enabled. + * Handling of credentials check to disable network if not using the provisioning service. + + * Fixed an issue where the accepted shadow was not marked as received because the config section did not yet exist in the shadow. + * Removed redundant logging that is now done by the :ref:`lib_nrf_cloud` library. + +* :ref:`nrf_cloud_rest_device_message` sample: + + * Added: + + * Support for dictionary logs using REST. + * The :kconfig:option:`CONFIG_SEND_ONLINE_ALERT` Kconfig option to enable calling the :c:func:`nrf_cloud_alert` function on startup. + * Logging of the `reset reason code `_. + + * Updated: + + * Credentials check to also see if AWS root CA cert is likely present. + * Credentials check failure to disable network if not using the provisioning service. + + * Removed redundant logging that is now done by the :ref:`lib_nrf_cloud` library. + +* :ref:`nrf_cloud_rest_cell_location` sample: + + * Removed redundant logging that is now done by the :ref:`lib_nrf_cloud` library. + +* :ref:`smp_svr` sample: + + * Added sysbuild configuration files. + +Cryptography samples +-------------------- + +* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (board target ``nrf54l15dk/nrf54l15/cpuapp/ns``), replacing the nRF54L15 PDK (board target ``nrf54l15pdk/nrf54l15/cpuapp/ns``). + +Debug samples +------------- + +* :ref:`memfault_sample` sample: + + * Increased the value of the :kconfig:option:`CONFIG_MAIN_STACK_SIZE` Kconfig option to 8192 bytes to avoid stack overflow. + +DECT NR+ samples +---------------- + +* Added the :ref:`dect_shell_application` sample. + +Edge Impulse samples +-------------------- + +* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` board in the following samples: + + * :ref:`ei_data_forwarder_sample` + * :ref:`ei_wrapper_sample` + +Matter samples +-------------- + +* Added: + + * The :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_ZAP_FILES_PATH` Kconfig option, which specifies ZAP files location for the sample. + By default, the option points to the :file:`src/default_zap` directory and can be changed to any path relative to sample's location that contains the ZAP file and :file:`zap-generated` directory. + * Support for the :ref:`zephyr:nrf54l15dk_nrf54l15`, replacing the nRF54L15 PDK. + * Support for :ref:`Trusted Firmware-M ` on the nRF54L15 SoC. + * The :ref:`matter_smoke_co_alarm_sample` sample that demonstrates implementation of Matter Smoke CO alarm device type. + * The :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_LEDS` Kconfig option, which can be used to disable the LEDs in the Matter sample or application. + +* Updated: + + * All samples to enable the :ref:`ug_thread_build_report` generation. + * Enabled Matter OTA on the nRF54H20 DK. + +* :ref:`matter_lock_sample` sample: + + * Added :ref:`Matter Lock schedule snippet ` and updated the documentation to use the snippet. + + * Updated: + + * The low power configuration to be enabled for the nRF54L15 DK target. + * The Link-Time Optimization (LTO) to be enabled for the nRF7002 DK target. + +* :ref:`matter_smoke_co_alarm_sample` sample: + + * Updated the low power configuration to be enabled for the nRF54L15 DK target. + +* :ref:`matter_template_sample` sample: + + * Updated the DAC private key migration from factory data to KMU to be enabled for the nRF54L Series SoCs by default. + +* :ref:`matter_window_covering_sample` sample: + + * Updated the low power configuration to be enabled for the nRF54L15 DK target. + + +Networking samples +------------------ + +* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` board with an nRF7002 EB device for the following samples: + + * :ref:`aws_iot` + * :ref:`download_sample` + * :ref:`mqtt_sample` + * :ref:`https_client` + * :ref:`udp_sample` + * :ref:`net_coap_client_sample` + +* :ref:`http_server` sample: + + * Fixed an issue so that the sample does not fail with a fatal error if IPv4 or IPv6 server setup fails. + +nRF5340 samples +--------------- + +* :ref:`smp_svr_ext_xip` sample: + + * Added: + + * Support for sysbuild. + * Support to demonstrate direct-xip building and building without network core support. + +Peripheral samples +------------------ + +* :ref:`802154_sniffer` sample: + + * Added sysbuild configuration for nRF5340. + * Increased the number of RX buffers to reduce the chances of frame drops during high traffic periods. + * Disabled the |NCS| boot banner. + * Fixed the dBm value reported for captured frames. + +* :ref:`802154_phy_test` sample: + + * Added build configuration for the nRF54H20. + +* :ref:`radio_test` sample: + + * Added packet reception limit for the ``start_rx`` command. + +PMIC samples +------------ + +* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` and :ref:`zephyr:nrf54h20dk_nrf54h20` to the PMIC samples. + +* :ref:`npm1300_fuel_gauge` sample: + + * Updated to accommodate API changes in nRF Fuel Gauge library v0.11.1. + +Protocols serialization samples +------------------------------- + +* Added the :ref:`nrf_rpc_protocols_serialization_client` and the :ref:`nrf_rpc_protocols_serialization_server` samples. + +Trusted Firmware-M (TF-M) samples +--------------------------------- + +* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (``nrf54l15dk/nrf54l15/cpuapp/ns``), replacing the nRF54L15 PDK (``nrf54l15pdk/nrf54l15/cpuapp/ns``). + +* :ref:`tfm_psa_template` sample: + + * Added support for updating the network core on the nRF5340 DK. + +Thread samples +-------------- + +* Updated all samples to enable the :ref:`ug_thread_build_report` generation. + +* :ref:`ot_cli_sample` sample: + + * Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` in the low-power snippet. + * Added experimental support for :ref:`Trusted Firmware-M ` on the nRF54L15 SoC. + +Zigbee samples +-------------- + +* :ref:`zigbee_light_switch_sample` sample: + + * Added the option to configure transmission power. + * Fixed the FOTA configuration for the nRF5340 DK. + +Wi-Fi samples +------------- + +* Added: + + * The :ref:`wifi_offloaded_raw_tx_packet_sample` sample that demonstrates offloaded raw transmit beaconing, allowing the beaconing to be done autonomously by nRF7002 instead of being triggered by the host. + This allows using simpler hosts as it requires less processing from the host side. + +* :ref:`wifi_radio_test` sample: + + * Added capture timeout as a parameter for packet capture. + * Expanded the scope of ``wifi_radio_test show_config`` subcommand and rectified the behavior of ``wifi_radio_test tx_pkt_preamble`` subcommand. + +* :ref:`softap_wifi_provision_sample` sample: + + * Increased the value of the :kconfig:option:`CONFIG_SOFTAP_WIFI_PROVISION_THREAD_STACK_SIZE` Kconfig option to 8192 bytes to avoid stack overflow. + +* :ref:`wifi_shell_sample` sample: + + * Added: + + * Support for running the full stack on the Thingy:91 X. + This is a special configuration that uses the nRF5340 as the host chip instead of the nRF9151. + * Overlay to support Enterprise mode. + +Other samples +------------- + +* Added: + + * The :ref:`nrf_compression_mcuboot_compressed_update` sample that demonstrates how to enable and use :ref:`image compression within MCUboot `. + * A sample for the :ref:`multicore_idle_gpio_test`. + * A sample for the :ref:`multicore_idle_with_pwm_test`. + +* :ref:`coremark_sample` sample: + + * Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` (board target ``nrf54l15dk/nrf54l15/cpuapp``), replacing the nRF54L15 PDK (board target ``nrf54l15pdk/nrf54l15/cpuapp``). + * Updated the logging mode to minimal (:kconfig:option:`CONFIG_LOG_MODE_MINIMAL`) to reduce the sample's memory footprint and ensure no logging interference with the running benchmark. + +Drivers +======= + +This section provides detailed lists of changes by :ref:`driver `. + +Wi-Fi drivers +------------- + +* The nRF70 Series Wi-Fi driver has been upstreamed to Zephyr, so the source code has been removed from the |NCS|. + However, the :ref:`driver documentation ` remains available within the |NCS| documentation. + +Libraries +========= + +This section provides detailed lists of changes by :ref:`library `. + +Binary libraries +---------------- + +* :ref:`liblwm2m_carrier_readme` library: + + * Updated to v3.6.0. + See the :ref:`liblwm2m_carrier_changelog` for detailed information. + +Bluetooth libraries and services +-------------------------------- + +* :ref:`bt_fast_pair_readme` library: + + * Added: + + * The :kconfig:option:`CONFIG_BT_FAST_PAIR_BN` Kconfig option that enables support for the Battery Notification extension. + You must enable this option to access Fast Pair API elements associated with the Battery Notification extension. + * The :kconfig:option:`CONFIG_BT_FAST_PAIR_SUBSEQUENT_PAIRING` Kconfig option allowing the user to control the support for the Fast Pair subsequent pairing feature. + * The :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE` Kconfig choice option allowing the user to select their target Fast Pair use case. + The :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_UNKNOWN`, :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_INPUT_DEVICE`, :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_LOCATOR_TAG` and :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_MOUSE` Kconfig options represent the supported use cases that can be selected as part of this Kconfig choice option. + * The :kconfig:option:`CONFIG_BT_FAST_PAIR_BOND_MANAGER` Kconfig option that enables the Fast Pair bond management functionality. + If this option is enabled, the Fast Pair subsystem tracks the Bluetooth bonds created through the Fast Pair Procedure and unpairs them if the procedure is incomplete or the Account Key associated with the bonds is removed. + It also unpairs the Fast Pair Bluetooth bonds on Fast Pair factory reset. + The option is enabled by default for Fast Pair use cases that are selected using :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_INPUT_DEVICE` and :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_MOUSE` Kconfig options. + * The DULT motion detector feature integration in the FMDN extension. + You can enable this feature using the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_DULT_MOTION_DETECTOR` Kconfig option. + + * Updated the default values of the following Fast Pair Kconfig options: + + * :kconfig:option:`CONFIG_BT_FAST_PAIR_SUBSEQUENT_PAIRING` + * :kconfig:option:`CONFIG_BT_FAST_PAIR_REQ_PAIRING` + * :kconfig:option:`CONFIG_BT_FAST_PAIR_PN` + * :kconfig:option:`CONFIG_BT_FAST_PAIR_GATT_SERVICE_MODEL_ID` + + These Kconfig options are now disabled by default and are selected only by the Fast Pair use cases that require them. + + * Removed: + + * The Mbed TLS cryptographic backend support in Fast Pair, because it is superseded by the PSA backend. + Consequently, the ``CONFIG_BT_FAST_PAIR_CRYPTO_MBEDTLS`` Kconfig option has also been removed. + * The default overrides for the :kconfig:option:`CONFIG_BT_DIS` and :kconfig:option:`CONFIG_BT_DIS_FW_REV` Kconfig options that enable these options together with the Google Fast Pair Service. + This configuration is now selected only by the Fast Pair use cases that require the Device Information Service (DIS). + * The default override for the :kconfig:option:`CONFIG_BT_DIS_FW_REV_STR` Kconfig option that was set to :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` if :kconfig:option:`CONFIG_BOOTLOADER_MCUBOOT` was enabled. + The default override is now handled in the Kconfig of the Zephyr Device Information Service (DIS) module and is based on Zephyr's :ref:`zephyr:app-version-details` that uses the :file:`VERSION` file. + * The ``bt_fast_pair_factory_reset_user_action_prepare()`` weak function definition, which could previously be overridden to prepare for the incoming Fast Pair factory reset. + You can still override the ``bt_fast_pair_factory_reset_user_action_perform()`` weak function to perform custom actions during the Fast Pair factory reset. + +* :ref:`bt_le_adv_prov_readme`: + + * Added the :c:member:`bt_le_adv_prov_adv_state.adv_handle` field to the :c:struct:`bt_le_adv_prov_adv_state` structure to store the advertising handle. + If the :kconfig:option:`CONFIG_BT_EXT_ADV` Kconfig option is enabled, you can use the ``bt_hci_get_adv_handle()`` function to obtain the advertising handle for the advertising set that employs :ref:`bt_le_adv_prov_readme`. + If the Kconfig option is disabled, the :c:member:`bt_le_adv_prov_adv_state.adv_handle` field must be set to ``0``. + This field is currently used by the TX Power provider (:kconfig:option:`CONFIG_BT_ADV_PROV_TX_POWER`). + * Updated the :kconfig:option:`CONFIG_BT_ADV_PROV_FAST_PAIR_SHOW_UI_PAIRING` Kconfig option and the :c:func:`bt_le_adv_prov_fast_pair_show_ui_pairing` function to require the enabling of the :kconfig:option:`CONFIG_BT_FAST_PAIR_SUBSEQUENT_PAIRING` Kconfig option. + +Common Application Framework +---------------------------- + +* :ref:`caf_ble_state`: + + * The Low Latency Packet Mode (:kconfig:option:`CONFIG_CAF_BLE_USE_LLPM`) cannot be enabled on nRF53 SoC Series (:kconfig:option:`CONFIG_SOC_SERIES_NRF53X`). + The nRF53 SoC Series does not support LLPM. + +Debug libraries +--------------- + +* :ref:`mod_memfault` library: + + * Added location metrics, including GNSS, cellular, and Wi-Fi specific metrics. + The metrics are enabled with the :kconfig:option:`CONFIG_MEMFAULT_NCS_LOCATION_METRICS` Kconfig option. + +DFU libraries +------------- + +* Added the :ref:`subsys_suit` library that provides functionality to a local domain for managing the update based on the SUIT manifest. + +* :ref:`lib_dfu_target` library: + + * Added SUIT cache processing to the DFU Target SUIT library, as described in the :ref:`lib_dfu_target_suit_style_update` section. + * Updated the DFU Target SUIT implementation to the newest version of the SUIT. + +Modem libraries +--------------- + +* Added: + + * The :ref:`at_parser_readme` library that parses AT command responses, notifications, and events. + Compared to the deprecated :ref:`at_cmd_parser_readme` library, it does not allocate memory dynamically and has a smaller footprint. + For more information on how to transition from the :ref:`at_cmd_parser_readme` library to the :ref:`at_parser_readme` library, see the :ref:`migration guide `. + * The :ref:`lib_uicc_lwm2m` library that reads the LwM2M bootstrap configuration from SIM. + +* :ref:`at_cmd_parser_readme` library: + + * Updated to use the :c:func:`at_parser_cmd_type_get` function instead of :c:func:`at_parser_at_cmd_type_get` to prevent a name collision. + * Deprecated: + + * The :ref:`at_cmd_parser_readme` library in favor of the :ref:`at_parser_readme` library. + The :ref:`at_cmd_parser_readme` library will be removed in a future version. + For more information on how to transition from the :ref:`at_cmd_parser_readme` library to the :ref:`at_parser_readme` library, see the :ref:`migration guide `. + * The Kconfig option :kconfig:option:`CONFIG_AT_CMD_PARSER`, which will be removed in a future release. + +* :ref:`lte_lc_readme` library: + + * Added: + + * The :kconfig:option:`CONFIG_LTE_LC_CONN_EVAL_MODULE` Kconfig option to enable the Connection Parameters Evaluation module. + * The :kconfig:option:`CONFIG_LTE_LC_EDRX_MODULE` Kconfig option to enable the eDRX module. + * The :kconfig:option:`CONFIG_LTE_LC_NEIGHBOR_CELL_MEAS_MODULE` Kconfig option to enable the Neighboring Cell Measurements module. + * The :kconfig:option:`CONFIG_LTE_LC_PERIODIC_SEARCH_MODULE` Kconfig option to enable the Periodic Search Configuration module. + * The :kconfig:option:`CONFIG_LTE_LC_PSM_MODULE` Kconfig option to enable the PSM module. + * The :kconfig:option:`CONFIG_LTE_LC_RAI_MODULE` Kconfig option to enable the RAI module. + * The :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_MODULE` Kconfig option to enable the Modem Sleep Notifications module. + * The :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_MODULE` Kconfig option to enable the TAU Pre-warning module. + * The :c:enumerator:`LTE_LC_EVT_RAI_UPDATE` event that is enabled with the :kconfig:option:`CONFIG_LTE_RAI_REQ` Kconfig option. + This requires the :kconfig:option:`CONFIG_LTE_LC_RAI_MODULE` Kconfig option to be enabled. + + * Updated: + + * To use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. + * The :c:func:`lte_lc_neighbor_cell_measurement` function to return an error for an invalid GCI count. + * The library was reorganized into modules that are enabled through their respective Kconfig options. + By default, the library now enables only the core features related to the network connectivity. + This reorganization reduces flash memory consumption for applications that only use the core features of the library related to network connectivity. + For more information on how to update your project, see the :ref:`migration guide `. + + * The :c:func:`lte_lc_conn_eval_params_get` function now requires the new :kconfig:option:`CONFIG_LTE_LC_CONN_EVAL_MODULE` Kconfig option to be enabled. + * The :c:enumerator:`LTE_LC_EVT_EDRX_UPDATE` event and the :c:func:`lte_lc_ptw_set`, :c:func:`lte_lc_edrx_param_set`, :c:func:`lte_lc_edrx_req`, and :c:func:`lte_lc_edrx_get` functions require the new :kconfig:option:`CONFIG_LTE_LC_EDRX_MODULE` Kconfig option to be enabled. + * The :c:enumerator:`LTE_LC_EVT_NEIGHBOR_CELL_MEAS` event and the :c:func:`lte_lc_neighbor_cell_measurement_cancel`, and :c:func:`lte_lc_neighbor_cell_measurement` functions require the new :kconfig:option:`CONFIG_LTE_LC_NEIGHBOR_CELL_MEAS_MODULE` Kconfig option to be enabled. + * The :c:func:`lte_lc_periodic_search_request`, :c:func:`lte_lc_periodic_search_clear`, :c:func:`lte_lc_periodic_search_get`, and :c:func:`lte_lc_periodic_search_set` functions require the new :kconfig:option:`CONFIG_LTE_LC_PERIODIC_SEARCH_MODULE` Kconfig option to be enabled. + * The :c:enumerator:`LTE_LC_EVT_PSM_UPDATE` event and the :c:func:`lte_lc_psm_param_set`, :c:func:`lte_lc_psm_param_set_seconds`, :c:func:`lte_lc_psm_req`, :c:func:`lte_lc_psm_get`, and :c:func:`lte_lc_proprietary_psm_req` functions require the new :kconfig:option:`CONFIG_LTE_LC_PSM_MODULE` Kconfig option to be enabled. + * The :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_EXIT_PRE_WARNING`, :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_ENTER`, and :c:enumerator:`LTE_LC_EVT_MODEM_SLEEP_EXIT` events require the new :kconfig:option:`CONFIG_LTE_LC_MODEM_SLEEP_MODULE` Kconfig option to be enabled. + * The :c:enumerator:`LTE_LC_EVT_TAU_PRE_WARNING` event requires the new :kconfig:option:`CONFIG_LTE_LC_TAU_PRE_WARNING_MODULE` Kconfig option to be enabled. + + * Deprecated: + + * The :c:macro:`LTE_LC_ON_CFUN` macro. + Use the :c:macro:`NRF_MODEM_LIB_ON_CFUN` macro instead. + * The :c:func:`lte_lc_factory_reset` function. + Use the ``AT%XFACTORYRESET`` AT command instead. + Refer to the :ref:`migration guide ` for more details. + * The :c:enum:`lte_lc_factory_reset_type` type. + * The :c:func:`lte_lc_reduced_mobility_get` and :c:func:`lte_lc_reduced_mobility_set` functions. + Refer to the :ref:`migration guide ` for more details. + * The :c:enum:`lte_lc_reduced_mobility_mode` type. + Refer to the :ref:`migration guide ` for more details. + + * Removed: + + * The ``lte_lc_init()`` function. + All instances of this function can be removed without any additional actions. + * The ``lte_lc_deinit()`` function. + Use the :c:func:`lte_lc_power_off` function instead. + * The ``lte_lc_init_and_connect()`` function. + Use the :c:func:`lte_lc_connect` function instead. + * The ``lte_lc_init_and_connect_async()`` function. + Use the :c:func:`lte_lc_connect_async` function instead. + * The ``CONFIG_LTE_NETWORK_USE_FALLBACK`` Kconfig option. + Instead, use either :kconfig:option:`CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT` or :kconfig:option:`CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT_GPS`. + In addition, you can control the priority between LTE-M and NB-IoT using the :kconfig:option:`CONFIG_LTE_MODE_PREFERENCE` Kconfig option. + +* :ref:`lib_location` library: + + * Fixed: + + * A bug causing the GNSS obstructed visibility detection to sometimes count only part of the tracked satellites. + * A bug causing the GNSS obstructed visibility detection to be sometimes performed twice. + + * Removed the unused :ref:`at_cmd_parser_readme` library. + +* :ref:`lib_zzhc`: + + * Updated to use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. + +* :ref:`modem_info_readme` library: + + * Updated: + + * To use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. + * The formulas of RSRP and RSRQ values in :c:macro:`RSRP_IDX_TO_DBM` and :c:macro:`RSRQ_IDX_TO_DB` based on AT command reference guide updates. + The formulas are now aligned with the modem implementation that has not changed. + + * Fixed a potential issue with scanf in the :c:func:`modem_info_get_current_band` function, which could lead to memory corruption. + + * Removed ``RSRP_OFFSET_VAL``, ``RSRQ_OFFSET_VAL`` and ``RSRQ_SCALE_VAL`` from the API. + Clients should use the :c:macro:`RSRP_IDX_TO_DBM` and the :c:macro:`RSRQ_IDX_TO_DB` macros. + +* :ref:`nrf_modem_lib_readme`: + + * Added: + + * Support for socket option ``SO_IPV6_DELAYED_ADDR_REFRESH``. + * A log warning suggesting a SIM card to be installed if a UICC error is detected by the modem in the :ref:`nrf_modem_lib_lte_net_if`. + + * Updated: + + * The RTT trace backend to allocate the RTT channel at boot, instead of when the modem is activated. + * The flash trace backend to solve concurrency issues when reading traces while writing, and when reinitializing the application (warm start). + * The :ref:`modem_trace_module` to let the trace thread sleep when the modem trace level is set to :c:enumerator:`NRF_MODEM_LIB_TRACE_LEVEL_OFF` using the :c:func:`nrf_modem_lib_trace_level_set` function, and the trace backend returns ``-ENOSPC``. + The trace thread wakes up when another trace level is set. + * The RTT trace backend to return ``-ENOSPC`` when the RTT buffer is full. + This allows the trace thread to sleep to save power. + * The nRF91 socket offload layer is renamed from ``nrf91_sockets`` to ``nrf9x_sockets`` to reflect that the offload layer is not exclusive to the nRF91 Series SiPs. + + * Fixed a bug causing the cell network to be treated as offline if IPv4 is not assigned in the :ref:`nrf_modem_lib_lte_net_if`. + + * Removed: + + * Support for deprecated RAI socket options ``SO_RAI_LAST``, ``SO_RAI_NO_DATA``, ``SO_RAI_ONE_RESP``, ``SO_RAI_ONGOING``, and ``SO_RAI_WAIT_MORE``. + * The mutex in the :c:func:`nrf9x_socket_offload_getaddrinfo` function after updating the :c:func:`nrf_getaddrinfo` function to handle concurrent requests. + +* :ref:`modem_key_mgmt` library: + + * Added the :c:func:`modem_key_mgmt_clear` function to delete all credentials associated with a security tag. + * Updated the :c:func:`modem_key_mgmt_read()` function to return the actual size buffer required to read the certificate if the size provided is too small. + +* :ref:`pdn_readme` library: + + * Added the event ``PDN_EVENT_CTX_DESTROYED`` to indicate when a PDP context is destroyed. + This happens when the modem is switched to minimum functionality mode (``CFUN=0``). + +* :ref:`sms_readme` library: + + * Added the :kconfig:option:`CONFIG_SMS_STATUS_REPORT` Kconfig option to configure whether the SMS status report is requested. + + * Updated: + + * To use the ``AT+CMMS`` AT command when sending concatenated SMS message. + * To set ``7`` as a fallback SMS service center address for type approval SIM cards that do not have it set. + +* :ref:`lib_at_shell` library: + + * Added the :kconfig:option:`CONFIG_AT_SHELL_UNESCAPE_LF` Kconfig option to enable reception of multiline AT commands. + * Updated the :c:func:`at_shell` function to replace ``\n`` with ```` if :kconfig:option:`CONFIG_AT_SHELL_UNESCAPE_LF` is enabled. + +Multiprotocol Service Layer libraries +------------------------------------- + +* Added a 1-wire coexistence implementation that you can enable using the Kconfig option :kconfig:option:`CONFIG_MPSL_CX_1WIRE`. +* Updated the name of the Kconfig option ``CONFIG_MPSL_CX_THREAD`` to :kconfig:option:`CONFIG_MPSL_CX_3WIRE` to better indicate multiprotocol compatibility. +* Fixed an issue where the HFXO would be left on after uninitializing MPSL when the RC oscillator was used as the Low Frequency clock source (DRGN-22809). +* Deprecated the Kconfig option :kconfig:option:`CONFIG_MPSL_CX_BT_1WIRE`. + +Libraries for networking +------------------------ + +* :ref:`lib_lwm2m_client_utils` library: + + * Updated to use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. + * Fixed an issue where a failed delta update for the modem would not clear the state and blocks future delta updates. + This only occurred when an LwM2M Firmware object was used in push mode. + +* :ref:`lib_nrf_cloud_rest` library: + + * Added the function :c:func:`nrf_cloud_rest_shadow_transform_request` to request shadow data using a JSONata expression. + +* :ref:`lib_nrf_cloud` library: + + * Added: + + * The function :c:func:`nrf_cloud_client_id_runtime_set` to set the device ID string if the :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_SRC_RUNTIME` Kconfig option is enabled. + * The functions :c:func:`nrf_cloud_sec_tag_set` and :c:func:`nrf_cloud_sec_tag_get` to set and get the sec tag used for nRF Cloud credentials. + * A new nRF Cloud event type ``NRF_CLOUD_EVT_RX_DATA_DISCON``, which is generated when a device is deleted from nRF Cloud. + * The functions :c:func:`nrf_cloud_print_details` and :c:func:`nrf_cloud_print_cloud_details` to log common nRF Cloud connection information in a uniform way. + * The :kconfig:option:`CONFIG_NRF_CLOUD_PRINT_DETAILS` Kconfig option to enable the above functions. + * The :kconfig:option:`CONFIG_NRF_CLOUD_VERBOSE_DETAILS` Kconfig option to print all details instead of only the device ID. + * Experimental support for shadow transform requests over MQTT using the :c:func:`nrf_cloud_shadow_transform_request` function. + This functionality is enabled by the :kconfig:option:`CONFIG_NRF_CLOUD_MQTT_SHADOW_TRANSFORMS` Kconfig option. + * The :kconfig:option:`CONFIG_NRF_CLOUD_AWS_CA_CERT_SIZE_THRESHOLD` and :kconfig:option:`CONFIG_NRF_CLOUD_COAP_CA_CERT_SIZE_THRESHOLD` Kconfig options to compare with the current root CA certificate size. + * The functions :c:func:`nrf_cloud_sec_tag_coap_jwt_set` and :c:func:`nrf_cloud_sec_tag_coap_jwt_get` to set and get the sec tag used for nRF Cloud CoAP JWT signing. + * FOTA status callback. + * The :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_SMP` Kconfig option to enable experimental support for SMP FOTA. + + * Updated: + + * The :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_SRC_RUNTIME` Kconfig option to be available with CoAP and REST. + * The JSON string representing longitude in ``PVT`` reports from ``lng`` to ``lon`` to align with nRF Cloud. + nRF Cloud still accepts ``lng`` for backward compatibility. + * The handling of MQTT JITP device association to improve speed and reliability. + * To use nRF Cloud's custom MQTT topics instead of the default AWS topics. + * MQTT and CoAP transports to use a single unified DNS lookup mechanism that supports IPv4 and IPv6, fallback to IPv4, and handling of multiple addresses returned by :c:func:`getaddrinfo`. + * The log module in the :file:`nrf_cloud_fota_common.c` file from ``NRF_CLOUD`` to ``NRF_CLOUD_FOTA``. + * The :c:func:`nrf_cloud_credentials_configured_check` function to retrieve the size of the root CA, and compare it to thresholds to decide whether the CoAP, AWS, or both root CA certs are present. + Use this information to log helpful information and decide whether the root CA certificates are compatible with the configured connection type. + * The :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_DOWNLOAD_FRAGMENT_SIZE` Kconfig option to be available and used also when the :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_POLL` Kconfig option is enabled. + The range of the option is now from 128 to 1900 bytes, and the default value is 1700 bytes. + * The function :c:func:`nrf_cloud_fota_poll_process` to be used asynchronously if a callback to handle errors is provided. + + * Fixed: + + * An issue in the :c:func:`nrf_cloud_send` function that prevented data in the provided :c:struct:`nrf_cloud_obj` structure from being sent to the bulk and bin topics. + * An issue where the modem was not shut down from bootloader mode before attempting to initialize in normal mode after an unsuccessful update. + + * Deprecated: + + * The :kconfig:option:`CONFIG_NRF_CLOUD_IPV6` Kconfig option, which now no longer forces the nRF Cloud MQTT transport to use IPv4 when not enabled. + Instead, use the :kconfig:option:`CONFIG_NET_IPV4` and :kconfig:option:`CONFIG_NET_IPV6` Kconfig options to customize which IP versions the :ref:`lib_nrf_cloud` library uses. + * The :kconfig:option:`CONFIG_NRF_CLOUD_STATIC_IPV4` and :kconfig:option:`CONFIG_NRF_CLOUD_STATIC_IPV4_ADDR` Kconfig options. + Support for statically configured nRF Cloud IP Addresses will soon be removed. + Leave :kconfig:option:`CONFIG_NRF_CLOUD_STATIC_IPV4` disabled to instead use automatic DNS lookup. + +* :ref:`lib_nrf_cloud_coap` library: + + * Added: + + * The :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DISCONNECT_ON_FAILED_REQUEST` Kconfig option to disconnect the CoAP client on a failed request. + * The :kconfig:option:`CONFIG_NRF_CLOUD_COAP_JWT_SEC_TAG` Kconfig option to allow for a separate sec tag to be used for nRF Cloud CoAP JWT signing. + + * Updated: + + * To use a shorter resource string for the ``d2c/bulk`` resource. + * The function :c:func:`nrf_cloud_coap_shadow_get` to return ``-E2BIG`` if the received shadow data was truncated because the provided buffer was not big enough. + * The :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option to be enabled by default if either :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_POLL` or :kconfig:option:`CONFIG_NRF_CLOUD_PGPS` is enabled. + + * Fixed: + + * A hard fault that occurred when encoding AGNSS request data and the ``net_info`` field of the :c:struct:`nrf_cloud_rest_agnss_request` structure is NULL. + * An issue where certain CoAP functions would return zero, indicating success, even though there was an error. + + * Removed the experimental status (:kconfig:option:`CONFIG_EXPERIMENTAL`) from the :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option. + +* :ref:`lib_nrf_cloud_log` library: + + * Added: + + * Support for dictionary logs using REST. + * Support for dictionary (binary) logs when connected to nRF Cloud using CoAP. + + * Updated to use INF log level when the cloud side changes the log level. + + * Fixed the missing log source when passing a direct log call to the nRF Cloud logging backend. + This caused the log parser to incorrectly use the first declared log source with direct logs when using dictionary mode. + +* :ref:`lib_fota_download` library: + + * Fixed an issue where the download client instance did not use native TLS although the :kconfig:option:`CONFIG_FOTA_DOWNLOAD_NATIVE_TLS` Kconfig option was enabled. + +* :ref:`lib_mqtt_helper` library: + + * Added the function :c:func:`mqtt_helper_msg_id_get` to get valid message IDs for MQTT messages. + * Updated the :kconfig:option:`CONFIG_MQTT_HELPER_PROVISION_CERTIFICATES` Kconfig option to depend on :kconfig:option:`CONFIG_TLS_CREDENTIALS` instead of specific boards. + +* :ref:`lib_nrf_provisioning` library: + + * Added support for the ``SO_KEEPOPEN`` socket option to keep the socket open even during PDN disconnect and reconnect. + * Updated the check interval logging to use INF to improve customer experience. + +* :ref:`lib_nrf_cloud_alert` library: + + * Updated to use INF log level when cloud side changes the alert enable flag. + +Libraries for NFC +----------------- + +* Added an experimental serialization of NFC tag 2 and tag 4 APIs. +* Fixed a potential issue with handling data pointers in the function ``ring_buf_get_data()`` in the :file:`platform_internal_thread` file. + +nRF RPC libraries +----------------- + +* Added: + + * An experimental serialization of OpenThread APIs. + * The logging backend that sends logs through nRF RPC events. + +* Updated the internal Bluetooth serialization API and Bluetooth callback proxy API to become part of the public :ref:`NRF RPC API `. + +Other libraries +--------------- + +* Added the :ref:`nrf_compression` library with support for the LZMA decompression. + +* :ref:`lib_date_time` library: + + * Added: + + * A retry feature that reattempts failed date-time updates up to a certain number of consecutive times. + * The following Kconfig options: + + * :kconfig:option:`CONFIG_DATE_TIME_RETRY_COUNT` to control whether a retry would be performed and the number of consecutive date-time update retries. + * :kconfig:option:`CONFIG_DATE_TIME_RETRY_INTERVAL_SECONDS` to control how quickly date-time update retries occur. + + * Fixed a bug that caused date-time updates to not be rescheduled under certain circumstances. + +* :ref:`lib_ram_pwrdn` library: + + * Added support for the nRF54L15 SoC. + +* :ref:`dult_readme` library: + + * Added DULT motion detector feature. + You can enable this feature using the :kconfig:option:`CONFIG_DULT_MOTION_DETECTOR` Kconfig option. + +Security libraries +------------------ + +* :ref:`nrf_security_readme` library: + + * Added the :kconfig:option:`CONFIG_PSA_WANT_ALG_SP800_108_COUNTER_CMAC` Kconfig option to key derivation function configurations in :ref:`nrf_security_driver_config`. + The Kconfig option enables support for the derivation function SP 800-108r1 CMAC in counter mode, which is supported by the :ref:`nrf_security_drivers_cracen`. + * Removed the Kconfig options ``CONFIG_PSA_WANT_ALG_CFB`` and ``CONFIG_PSA_WANT_ALG_OFB`` since the Cipher Feedback (CFB) mode and the Output Feedback (OFB) mode are not tested in the test framework. + +* :ref:`trusted_storage_readme` library: + + * Added support for Zephyr Memory Storage (ZMS), as an alternative to the NVS file system. + +sdk-nrfxlib +----------- + +See the changelog for each library in the :doc:`nrfxlib documentation ` for additional information. + +Scripts +======= + +This section provides detailed lists of changes by :ref:`script `. + +* :ref:`nrf_desktop_config_channel_script` script: + + * Added semantic version support for devices that use the :ref:`SUIT DFU `. + +MCUboot +======= + +The MCUboot fork in |NCS| (``sdk-mcuboot``) contains all commits from the upstream MCUboot repository up to and including ``a4eda30f5b0cfd0cf15512be9dcd559239dbfc91``, with some |NCS| specific additions. + +The code for integrating MCUboot into |NCS| is located in the :file:`ncs/nrf/modules/mcuboot` folder. + +The following list summarizes both the main changes inherited from upstream MCUboot and the main changes applied to the |NCS| specific additions: + +* Added: + + * :ref:`Compressed firmware update support `. + * Support for handling SHA512 by serial recovery protocol. + * Support for ED25519 'PURE' signature (``CONFIG_BOOT_SIGNATURE_TYPE_PURE`` in MCUboot). + * Integration of PSA crypto API as cryptographic backend for integration with cryptographic acceleration on the nRF54L15 SoC (``CONFIG_BOOT_USE_PSA_CRYPTO`` in MCUboot). + * Support for signature verification using hardware cryptography (Cracken) on the nRF54L15 SoC. + This is supported either for the ED25519 'PURE' signature or the ED25519 signature. + * Support for storing signature verification keys in hardware KMU on the nRF54L15 SoC. + See Kconfig option :kconfig:option:`CONFIG_BOOT_SIGNATURE_USING_KMU` in MCUboot for details. + * Integration of nRF54L15 SoC's HW cryptography (``SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519``), KMU sysbuild configuration (``SB_CONFIG_MCUBOOT_SIGNATURE_USING_KMU``), and signing script (``SB_CONFIG_BOOT_SIGNATURE_TYPE_PURE``) for building and signing the application in a project. + +* Updated the immutable bootloader to now be protected using the :ref:`fprotect_readme` library on the nRF54L15 SoC (``SB_CONFIG_MCUBOOT_FPROTECT_ALLOW_COMBINED_REGIONS`` and the :kconfig:option:`CONFIG_FPROTECT_ALLOW_COMBINED_REGIONS` Kconfig option). + +* Fixed: + + * An issue with wrong network core address checking in MCUboot for nRF5340 network core firmware updates. + * An issue with MCUboot updates in MCUboot when a swap mode was selected, which could lead to possible data corruption by implementing additional NSIB-specific (overwrite-only) upgrade mode for sysbuild. + * Multiple issues with checking firmware update slot selection in MCUboot for sysbuild. + * An issue with MCUboot cleanup unused slots feature, which could lead to possible empty firmware update of the main image and bricking the device for sysbuild. + +Zephyr +====== + +.. NOTE TO MAINTAINERS: All the Zephyr commits in the below git commands must be handled specially after each upmerge and each nRF Connect SDK release. + +The Zephyr fork in |NCS| (``sdk-zephyr``) contains all commits from the upstream Zephyr repository up to and including ``beb733919d8d64a778a11bd5e7d5cbe5ae27b8ee``, with some |NCS| specific additions. + +For the list of upstream Zephyr commits (not including cherry-picked commits) incorporated into nRF Connect SDK since the most recent release, run the following command from the :file:`ncs/zephyr` repository (after running ``west update``): + +.. code-block:: none + + git log --oneline beb733919d ^ea02b93eea + +For the list of |NCS| specific commits, including commits cherry-picked from upstream, run: + +.. code-block:: none + + git log --oneline manifest-rev ^beb733919d + +The current |NCS| main branch is based on revision ``beb733919d`` of Zephyr. + +.. note:: + For possible breaking changes and changes between the latest Zephyr release and the current Zephyr version, refer to the :ref:`Zephyr release notes `. + +Trusted Firmware-M +================== + +* Added a possibility to read UICR.OTP registers through platform services. +* Updated the TF-M version to v2.1.0. + +Mbed TLS +======== + +* Updated the Mbed TLS version to v3.6.2. + +Documentation +============= + +* Added: + + * The :ref:`ug_app_dev` section, which includes pages from the :ref:`configuration_and_build` section and from the removed Device configuration guides section. + * The :ref:`dfu_tools_mcumgr_cli` page after it was removed from the Zephyr repository. + * The :ref:`ug_nrf54h20_suit_soc_binaries` page. + * The :ref:`ug_nrf54h20_suit_push` page documenting the SUIT push model-based update process. + * The :ref:`ug_nrf54h20_suit_recovery` page. + * The :ref:`ug_nrf54h20_suit_device_config` page. + * The :ref:`ug_nrf54h20_flpr` page. + * The :ref:`nrf_rpc_uart` page. + * The :ref:`ug_bt_stack_arch` and the :ref:`ug_bt_solution` documentation to the :ref:`Bluetooth protocols ` page. + * The :ref:`nfc_rpc` page documenting the NFC Remote Procedure Call (RPC) solution. + +* Updated: + + * The nRF7002 DK device guide's :ref:`ug_nrf70_developing_debugging` page with the new snippets added for the nRF70 driver debug and WPA supplicant debug logs. + * The :ref:`programming_params` section on the :ref:`programming` page with information about readback protection moved from the :ref:`ug_nrf5340_building` page. + * The :ref:`security` page with a table that provides an overview of the available general security features. + This table replaces the subpage that was previously describing these features in more detail. + * Restructured the :ref:`app_bootloaders` documentation and combined the DFU and bootloader articles. + Additionally, created a new bootloader :ref:`bootloader_quick_start`. + * Separated the instructions about building from :ref:`configure_application` and moved it to a standalone :ref:`building` page. + * Restructured the :ref:`ug_bt_mesh` documentation for clearer distinction between concepts or overview topics and how-to topics, thus moved some information from the Bluetooth Mesh library sections. + * The :ref:`nrf_security_drivers_cracen` section with a reference to the :ref:`ug_nrf54l_cryptography` page. + * The :ref:`ug_tfm` page with the correct list of samples demonstrating TF-M. + * The :ref:`app_approtect_ncs` section on the :ref:`app_approtect` page with details on setting the Kconfig options and register values to enable AP-Protect. + * The :ref:`companion_components` page with Secure Domain Firmware and System Controller Firmware components. + * The :ref:`ug_bt_fast_pair` guide to document integration steps for the motion detector feature that is a part of the FMDN extension. + * The :ref:`ug_dult` guide to document integration steps for the motion detector feature. + +* Removed: + + * The Device configuration guides section and moved its contents to :ref:`ug_app_dev`. + * The Advanced building procedures page and moved its contents to the :ref:`building` page. + * The standalone pages for getting started with nRF52 Series and with the nRF5340 DK. + These pages have been replaced by the `Quick Start app`_ that now supports the nRF52 Series devices and the nRF5340 DK. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.9.0-nrf54h20-rc1.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.9.0-nrf54h20-rc1.rst new file mode 100644 index 000000000000..0879e5b05383 --- /dev/null +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.9.0-nrf54h20-rc1.rst @@ -0,0 +1,453 @@ +.. _ncs_release_notes_290-nrf54h20-rc1: + +|NCS| v2.9.0-nRF54H20-rc1 Release Notes +####################################### + +.. contents:: + :local: + :depth: 2 + +|NCS| delivers reference software and supporting libraries for developing low-power wireless applications with Nordic Semiconductor products. +The SDK includes open source projects (TF-M, MCUboot, OpenThread, Matter, and the Zephyr RTOS), which are continuously integrated and redistributed with the SDK. + +The |NCS| v2.9.0-nrf54h20-rc1 is an nRF54H20-exclusive release tag, only supporting products based on the nRF54H20 SoC. + +Release notes might refer to "experimental" support for features, which indicates that the feature is incomplete in functionality or verification, and can be expected to change in future releases. +To learn more, see :ref:`software_maturity`. + +Highlights +********** + +Added the following features as supported: + +* nRF54H20 Series: + + * Triggering firmware recovery by pressing a hardware button or calling the respective API. + For more information, see :ref:`ug_nrf54h20_suit_recovery`. + * Global Domain Frequency Scaling (GDFS), optimizing USB suspend power consumption. + * Drivers adapted for the following peripherals: + + * UARTE120 + * PWM120 + * SPIM120 + * EXMIF + + * UICR validation support. + * MSPI EXMIF support. + +Added the following features as experimental: + +* Bluetooth®: + + * :ref:`Parallel scanning and initiating connection `. + It reduces the overall waiting time when there are several Bluetooth devices to be discovered and connected at the same time. + +Improved the following features: + +* Better BICR handling and generation. +* Enhanced power management features across various subsystems. + +Implemented the following bug fixes: + +* NCSDK-30802: Resolved an issue where the nRF54H20 device suddenly stopped transmitting ESB packets after nrfxlib 3.9.0. +* NCSDK-30161: Fixed an assertion during boot time caused by a combination of :kconfig:option:`CONFIG_ASSERT`, :kconfig:option:`CONFIG_SOC_NRF54H20_GPD`, and external flash. +* NCSDK-30117: Ensured that it is no longer possible to declare a MEM component pointing to a memory region not assigned to a particular core. +* NCSDK-29682: Added support for the ``cose-alg-sha-512`` algorithm in the SUIT module. + +Limitations +*********** + +On the nRF54H20 SoC, the Device Firmware Update (DFU) procedure from external flash memory does not work with the new flash memory driver based on the MSPI EXMIF handling. + +Release tag +*********** + +The release tag for the |NCS| manifest repository (|ncs_repo|) is **v2.9.0-nRF54H20**. +Check the :file:`west.yml` file for the corresponding tags in the project repositories. + +To use this release, check out the tag in the manifest repository and run ``west update``. +See :ref:`cloning_the_repositories` and :ref:`gs_updating_repos_examples` for more information. + +For information on the included repositories and revisions, see `Repositories and revisions for v2.9.0-nRF54H20-rc1`_. + +Integration test results +************************ + +The integration test results for this tag can be found in the following external Artifactory: + +* `Twister test report for nRF Connect SDK v2.9.0-nRF54H20-rc1`_ +* `Hardware test report for nRF Connect SDK v2.9.0-nRF54H20-rc1`_ + +IDE and tool support +******************** + +`nRF Connect extension for Visual Studio Code `_ is the recommended IDE for |NCS| v2.9.0-nrf54h20-rc1. +See the :ref:`installation` section for more information about supported operating systems and toolchain. + +Known issues +************ + +Known issues are only tracked for the latest official release. +See `known issues for nRF Connect SDK v2.9.0-nRF54H20-rc1`_ for the list of issues valid for the latest release. + +Migration notes +*************** + +See the `Migration guide for nRF Connect SDK v2.9.0-nRF54H20-rc1`_ for the changes required or recommended when migrating your nRF54H Series application from |NCS| v2.8.0 to |NCS| v2.9.0-nrf54h20-rc1. + +.. _ncs_release_notes_290-nRF54H20-rc1_changelog: + +Changelog +********* + +The following sections provide detailed lists of changes by component. + +IDE, OS, and tool support +========================= + +* Updated the deprecation notes for `nRF Command Line Tools`_ added in the previous release. + The notes now clearly state the tools will be archived, no updates will be made to the software, but it will still be available for download. + +Board support +============= + +* Updated various tests and samples to use Zephyr's :ref:`native simulator ` instead of Zephyr's :ref:`native POSIX ` for :ref:`running_unit_tests`. + This mirrors the deprecation of ``native_posix`` in Zephyr. + Support for ``native_posix`` will be removed in Zephyr with the v4.2 release. + In the |NCS|, it will be removed once Zephyr v4.2 is upmerged to sdk-nrf. + +Build and configuration system +============================== + +* Fixed the issue in the ``nordic-bt-rpc`` snippet, where an invalid memory map was created for nRF54H20 devices, which resulted in a runtime failure. + +Security +======== + +* Extended the ``west ncs-provision`` command so that different key lifetime policies can be selected. + +Protocols +========= + +This section provides detailed lists of changes by :ref:`protocol `. +See `Samples`_ for lists of changes for the protocol-related samples. + +Bluetooth LE +------------- + +* Added support for scanning and initiating at the same time. + This was introduced in |NCS| 2.7.0 as experimental. + The :ref:`bt_scanning_while_connecting` sample showcases how you can use this feature to reduce the time to establish connections to many devices. + +* Updated the Bluetooth LE SoftDevice Controller driver to make the :c:func:`hci_vs_sdc_llpm_mode_set` function return an error if Low Latency Packet Mode (LLPM) is not supported or not enabled in the Bluetooth LE Controller driver configuration (:kconfig:option:`CONFIG_BT_CTLR_SDC_LLPM`). + +Matter +------ + +* Added: + + * Implementation of the ``Spake2pVerifier`` class for the PSA crypto backend. + You can use this class to generate the Spake2+ verifier at runtime. + To use this class, enable the Kconfig options :kconfig:option:`CONFIG_PSA_WANT_ALG_PBKDF2_HMAC` and :kconfig:option:`CONFIG_PSA_WANT_KEY_TYPE_SPAKE2P_KEY_PAIR_DERIVE`. + * The :ref:`ug_matter_device_watchdog_pause_mode` to the :ref:`ug_matter_device_watchdog` feature. + +Matter fork ++++++++++++ + +The Matter fork in the |NCS| (``sdk-connectedhomeip``) contains all commits from the upstream Matter repository up to, and including, the ``v1.4.0.0`` tag. + +The following list summarizes the most important changes inherited from the upstream Matter: + +* Added: + + * Enhanced Network Infrastructure with Home Routers and Access Points (HRAP). + This provides requirements for devices such as home routers, modems, or access points to create a necessary infrastructure for Matter products. + * Enhanced multi-admin that aims to simplify the smart home management from the user perspective. + This term includes several different features and in this release only Fabric Synchronization was fully delivered. + The Fabric Synchronization enables commissioning of devices from one fabric to another without requiring manual user actions, only user consent. + * Dynamic SIT LIT switching support that allows the application to switch between these modes, as long as the requirements for these modes are met. + You can enable this using the :kconfig:option:`CONFIG_CHIP_ICD_DSLS_SUPPORT` Kconfig option. + * The Kconfig option :kconfig:option:`CONFIG_CHIP_ICD_SIT_SLOW_POLL_LIMIT` to limit the slow polling interval value for the device while it is in the SIT mode. + You can use this to limit the slow poll interval for the ICD LIT device while it is temporarily working in the SIT mode. + * New device types: + + * Water heater + * Solar power + * Battery storage + * Heat pump + * Mounted on/off control + * Mounted dimmable load control + +* Updated: + + * Thermostat cluster with support for scheduling and preset modes, like vacation, and home or away settings. + * Electric Vehicle Supply Equipment (EVSE) with support for user-defined charging preferences, like specifying the time when the car will be charged. + * Occupancy sensing cluster with features like radar, vision, and ambient sensing. + * Intermittently Connected Devices feature with enhancements for the Long Idle Time (LIT) and Check-In protocol. + With these enhancements, the state of this feature is changed from provisional to certifiable. + +Thread +------ + +* Added Kconfig options for configuring the MLE child update timeout, child supervision interval, and child supervision check timeout. + +Zigbee +------ + +* Updated: + + * :ref:`nrfxlib:zboss` to v3.11.6.0 and platform v5.1.7 (``v3.11.6.0+5.1.7``). + They contain several fixes related to malfunctioning in a heavy traffic environment and more. + For details, see :ref:`zboss_changelog`. + * The :ref:`ZBOSS Network Co-processor Host ` package to the new version v2.2.5. + +Applications +============ + +This section provides detailed lists of changes by :ref:`application `. + +Machine learning +---------------- + +* Updated the application to enable the :ref:`Zephyr Memory Storage (ZMS) ` file system for the :ref:`zephyr:nrf54h20dk_nrf54h20` board. + +IPC radio firmware +------------------ + +* Updated the application to enable the :ref:`Zephyr Memory Storage (ZMS) ` file system in all devices that contain MRAM, such as the nRF54H Series devices. + +Matter bridge +------------- + +* Added: + + * Support for the ``UniqueID`` attribute in the Bridged Device Basic Information cluster. + * Version 2 of the bridged device data scheme containing ``UniqueID``. + * Kconfig options :ref:`CONFIG_BRIDGE_MIGRATE_PRE_2_7_0 ` and :ref:`CONFIG_BRIDGE_MIGRATE_VERSION_1 ` to enable migration from older data schemes. + +nRF Desktop +----------- + +* Updated: + + * The :ref:`nrf_desktop_settings_loader` to make the :ref:`Zephyr Memory Storage (ZMS) ` the default settings backend for all board targets that use the MRAM technology. + As a result, all :ref:`zephyr:nrf54h20dk_nrf54h20` configurations were migrated from the NVS settings backend to the ZMS settings backend. + * :ref:`nrf_desktop_watchdog` by adding the :ref:`zephyr:nrf54h20dk_nrf54h20` release configuration. + * Updated the configuration files of the :ref:`nrf_desktop_click_detector` (:file:`click_detector_def.h`) to allow them to be used even when Bluetooth LE peer control using a dedicated button (:ref:`CONFIG_DESKTOP_BLE_PEER_CONTROL `) is disabled. + * The DTS description for board targets with a different DTS overlay file for each build type to isolate the common configuration that is now defined in the :file:`app_common.dtsi` file. + The :ref:`zephyr:nrf54h20dk_nrf54h20` board configuration has been updated. + + * The :ref:`nrf_desktop_ble_conn_params` with the following changes: + + * Fixed the Bluetooth LE connection parameters update loop (NCSDK-30261) that replicated if an nRF Desktop dongle without Low Latency Packet Mode (LLPM) support was connected to an nRF Desktop peripheral with LLPM support. + * The module now waits until a triggered Bluetooth LE connection parameters update is completed before triggering subsequent updates for a given connection. + * Improved the log to also display the information if USB is suspended. + The information is needed to determine the requested connection parameters. + * The module now uses non-zero Bluetooth LE peripheral latency while USB is suspended. + This is done to prevent peripheral latency increase requests from :ref:`nrf_desktop_ble_latency` on peripheral's end. + * The module reverts the USB suspended Bluetooth LE connection parameter update when USB cable is disconnected. + + * The :ref:`nrf_desktop_ble_scan` to always use a connection interval of 10 ms for peripherals without Low Latency Packet Mode (LLPM) support if a dongle supports LLPM and more than one Bluetooth LE connection. + This is required to avoid Bluetooth Link Layer scheduling conflicts that could lead to HID report rate drop. + +nRF SoC flash driver +-------------------- + +* Removed the ``imply`` for the partial erase feature of the nRF SoC flash driver (:kconfig:option:`CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE`) for the USB next stack (:ref:`CONFIG_DESKTOP_USB_STACK_NEXT `). + The partial erase feature was used as a workaround for device errors that might be reported by the Windows USB host in Device Manager if a USB cable is connected while erasing a secondary image slot in the background. + The workaround is no longer needed after the nRF UDC driver was improved. + +Samples +======= + +This section provides detailed lists of changes by :ref:`sample `. + +Bluetooth samples +----------------- + +* Added: + + * The :ref:`channel_sounding_ras_reflector` sample demonstrating how to implement a Channel Sounding Reflector that exposes the Ranging Responder GATT Service. + * The :ref:`channel_sounding_ras_initiator` sample demonstrating Channel Sounding by setting up a Channel Sounding Initiator that acts as a Ranging Requestor GATT Client. + It includes a basic distance estimation to demonstrate IQ data handling. + The accuracy is not representative for Channel Sounding and should be replaced if accuracy is important. + * The :ref:`bt_peripheral_with_multiple_identities` sample demonstrating how to use a single physical device to create and manage multiple advertisers, making it appear as multiple distinct devices by assigning each a unique identity. + * The :ref:`bt_scanning_while_connecting` sample demonstrating how to establish multiple connections faster using the :kconfig:option:`CONFIG_BT_SCAN_AND_INITIATE_IN_PARALLEL` Kconfig option. + +* Updated: + + * Configurations of the following Bluetooth samples to make the :ref:`Zephyr Memory Storage (ZMS) ` the default settings backend for all board targets that use the MRAM technology: + + * :ref:`bluetooth_central_hids` + * :ref:`peripheral_hids_keyboard` + * :ref:`peripheral_hids_mouse` + * :ref:`central_and_peripheral_hrs` + * :ref:`central_bas` + * :ref:`central_nfc_pairing` + * :ref:`central_uart` + * :ref:`peripheral_bms` + * :ref:`peripheral_cgms` + * :ref:`peripheral_cts_client` + * :ref:`peripheral_lbs` + * :ref:`peripheral_mds` + * :ref:`peripheral_nfc_pairing` + * :ref:`power_profiling` + * :ref:`peripheral_rscs` + * :ref:`peripheral_status` + * :ref:`peripheral_uart` + * :ref:`ble_rpc_host` + + As a result, all :ref:`zephyr:nrf54h20dk_nrf54h20` configurations of the affected samples were migrated from the NVS settings backend to the ZMS settings backend. + * Testing steps in the :ref:`peripheral_hids_mouse` to provide the build configuration that is compatible with the `Bluetooth Low Energy app`_ testing tool. + +* :ref:`power_profiling` sample: + + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target. + +* :ref:`nrf_auraconfig` sample: + + * Fixed an issue with data transmission (OCT-3251). + Data is now sent on all BISes when generated by the application (no SD card inserted). + +Bluetooth Fast Pair samples +--------------------------- + +* :ref:`fast_pair_input_device` sample: + + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target. + +Edge Impulse samples +-------------------- + +* Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target in the following samples: + + * :ref:`ei_data_forwarder_sample` + * :ref:`ei_wrapper_sample` + +Matter samples +-------------- + +* Updated: + + * All Matter samples that support low-power mode to enable the :ref:`lib_ram_pwrdn` feature. + It is enabled by default for the release configuration of the following samples: + + * :ref:`matter_lock_sample` + * :ref:`matter_light_switch_sample` + * :ref:`matter_smoke_co_alarm_sample` + * :ref:`matter_window_covering_sample` + + * All Matter samples to enable the ZMS file subsystem in all devices that contain MRAM, such as the nRF54H Series devices. + +* Disabled pausing Matter watchdog while CPU is in idle state in all Matter samples. + To enable it, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_PAUSE_IN_SLEEP` Kconfig option to ``y``. + +* :ref:`matter_smoke_co_alarm_sample` sample: + + * Added support for ICD dynamic SIT LIT switching (DSLS). + +SUIT samples +------------ + +* Updated the :ref:`suit_recovery` by adding support for triggering firmware recovery by pressing a hardware button or calling a dedicated API. + For more information, see :ref:`ug_nrf54h20_suit_recovery`. + +Other samples +------------- + +* :ref:`coremark_sample` sample: + + * Updated: + + * Configuration for the :ref:`zephyr:nrf54h20dk_nrf54h20` board to support multi-domain logging using the ARM Coresight STM. + * The logging format in the standard logging mode to align it with the format used in the multi-domain logging mode. + * Support for alternative configurations to use the :ref:`file suffix feature from Zephyr `. + The following file suffixes are supported as alternative configurations: + + * ``flash_and_run`` + * ``heap_memory`` + * ``static_memory`` + * ``multiple_threads`` + +Libraries +========= + +This section provides detailed lists of changes by :ref:`library `. + +Bluetooth libraries and services +-------------------------------- + +* Added the :ref:`rreq_readme` and :ref:`rrsp_readme` libraries. + +* :ref:`hogp_readme` library: + + * Updated the :c:func:`bt_hogp_rep_read` function to forward the GATT read error code through the registered user callback. + This ensures that API user is aware of the error. + +* :ref:`bt_fast_pair_readme` library: + + * Added support in build system for devices that do not support the :ref:`partition_manager`. + The :ref:`zephyr:nrf54h20dk_nrf54h20` board target is the only example of such a device. + * Updated the :c:func:`bt_fast_pair_info_cb_register` API to allow registration of multiple callbacks. + +nRF RPC libraries +----------------- + +* Added the :ref:`nrf_rpc_dev_info` library for obtaining information about a device connected through the :ref:`nrfxlib:nrf_rpc`. + +sdk-nrfxlib +----------- + +See the changelog for each library in the :doc:`nrfxlib documentation ` for additional information. + +Integrations +============ + +This section provides detailed lists of changes by :ref:`integration `. + +Google Fast Pair integration +---------------------------- + +* Added instructions on how to provision the Fast Pair data onto devices without the :ref:`partition_manager` support, specifically for the :ref:`zephyr:nrf54h20dk_nrf54h20`. + +Zephyr +====== + +.. NOTE TO MAINTAINERS: All the Zephyr commits in the below git commands must be handled specially after each upmerge and each nRF Connect SDK release. + +The Zephyr fork in |NCS| (``sdk-zephyr``) contains all commits from the upstream Zephyr repository up to and including ``beb733919d8d64a778a11bd5e7d5cbe5ae27b8ee``, with some |NCS| specific additions. + +For the list of upstream Zephyr commits (not including cherry-picked commits) incorporated into nRF Connect SDK since the most recent release, run the following command from the :file:`ncs/zephyr` repository (after running ``west update``): + +.. code-block:: none + + git log --oneline beb733919d ^ea02b93eea + +For the list of |NCS| specific commits, including commits cherry-picked from upstream, run: + +.. code-block:: none + + git log --oneline manifest-rev ^beb733919d + +The current |NCS| main branch is based on revision ``beb733919d`` of Zephyr. + +.. note:: + For possible breaking changes and changes between the latest Zephyr release and the current Zephyr version, refer to the :ref:`Zephyr release notes `. + +Documentation +============= + +* Added: + + * The :ref:`matter_samples_config` page that documents Kconfig options and snippets shared by Matter samples and applications. + * A page about :ref:`add_new_driver`. + * A page for the :ref:`sdp_gpio` application. + +* Updated: + + * The :ref:`ug_nrf54h20_gs` page. + * The :ref:`ug_nrf54h20_custom_pcb` page. + * The :ref:`abi_compatibility` page. + * The structure and contents of the :ref:`gpio_pin_config` page with more detailed information. + +* Fixed an issue on the :ref:`install_ncs` page where an incorrect directory path was provided for Linux and macOS at the end of the :ref:`cloning_the_repositories_win` section. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-2.9.0.rst b/doc/nrf/releases_and_maturity/releases/release-notes-2.9.0.rst new file mode 100644 index 000000000000..b12703a385de --- /dev/null +++ b/doc/nrf/releases_and_maturity/releases/release-notes-2.9.0.rst @@ -0,0 +1,663 @@ +.. _ncs_release_notes_290: + +|NCS| v2.9.0 Release Notes +########################## + +.. contents:: + :local: + :depth: 2 + +|NCS| delivers reference software and supporting libraries for developing low-power wireless applications with Nordic Semiconductor products in the nRF52, nRF53, nRF54, nRF70, and nRF91 Series. +The SDK includes open source projects (TF-M, MCUboot, OpenThread, Matter, and the Zephyr RTOS), which are continuously integrated and redistributed with the SDK. + +Release notes might refer to "experimental" support for features, which indicates that the feature is incomplete in functionality or verification, and can be expected to change in future releases. +To learn more, see :ref:`software_maturity`. + +Highlights +********** + +Added the following features as supported: + +* nRF54L Series: + + * FMN extension available for members of the Apple MFi program and Apple Find My. + * `nRF54L10`_ and `nRF54L05`_ SoCs support including emulated targets on the `nRF54L15 DK`_ including: + + * Protocol support on the nRF54L10 SoC for Bluetooth® LE, Amazon Sidewalk, :ref:`Thread 1.4 `, and Matter over Thread. + * Protocol support on the nRF54L05 SoC for Bluetooth LE and Thread 1.4. + * All standard SoC peripherals. + * :ref:`PSA Crypto APIs ` (hardware-accelerated) for cryptographic operations and key storage. + +* Bluetooth: + + * :ref:`Parallel scanning and initiating connection `. + It reduces the overall waiting time when there are several Bluetooth devices to be discovered and connected at the same time. + +* Wi-Fi®: + + * WPA3 Enterprise security in the nRF Wi-Fi driver, using |NCS| legacy crypto APIs (non-PSA), running on an nRF5340 SoC as a host to an nRF70 Series Wi-Fi 6 companion IC. + +* Matter 1.4 enhancements: + + * Long Idle Time (LIT) protocol extending battery life for Matter over Thread devices. + This feature is showcased in the new :ref:`matter_smoke_co_alarm_sample` sample. + * Check-in protocol ensuring reliable communication for low-power devices requiring LIT. + * Energy management - Support for new device types, such as solar panels, batteries, heat pumps, and water heaters, as well as improvements to Electric Vehicle Supply Equipment (EVSE) and thermostats. + * Occupancy sensing - Sensing features, such as radar vision and ambient sensing technologies. + * Two new device types (mounted On/Off and dimmable load control) designed specifically for fixed in-wall smart home devices that deliver power to wired devices. + + For more information, see the `CSA press release for Matter 1.4`_. + +Added the following features as experimental: + +* Bluetooth: + + * :ref:`channel_sounding_ras_reflector` and :ref:`channel_sounding_ras_initiator` samples for the nRF54L Series devices. + The samples showcase how to use the ranging service between two devices. + They are primarily meant to demonstrate the data flow between initiator and reflector. + The ranging algorithm in these samples is for illustrative purposes, and the resulting accuracy is not representative for Channel Sounding. + +Sign up for the `nRF Connect SDK v2.9.0 webinar`_ to learn more about the new features. + +Release tag +*********** + +The release tag for the |NCS| manifest repository (|ncs_repo|) is **v2.9.0**. +Check the :file:`west.yml` file for the corresponding tags in the project repositories. + +To use this release, check out the tag in the manifest repository and run ``west update``. +See :ref:`cloning_the_repositories` and :ref:`gs_updating_repos_examples` for more information. + +For information on the included repositories and revisions, see `Repositories and revisions for v2.9.0`_. + +Integration test results +************************ + +The integration test results for this tag can be found in the following external artifactory: + +* `Twister test report for nRF Connect SDK v2.9.0`_ +* `Hardware test report for nRF Connect SDK v2.9.0`_ + +IDE and tool support +******************** + +`nRF Connect extension for Visual Studio Code `_ is the recommended IDE for |NCS| v2.9.0. +See the :ref:`installation` section for more information about supported operating systems and toolchain. + +Supported modem firmware +************************ + +See the following documentation for an overview of which modem firmware versions have been tested with this version of the |NCS|: + +* `Modem firmware compatibility matrix for the nRF9151 DK`_ +* `Modem firmware compatibility matrix for the nRF9161 DK`_ +* `Modem firmware compatibility matrix for the nRF9160 DK`_ + +Use the latest version of the `Programmer app`_ of `nRF Connect for Desktop`_ to update the modem firmware. +See :ref:`nrf9160_gs_updating_fw_modem` for instructions. + +Modem-related libraries and versions +==================================== + +.. list-table:: Modem-related libraries and versions + :widths: 15 10 + :header-rows: 1 + + * - Library name + - Version information + * - Modem library + - `Changelog `_ + * - LwM2M carrier library + - `Changelog `_ + + +Known issues +************ + +Known issues are only tracked for the latest official release. +See `known issues for nRF Connect SDK v2.9.0`_ for the list of issues valid for the latest release. + +Migration notes +*************** + +See the `Migration guide for nRF Connect SDK v2.9.0`_ for the changes required or recommended when migrating your application from |NCS| v2.8.0 to |NCS| v2.9.0. + +.. _ncs_release_notes_290_changelog: + +Changelog +********* + +The following sections provide detailed lists of changes by component. + +IDE, OS, and tool support +========================= + +* Added support for the Nordic Thingy:91 X to the `Quick Start app`_. + The list on the :ref:`gsg_guides` page is updated accordingly. + +* Updated the deprecation notes for `nRF Command Line Tools`_ added in the previous release. + The notes now clearly state the tools will be archived, no updates will be made to the software, but it will still be available for download. + +Board support +============= + +* Updated various tests and samples to use Zephyr's :ref:`native simulator ` instead of Zephyr's :ref:`native POSIX ` for :ref:`running_unit_tests`. + This mirrors the deprecation of ``native_posix`` in Zephyr. + Support for ``native_posix`` will be removed in Zephyr with the v4.2 release. + In the |NCS|, it will be removed once Zephyr v4.2 is upmerged to sdk-nrf. + +Build and configuration system +============================== + +* Fixed the issue in the ``nordic-bt-rpc`` snippet, where an invalid memory map was created for nRF54H20 devices, which resulted in a runtime failure. + +Bootloaders and DFU +=================== + +* Updated the allowed offset for :ref:`doc_fw_info` in the :ref:`bootloader`. + It can now be placed at offset ``0x600``. + However, you cannot use it for any applications with |NSIB| compiled before this change. + +Developing with nRF91 Series +============================ + +* Moved the Thingy:91 and Thingy:91 X guides to new sections, :ref:`thingy91_ug_intro` and :ref:`ug_thingy91x` respectively, under :ref:`ug_app_dev`. + +Developing with nRF54L Series +============================= + +* Added: + + * The :ref:`nRF54l_signing_app_with_flpr_payload` page that includes instructions for building separate applications, merging them, and signing them for MCUboot. + * The :ref:`ug_nrf54l_developing_basics_kmu` page explaining basic concepts and recommendations. + +Developing with nRF53 Series +============================ + +* Moved the Thingy:53 to a new section, :ref:`ug_thingy53`, under :ref:`ug_app_dev`. + +Developing with Front-End Modules +================================= + +* Deprecated the explicit use of ``-DSHIELD=nrf21540ek_fwd`` for boards with ``nrf5340/cpuapp`` qualifiers when the nRF21540 EK shield is used. + The build system uses an appropriate overlay file for each core, relying only on the ``-DSHIELD=nrf21540ek`` parameter. + +Security +======== + +* Extended the ``west ncs-provision`` command so that different key lifetime policies can be selected. + +Protocols +========= + +This section provides detailed lists of changes by :ref:`protocol `. +See `Samples`_ for lists of changes for the protocol-related samples. + +Amazon Sidewalk +--------------- + +* Added support for the ``nrf54l15dk/nrf54l10/cpuapp`` board target. + +Bluetooth LE +------------- + +* Added support for scanning and initiating at the same time. + This was introduced in |NCS| 2.7.0 as experimental. + The :ref:`bt_scanning_while_connecting` sample showcases how you can use this feature to reduce the time to establish connections to many devices. + +Matter +------ + +* Added: + + * Implementation of the ``Spake2pVerifier`` class for the PSA crypto backend. + You can use this class to generate the Spake2+ verifier at runtime. + To use this class, enable the Kconfig options :kconfig:option:`CONFIG_PSA_WANT_ALG_PBKDF2_HMAC` and :kconfig:option:`CONFIG_PSA_WANT_KEY_TYPE_SPAKE2P_KEY_PAIR_DERIVE`. + * The :ref:`ug_matter_device_watchdog_pause_mode` to the :ref:`ug_matter_device_watchdog` feature. + +Matter fork ++++++++++++ + +The Matter fork in the |NCS| (``sdk-connectedhomeip``) contains all commits from the upstream Matter repository up to, and including, the ``v1.4.0.0`` tag. + +The following list summarizes the most important changes inherited from the upstream Matter: + +* Added: + + * Enhanced Network Infrastructure with Home Routers and Access Points (HRAP). + This provides requirements for devices such as home routers, modems, or access points to create a necessary infrastructure for Matter products. + * Enhanced multi-admin that aims to simplify the smart home management from the user perspective. + This term includes several different features and in this release only Fabric Synchronization was fully delivered. + The Fabric Synchronization enables commissioning of devices from one fabric to another without requiring manual user actions, only user consent. + * Dynamic SIT LIT switching support that allows the application to switch between these modes, as long as the requirements for these modes are met. + You can enable this using the :kconfig:option:`CONFIG_CHIP_ICD_DSLS_SUPPORT` Kconfig option. + * The Kconfig option :kconfig:option:`CONFIG_CHIP_ICD_SIT_SLOW_POLL_LIMIT` to limit the slow polling interval value for the device while it is in the SIT mode. + You can use this to limit the slow poll interval for the ICD LIT device while it is temporarily working in the SIT mode. + * New device types: + + * Water heater + * Solar power + * Battery storage + * Heat pump + * Mounted on/off control + * Mounted dimmable load control + +* Updated: + + * Thermostat cluster with support for scheduling and preset modes, like vacation, and home or away settings. + * Electric Vehicle Supply Equipment (EVSE) with support for user-defined charging preferences, like specifying the time when the car will be charged. + * Occupancy sensing cluster with features like radar, vision, and ambient sensing. + * Intermittently Connected Devices feature with enhancements for the Long Idle Time (LIT) and Check-In protocol. + With these enhancements, the state of this feature is changed from provisional to certifiable. + +Thread +------ + +* Added Kconfig options for configuring the MLE child update timeout, child supervision interval, and child supervision check timeout. + +Zigbee +------ + +* Updated: + + * :ref:`nrfxlib:zboss` to v3.11.6.0 and platform v5.1.7 (``v3.11.6.0+5.1.7``). + They contain several fixes related to malfunctioning in a heavy traffic environment and more. + For details, see :ref:`zboss_changelog`. + * The :ref:`ZBOSS Network Co-processor Host ` package to the new version v2.2.5. + +Wi-Fi +----- + +* Updated the :ref:`wifi_regulatory_channel_rules` for some countries in the :ref:`ug_nrf70_developing_regulatory_support` documentation. + +Applications +============ + +This section provides detailed lists of changes by :ref:`application `. + +Asset Tracker v2 +---------------- + +* Updated the Wi-Fi configurations to reduce the RAM usage by about 25 kB for an nRF91 Series DK and 12 kB for the Thingy:91 X. + +Connectivity bridge +------------------- + +* Updated the handling of USB CDC ACM baud rate requests to make sure the baud rate is set correctly when the host requests a change. + This fixes an issue when using GNU screen with the Thingy:91 X. + +Matter bridge +------------- + +* Added: + + * Support for the ``UniqueID`` attribute in the Bridged Device Basic Information cluster. + * Version 2 of the bridged device data scheme containing ``UniqueID``. + * Kconfig options :ref:`CONFIG_BRIDGE_MIGRATE_PRE_2_7_0 ` and :ref:`CONFIG_BRIDGE_MIGRATE_VERSION_1 ` to enable migration from older data schemes. + +nRF5340 Audio +------------- + +* Updated: + + * The documentation for :ref:`nrf53_audio_app_building` with cross-links and additional information, based on user feedback. + * The calculation in ``audio_datapath.num_blks_in_fifo`` to consider wrapping. + +nRF Desktop +----------- + +* Updated: + + * The :ref:`nrf_desktop_settings_loader` to make the :ref:`Zephyr Memory Storage (ZMS) ` the default settings backend for all board targets that use the MRAM technology. + As a result, all :ref:`zephyr:nrf54h20dk_nrf54h20` configurations were migrated from the NVS settings backend to the ZMS settings backend. + * :ref:`nrf_desktop_watchdog` by adding the :ref:`zephyr:nrf54h20dk_nrf54h20` release configuration. + * The configuration files of the :ref:`nrf_desktop_click_detector` (:file:`click_detector_def.h`) to allow using them also when Bluetooth LE peer control using a dedicated button (:ref:`CONFIG_DESKTOP_BLE_PEER_CONTROL `) is disabled. + * The DTS description for board targets with a different DTS overlay file for each build type to isolate the common configuration that is now defined in the :file:`app_common.dtsi` file. + The following board configurations have been updated: + + * :ref:`zephyr:nrf52840dk_nrf52840` + * :ref:`zephyr:nrf52840dongle_nrf52840` + * :ref:`zephyr:nrf54l15dk_nrf54l15` + * :ref:`zephyr:nrf54h20dk_nrf54h20` + + * MCUboot bootloader configurations to enable the following Kconfig options: + + * :kconfig:option:`CONFIG_FPROTECT` - Used to protect the bootloader partition against memory corruption. + * :kconfig:option:`CONFIG_HW_STACK_PROTECTION` - Used to protect against stack overflows. + + The :kconfig:option:`CONFIG_HW_STACK_PROTECTION` Kconfig option and its dependency (the :kconfig:option:`CONFIG_ARM_MPU` Kconfig option) might be disabled in case of targets with limited memory. + + * MCUboot bootloader configuration for the MCUboot SMP build type and the nRF52840 Gaming Mouse target to enable the :kconfig:option:`CONFIG_ARM_MPU` Kconfig option that is required to enable hardware stack protection (:kconfig:option:`CONFIG_HW_STACK_PROTECTION`). + + * The nRF54L15 DK's configurations (``nrf54l15dk/nrf54l15/cpuapp``) to enable hardware cryptography for the MCUboot bootloader. + The application image is verified using a pure ED25519 signature. + The public key that MCUboot uses for validating the application image is securely stored in the hardware Key Management Unit (KMU). + + The change increases the MCUboot partition size (modifies the Partition Manager configuration) and changes the MCUboot image signing algorithm. + Because of that, the nRF Desktop application images built for an nRF54L15 DK from the |NCS| v2.9.0 are not compatible with the MCUboot bootloader built from previous releases. + It is highly recommended to use hardware cryptography for the nRF54L SoC Series for improved security. + See the :ref:`nrf_desktop_bootloader` page for more details. + + * The :ref:`nrf_desktop_ble_conn_params` to: + + * Fix the Bluetooth LE connection parameters update loop (NCSDK-30261) that replicated if an nRF Desktop dongle without Low Latency Packet Mode (LLPM) support was connected to an nRF Desktop peripheral with LLPM support. + * Wait until a triggered Bluetooth LE connection parameters update is completed before triggering subsequent updates for a given connection. + * Improve the log to also display the information if USB is suspended. + The information is needed to determine the requested connection parameters. + * Use non-zero Bluetooth LE peripheral latency while USB is suspended. + This is done to prevent peripheral latency increase requests from :ref:`nrf_desktop_ble_latency` on peripheral's end. + * Revert the USB suspended Bluetooth LE connection parameter update when USB cable is disconnected. + + * The :ref:`nrf_desktop_ble_scan` to always use a connection interval of 10 ms for peripherals without Low Latency Packet Mode (LLPM) support if a dongle supports LLPM and more than one Bluetooth LE connection. + This is required to avoid Bluetooth Link Layer scheduling conflicts that could lead to HID report rate drop. + +* Removed imply for partial erase feature of the nRF SoC flash driver (:kconfig:option:`CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE`) for the USB next stack (:ref:`CONFIG_DESKTOP_USB_STACK_NEXT `). + The partial erase feature was used as a workaround for device errors that might be reported by the Windows USB host in Device Manager if a USB cable is connected while erasing a secondary image slot in the background. + The workaround is no longer needed after the nRF UDC driver was improved. + +Samples +======= + +This section provides detailed lists of changes by :ref:`sample `. + +Bluetooth samples +----------------- + +* Added: + + * The :ref:`channel_sounding_ras_reflector` sample demonstrating how to implement a Channel Sounding Reflector that exposes the Ranging Responder GATT Service. + * The :ref:`channel_sounding_ras_initiator` sample demonstrating Channel Sounding by setting up a Channel Sounding Initiator that acts as a Ranging Requestor GATT Client. + It includes a basic distance estimation to demonstrate IQ data handling. + The accuracy is not representative for Channel Sounding and should be replaced if accuracy is important. + * The :ref:`bt_peripheral_with_multiple_identities` sample demonstrating how to use a single physical device to create and manage multiple advertisers, making it appear as multiple distinct devices by assigning each a unique identity. + * The :ref:`bt_scanning_while_connecting` sample demonstrating how to establish multiple connections faster using the :kconfig:option:`CONFIG_BT_SCAN_AND_INITIATE_IN_PARALLEL` Kconfig option. + * Support for the ``nrf54l15dk/nrf54l05/cpuapp`` and ``nrf54l15dk/nrf54l10/cpuapp`` board targets in the following samples: + + * :ref:`direct_test_mode` + * :ref:`peripheral_hids_mouse` + * :ref:`peripheral_lbs` + * :ref:`power_profiling` + * :ref:`peripheral_uart` + +* Updated: + + * Configurations of the following Bluetooth samples to make the :ref:`Zephyr Memory Storage (ZMS) ` the default settings backend for all board targets that use the MRAM technology: + + * :ref:`bluetooth_central_hids` + * :ref:`peripheral_hids_keyboard` + * :ref:`peripheral_hids_mouse` + * :ref:`central_and_peripheral_hrs` + * :ref:`central_bas` + * :ref:`central_nfc_pairing` + * :ref:`central_uart` + * :ref:`peripheral_bms` + * :ref:`peripheral_cgms` + * :ref:`peripheral_cts_client` + * :ref:`peripheral_lbs` + * :ref:`peripheral_mds` + * :ref:`peripheral_nfc_pairing` + * :ref:`power_profiling` + * :ref:`peripheral_rscs` + * :ref:`peripheral_status` + * :ref:`peripheral_uart` + * :ref:`ble_rpc_host` + + As a result, all :ref:`zephyr:nrf54h20dk_nrf54h20` configurations of the affected samples were migrated from the NVS settings backend to the ZMS settings backend. + * Testing steps in the :ref:`peripheral_hids_mouse` to provide the build configuration that is compatible with the `Bluetooth Low Energy app`_ testing tool. + +* :ref:`power_profiling` sample: + + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target. + +* :ref:`nrf_auraconfig` sample: + + * Fixed the data sending (OCT-3251). + Data is now sent on all BISes when generated by the application (no SD card inserted). + +Bluetooth Fast Pair samples +--------------------------- + +* :ref:`fast_pair_locator_tag` sample: + + * Updated the MCUboot bootloader configuration for the :ref:`zephyr:nrf54l15dk_nrf54l15` board target to enable the :kconfig:option:`CONFIG_FPROTECT` Kconfig option that is used to protect the bootloader partition against memory corruption. + +* :ref:`fast_pair_input_device` sample: + + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target. + +Cellular samples +---------------- + +* Updated the :kconfig:option:`CONFIG_NRF_CLOUD_CHECK_CREDENTIALS` Kconfig option to be optional and enabled by default for the following samples: + + * :ref:`nrf_cloud_rest_cell_location` + * :ref:`nrf_cloud_rest_device_message` + * :ref:`nrf_cloud_rest_fota` + +* :ref:`location_sample` sample: + + * Updated: + + * The Thingy:91 X build to support Wi-Fi by default without overlays. + * The Wi-Fi configurations to reduce the RAM usage by about 25 kB. + +* :ref:`modem_shell_application` sample: + + * Updated the Wi-Fi configurations to reduce the RAM usage by about 25 kB. + +* :ref:`nrf_cloud_multi_service` sample: + + * Updated the Wi-Fi configurations to reduce the RAM usage by about 12 kB for an nRF91 Series DK and 25 kB for the Thingy:91 X. + +DECT NR+ samples +---------------- + +* :ref:`dect_shell_application` sample: + + * Added: + + * The ``dect mac`` command. + A brief MAC-level code sample on top of DECT PHY interface with new commands to create a periodic cluster beacon, scan for it, associate or disassociate a PT/client, and send data to a FT/beacon random access window. + This is not a full MAC implementation and not fully compliant with DECT NR+ MAC specification (`ETSI TS 103 636-4`_). + * The ``startup_cmd`` command. + This command is used to store shell commands to be run sequentially after bootup. + * Band 4 support for nRF9151 with modem firmware v1.0.2. + + * Updated: + + * The ``dect rssi_scan`` command with busy/possible/free subslot count-based RSSI scan. + * The ``dect rx`` command to provide the possibility to iterate all channels and to enable RX filter. + +Edge Impulse samples +-------------------- + +* Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target in the following samples: + + * :ref:`ei_data_forwarder_sample` + * :ref:`ei_wrapper_sample` + +Matter samples +-------------- + +* Updated: + + * All Matter samples that support low-power mode to enable the :ref:`lib_ram_pwrdn` feature. + It is enabled by default for the release configuration of the following samples: + + * :ref:`matter_lock_sample` + * :ref:`matter_light_switch_sample` + * :ref:`matter_smoke_co_alarm_sample` + * :ref:`matter_window_covering_sample` + + * All Matter samples to enable the ZMS file subsystem in all devices that contain MRAM, such as the nRF54H Series devices. + +* Disabled pausing Matter watchdog while CPU is in idle state in all Matter samples. + To enable it, set the :ref:`CONFIG_NCS_SAMPLE_MATTER_WATCHDOG_PAUSE_IN_SLEEP` Kconfig option to ``y``. + +* :ref:`matter_template_sample` sample: + + * Added support for the ``nrf54l15dk/nrf54l10/cpuapp`` board target. + * Updated the internal configuration for the :ref:`zephyr:nrf54l15dk_nrf54l15` target to use the DFU image compression and provide more memory space for the application. + +* :ref:`matter_smoke_co_alarm_sample` sample: + + * Added: + + * Support for ICD dynamic SIT LIT switching (DSLS). + * Support for the ``nrf54l15dk/nrf54l10/cpuapp`` board target. + +Peripheral samples +------------------ + +* Added support for the ``nrf54l15dk/nrf54l05/cpuapp`` and ``nrf54l15dk/nrf54l10/cpuapp`` board targets in the :ref:`radio_test` sample. + +Protocol serialization samples +------------------------------ + +* Updated GPIO pins on the nRF54L15 DK used for communication between the client and server over UART. + One of the previously selected pins was also used to drive an LED, which may have disrupted the UART communication. + +Thread samples +-------------- + +* Removed support for the ``nrf5340dk/nrf5340/cpuapp/ns`` board target for all samples. + +* :ref:`ot_cli_sample` sample: + + * Added support for the ``nrf54l15dk/nrf54l10/cpuapp`` board target. + +* :ref:`ot_coprocessor_sample` sample: + + * Added support for the ``nrf54l15dk/nrf54l10/cpuapp`` and ``nrf54l15dk/nrf54l05/cpuapp`` board targets. + +Other samples +------------- + +* :ref:`coremark_sample` sample: + + * Updated: + + * Configuration for the :ref:`zephyr:nrf54h20dk_nrf54h20` board to support multi-domain logging using the ARM Coresight STM. + * The logging format in the standard logging mode to align it with the format used in the multi-domain logging mode. + * Support for alternative configurations to use the :ref:`file suffix feature from Zephyr `. + The following file suffixes are supported as alternative configurations: + + * ``flash_and_run`` + * ``heap_memory`` + * ``static_memory`` + * ``multiple_threads`` + +Drivers +======= + +This section provides detailed lists of changes by :ref:`driver `. + +Wi-Fi drivers +------------- + +* Added the :ref:`nrf70_wifi_tx_power_calculation` section to the :ref:`nrf70_wifi` page. + +Libraries +========= + +This section provides detailed lists of changes by :ref:`library `. + +Binary libraries +---------------- + +* :ref:`liblwm2m_carrier_readme` library: + + * Updated the :ref:`req_appln_limitations` page to clarify carrier-specific requirements. + Added overlay files and documentation to :ref:`serial_lte_modem` application and :ref:`lwm2m_carrier` sample to guide in the correct usage of LwM2M carrier library for SoftBank and LG U+. + +Bluetooth libraries and services +-------------------------------- + +* Added the :ref:`rreq_readme` and :ref:`rrsp_readme` libraries. + +* :ref:`hogp_readme` library: + + * Updated the :c:func:`bt_hogp_rep_read` function to forward the GATT read error code through the registered user callback. + This ensures that API user is aware of the error. + +* :ref:`bt_fast_pair_readme` library: + + * Added support in build system for devices that do not support the :ref:`partition_manager`. + The :ref:`zephyr:nrf54h20dk_nrf54h20` board target is the only example of such a device. + +Modem libraries +--------------- + +* :ref:`modem_key_mgmt` library: + + * Added the CME error code 527 - invalid content. + * Updated to handle generic CME errors from all ``AT%CMNG`` commands. + +nRF RPC libraries +----------------- + +* Added the :ref:`nrf_rpc_dev_info` library for obtaining information about a device connected through the :ref:`nrfxlib:nrf_rpc`. + +sdk-nrfxlib +----------- + +See the changelog for each library in the :doc:`nrfxlib documentation ` for additional information. + +Scripts +======= + +This section provides detailed lists of changes by :ref:`script `. + +* :ref:`nrf_desktop_config_channel_script` Python script: + + * Added support for pure ED25519 signature (used by nRF54L-based devices that enable MCUboot hardware cryptography). + This requires using ``imgtool`` supporting pure ED25519 signature that can be installed from ``sdk-mcuboot`` repository. + +MCUboot +======= + +The MCUboot fork in |NCS| (``sdk-mcuboot``) contains all commits from the upstream MCUboot repository up to and including ``e890df7ab975da181a9f3fb3abc470bf935625ab``, with some |NCS| specific additions. + +The code for integrating MCUboot into |NCS| is located in the :file:`ncs/nrf/modules/mcuboot` folder. + +The following list summarizes both the main changes inherited from upstream MCUboot and the main changes applied to the |NCS| specific additions: + +* Added an option that allows to select the number of KMU key slots (also known as generations) to use when verifying an image. + See MCUboot's Kconfig option :kconfig:option:`CONFIG_BOOT_SIGNATURE_KMU_SLOTS`. + +Zephyr +====== + +.. NOTE TO MAINTAINERS: All the Zephyr commits in the below git commands must be handled specially after each upmerge and each nRF Connect SDK release. + +The Zephyr fork in |NCS| (``sdk-zephyr``) contains all commits from the upstream Zephyr repository up to and including ``beb733919d8d64a778a11bd5e7d5cbe5ae27b8ee``, with some |NCS| specific additions. + +For the list of upstream Zephyr commits (not including cherry-picked commits) incorporated into nRF Connect SDK since the most recent release, run the following command from the :file:`ncs/zephyr` repository (after running ``west update``): + +.. code-block:: none + + git log --oneline beb733919d ^ea02b93eea + +For the list of |NCS| specific commits, including commits cherry-picked from upstream, run: + +.. code-block:: none + + git log --oneline manifest-rev ^beb733919d + +The current |NCS| main branch is based on revision ``beb733919d`` of Zephyr. + +.. note:: + For possible breaking changes and changes between the latest Zephyr release and the current Zephyr version, refer to the :ref:`Zephyr release notes `. + +Documentation +============= + +* Added: + + * The :ref:`matter_samples_config` page that documents Kconfig options and snippets shared by Matter samples and applications. + * A page about :ref:`add_new_driver`. + * A page for the :ref:`sdp_gpio` application. + +* Updated the structure and contents of the :ref:`gpio_pin_config` page with more detailed information. + +* Fixed an issue on the :ref:`install_ncs` page where an incorrect directory path was provided for Linux and macOS at the end of the :ref:`cloning_the_repositories_win` section. diff --git a/doc/nrf/releases_and_maturity/releases/release-notes-changelog.rst b/doc/nrf/releases_and_maturity/releases/release-notes-changelog.rst index 8efa09f9b1a5..2bd9297887a4 100644 --- a/doc/nrf/releases_and_maturity/releases/release-notes-changelog.rst +++ b/doc/nrf/releases_and_maturity/releases/release-notes-changelog.rst @@ -1,6 +1,6 @@ .. _ncs_release_notes_changelog: -Changelog for |NCS| v2.7.99 +Changelog for |NCS| v2.9.99 ########################### .. contents:: @@ -16,14 +16,14 @@ The most relevant changes that are present on the main branch of the |NCS|, as c When adding a new PR, decide whether it needs an entry in the changelog. If it does, update this page. - Add the sections you need, as only a handful of sections is kept when the changelog is cleaned. - "Protocols" section serves as a highlight section for all protocol-related changes, including those made to samples, libraries, and so on. + Add the sections you need, as only a handful of sections are kept when the changelog is cleaned. + The "Protocols" section serves as a highlight section for all protocol-related changes, including those made to samples, libraries, and so on. Known issues ************ Known issues are only tracked for the latest official release. -See `known issues for nRF Connect SDK v2.7.0`_ for the list of issues valid for the latest release. +See `known issues for nRF Connect SDK v2.9.0-nRF54H20-rc1`_ for the list of issues valid for the latest release. Changelog ********* @@ -33,62 +33,30 @@ The following sections provide detailed lists of changes by component. IDE, OS, and tool support ========================= -* Added explicit mention of the :ref:`requirements_jlink` being required in the :ref:`installing_vsc` section of the installation page. * Updated: - * The required `SEGGER J-Link`_ version to v7.94i. - * The :ref:`supported_OS` table on the :ref:`gs_recommended_versions` page: - - * Linux 24.04 and macOS 15 have been added to the list. - * macOS 10.15, macOS 11, macOS 12 have been removed from the list. - * Tier descriptions have been updated. + * The required `SEGGER J-Link`_ version to v8.10f. + * The :ref:`installing_vsc` section on the :ref:`installation` page with the Windows-only requirement to install SEGGER USB Driver for J-Link. Board support ============= -* Added support for the Thingy:91 X board. -* Updated Thingy:91 X board to use the ``nordic,pm-ext-flash`` node instead of external flash device name in static partitions. -* Removed invalid external flash from static partitions for Thingy:91 X. +|no_changes_yet_note| Build and configuration system ============================== -* Added the ``SB_CONFIG_MCUBOOT_USE_ALL_AVAILABLE_RAM`` sysbuild Kconfig option to system to allow utilizing all available RAM when using TF-M on an nRF5340 device. - - .. note:: - This has security implications and may allow secrets to be leaked to the non-secure application in RAM. - -* Added the ``SB_CONFIG_MCUBOOT_NRF53_MULTI_IMAGE_UPDATE`` sysbuild Kconfig option that enables updating the network core on the nRF5340 SoC from external flash. - -* Removed the non-working support for configuring the NSIB signing key through the environmental or command line variable (``SB_SIGNING_KEY_FILE``) along with child image. - - .. note:: - This feature has never been functional. - To configure the signing key, use any available Kconfig method. - +|no_changes_yet_note| Bootloaders and DFU =================== -* Added: - - * Documentation for :ref:`qspi_xip_split_image` functionality. - * A section in the sysbuild-related migration guide about the migration of :ref:`child_parent_to_sysbuild_migration_qspi_xip` from child/parent image to sysbuild. - -* Updated the procedure for signing the application image built for booting by MCUboot in direct-XIP mode with revert support. - Now, the Intel-Hex file of the application image automatically receives a confirmation flag. - -* Removed secure bootloader Kconfig ``CONFIG_SECURE_BOOT_DEBUG`` and replaced with usage of logging subsystem. - -See also the `MCUboot`_ section. +|no_changes_yet_note| Developing with nRF91 Series ============================ -* Added: - - * The :ref:`nRF91 modem tracing with RTT backend snippet ` to enable modem tracing using the RTT trace backend. - * The :ref:`nRF91 modem tracing with RAM backend snippet ` to enable modem tracing using the RAM trace backend. +|no_changes_yet_note| Developing with nRF70 Series ============================ @@ -98,14 +66,13 @@ Developing with nRF70 Series Working with nRF54H Series ========================== -|no_changes_yet_note| +* Removed the note on installing SEGGER USB Driver for J-Link on Windows from the :ref:`ug_nrf54h20_gs` page and moved its contents to the `nRF Util prerequisites`_ documentation. + The Windows-only requirement to install the SEGGER USB Driver for J-Link is now mentioned in the :ref:`installing_vsc` section on the :ref:`installation` page. Developing with nRF54L Series ============================= -* Added the :ref:`ug_nrf54l_cryptography` page, providing more information about the cryptographic peripherals of the nRF54L Series devices, the programming model for referencing keys, and the configuration. -* Updated the name and the structure of the section, with :ref:`ug_nrf54l` as the landing page. -* Removed the Getting started with the nRF54L15 PDK page, and instead included the information about the `Quick Start`_ app support. +* Added HMAC SHA-256 with a 128-bit key type to KMU, as detailed in the :ref:`ug_nrf54l_crypto_kmu_supported_key_types` documentation section. Developing with nRF53 Series ============================ @@ -130,20 +97,13 @@ Developing with PMICs Security ======== -Added: - -* The :kconfig:option:`CONFIG_CRACEN_IKG_SEED_KMU_SLOT` Kconfig option to allow customization of the KMU slot used to store CRACEN's Internal Key Generator (IKG) seed. The default IKG seed slot is now 183 (previously 0). -* TF-M support to the :ref:`zephyr:nrf54l15dk_nrf54l15` (board target ``nrf54l15dk/nrf54l15/cpuapp/ns``). - -Removed: - -* TF-M support from the :ref:`zephyr:nrf54l15pdk_nrf54l15` (board target ``nrf54l15pdk/nrf54l15/cpuapp/ns``). + * Added support for HKDF-Expand and HKDF-Extract in CRACEN. + * Added support for Ed25519ph(HashEdDSA) to CRACEN Protocols ========= -This section provides detailed lists of changes by :ref:`protocol `. -See `Samples`_ for lists of changes for the protocol-related samples. +|no_changes_yet_note| Amazon Sidewalk --------------- @@ -153,29 +113,13 @@ Amazon Sidewalk Bluetooth® LE ------------- -* Fixed an issue where the Bluetooth subsystem deadlocked when a Bluetooth link was lost during data transfer. - In this scenario, the disconnected event was never delivered to the application. - The issue only occurred when the :kconfig:option:`CONFIG_BT_HCI_ACL_FLOW_CONTROL` Kconfig option was enabled. - This option is enabled by default on the nRF5340 DK. -* The correct SoftDevice Controller library :kconfig:option:`CONFIG_BT_LL_SOFTDEVICE_MULTIROLE` will now be selected automatically when using coexistence based on :kconfig:option:`CONFIG_MPSL_CX` for nRF52-series devices. -* Added the APIs :c:func:`bt_hci_err_to_str` and :c:func:`bt_security_err_to_str` to allow printing error codes as strings. - Each API returns string representations of the error codes when the corresponding Kconfig option, :kconfig:option:`CONFIG_BT_HCI_ERR_TO_STR` or :kconfig:option:`CONFIG_BT_SECURITY_ERR_TO_STR`, is enabled. - The :ref:`ble_samples` and :ref:`nrf53_audio_app` are updated to utilize these new APIs. -* The Bluetooth HCI driver is now present as a devicetree node in the device tree. - The SoftDevice Controller driver uses a devicetree node named ``bt_hci_sdc`` with a devicetree binding compatible with ``nordic,bt-hci-sdc``. - The Zephyr Bluetooth LE Controller uses a devicetree node named ``bt_hci_controller`` with a devicetree binding compatible with ``zephyr,bt-hci-ll-sw-split``. - Applications using the Zephyr Bluetooth Controller need to be updated (see the :ref:`migration guide `). +* Fixed an issue where a flash operation executed on the system workqueue might result in ``-ETIMEDOUT``, if there is an active Bluetooth LE connection. +* Fixed an issue where Bluetooth applications built with the ``nordic-bt-rpc`` snippet (in the :ref:`ble_rpc` configuration) did not work on the nRF54H20 devices due to incorrect memory mapping. Bluetooth Mesh -------------- -* Updated: - - * Added metadata as optional parameter for models Light Lightness Server, Light HSL Server, Light CTL Temperature Server, Sensor Server, and Time Server. - To use the metadata, enable the :kconfig:option:`CONFIG_BT_MESH_LARGE_COMP_DATA_SRV` Kconfig option. - -* Removed the ``BT_MESH_SENSOR_USE_LEGACY_SENSOR_VALUE`` Kconfig option, deprecated in the |NCS| v2.6.0, as the old APIs, based on the :c:struct:`sensor_value` type, are removed. - Applications using the old APIs must be updated, as described in the :ref:`v2.6.0 migration guide `. +|no_changes_yet_note| DECT NR+ -------- @@ -185,7 +129,7 @@ DECT NR+ Enhanced ShockBurst (ESB) ------------------------- -|no_changes_yet_note| +* Added loading of radio trims and a fix of a hardware errata for the nRF54H20 SoC to improve the RF performance. Gazell ------ @@ -195,32 +139,14 @@ Gazell Matter ------ -* Added: - - * The Kconfig options to configure parameters impacting persistent subscriptions re-establishment: - - * :kconfig:option:`CONFIG_CHIP_MAX_ACTIVE_CASE_CLIENTS` - * :kconfig:option:`CONFIG_CHIP_MAX_ACTIVE_DEVICES` - * :kconfig:option:`CONFIG_CHIP_SUBSCRIPTION_RESUMPTION_MIN_RETRY_INTERVAL` - * :kconfig:option:`CONFIG_CHIP_SUBSCRIPTION_RESUMPTION_RETRY_MULTIPLIER` +* Added a new documentation page :ref:`ug_matter_group_communication` in the :ref:`ug_matter_intro_overview`. - * The :ref:`ug_matter_device_memory_profiling` section to the :ref:`ug_matter_device_optimizing_memory` page. - The section contains useful commands for measuring memory and troubleshooting tips. - * The ZMS file subsystem to all devices that contain RRAM, such as the nRF54L Series devices. - -* Changed: - - * The default Trusted Storage AEAD key to Hardware Unique Key (HUK) for supported nRF54L Series devices. - * Renamed the ``CONFIG_CHIP_FACTORY_RESET_ERASE_NVS`` Kconfig option to :kconfig:option:`CONFIG_CHIP_FACTORY_RESET_ERASE_SETTINGS`. - The new Kconfig option now works for both NVS and ZMS file system backends. +* Disabled the :ref:`mpsl` before performing factory reset to speed up the process. +* Added :ref:`ug_matter_debug_snippet`. Matter fork +++++++++++ -The Matter fork in the |NCS| (``sdk-connectedhomeip``) contains all commits from the upstream Matter repository up to, and including, the ``v1.3.0.0`` tag. - -The following list summarizes the most important changes inherited from the upstream Matter: - |no_changes_yet_note| nRF IEEE 802.15.4 radio driver @@ -231,18 +157,17 @@ nRF IEEE 802.15.4 radio driver Thread ------ -* Added the :ref:`ug_thread_build_report` and described how to use it. -* Changed the default Trusted Storage AEAD key to Hardware Unique Key (HUK) for supported nRF54L Series devices. +|no_changes_yet_note| Zigbee ------ -|no_changes_yet_note| +* Fixed the :file:`zb_add_ota_header.py` script to allow a patch version higher than 9 in an ``APPLICATION_VERSION_STRING``. Wi-Fi ----- -* The WPA supplicant is now switched to Zephyr upstream's fork instead of |NCS|. +|no_changes_yet_note| Applications ============ @@ -252,20 +177,17 @@ This section provides detailed lists of changes by :ref:`application ` Kconfig option to :ref:`nrf_desktop_usb_state`. - The option allows to synchronize providing HID data with USB Start of Frame (SOF). - The feature reduces the negative impact of jitter related to USB polls, but it also increases HID data latency. - For details, see :ref:`nrf_desktop_usb_state_sof_synchronization`. - * Local HID report buffering in :ref:`nrf_desktop_usb_state`. - This ensures that the memory buffer passed to the USB next stack is valid until a HID report is sent and allows to enqueue up to two HID input reports for a USB HID instance (used only when :ref:`CONFIG_DESKTOP_USB_HID_REPORT_SENT_ON_SOF ` Kconfig option is enabled). - * Bootup logs with the manifest semantic version information to :ref:`nrf_desktop_dfu_mcumgr` when the module is used for SUIT DFU and the SDFW supports semantic versioning (requires v0.6.2 and higher). - * Manifest semantic version information to the firmware information response in :ref:`nrf_desktop_dfu` when the module is used for SUIT DFU and the SDFW supports semantic versioning (requires v0.6.2 and higher). - * A missing DTS node compatible with ``zephyr,hid-device`` to the nRF52840 DK in the MCUboot QSPI configuration. - This ensures support for HID over USB when the USB next stack is selected. - * The USB next stack (:ref:`CONFIG_DESKTOP_USB_STACK_NEXT `) implies partial erase feature of the nRF SoC flash driver (:kconfig:option:`CONFIG_SOC_FLASH_NRF_PARTIAL_ERASE`). - This is done to improve stability of the USB next stack. - The partial erase feature works around device errors that might be reported by Windows USB host in Device Manager if USB cable is connected while erasing secondary image slot in the background. + * The :ref:`nrf_desktop_failsafe` to use the Zephyr :ref:`zephyr:hwinfo_api` driver for getting and clearing the reset reason information (see the :c:func:`hwinfo_get_reset_cause` and :c:func:`hwinfo_clear_reset_cause` functions). + The Zephyr :ref:`zephyr:hwinfo_api` driver replaces the dependency on the nrfx reset reason helper (see the :c:func:`nrfx_reset_reason_get` and :c:func:`nrfx_reset_reason_clear` functions). + * The release configuration for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target to enable the :ref:`nrf_desktop_failsafe` (see the :ref:`CONFIG_DESKTOP_FAILSAFE_ENABLE ` Kconfig option). -* Updated: +* Added: - * The :kconfig:option:`CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL` Kconfig option value in configurations with the Fast Pair support. - The value is now aligned with the Fast Pair requirements. - * The :kconfig:option:`CONFIG_NRF_RRAM_WRITE_BUFFER_SIZE` Kconfig option value in the nRF54L15 PDK configurations to ensure short write slots. - It prevents timeouts in the MPSL flash synchronization caused by allocating long write slots while maintaining a Bluetooth LE connection with short intervals and no connection latency. - * The method of obtaining hardware ID using Zephyr's :ref:`zephyr:hwinfo_api` on the :ref:`zephyr:nrf54h20dk_nrf54h20`. - Replaced the custom implementation of the :c:func:`z_impl_hwinfo_get_device_id` function in the nRF Desktop application with the native Zephyr driver function that now supports the :ref:`zephyr:nrf54h20dk_nrf54h20` board target. - Removed the ``CONFIG_DESKTOP_HWINFO_BLE_ADDRESS_FICR_POSTFIX`` Kconfig option as a postfix constant is no longer needed for the Zephyr native driver. - The driver uses ``BLE.ADDR``, ``BLE.IR``, and ``BLE.ER`` fields of the Factory Information Configuration Registers (FICR) to provide 8 bytes of unique hardware ID. - * The :ref:`nrf_desktop_dfu_mcumgr` to recognize the MCUmgr custom group ID (:kconfig:option:`CONFIG_MGMT_GROUP_ID_SUIT`) from the SUITFU subsystem (:kconfig:option:`CONFIG_MGMT_SUITFU`) as a DFU-related command group. - * All build configurations with the DFU over MCUmgr support to require encryption for operations on the Bluetooth GATT SMP service (see the :kconfig:option:`CONFIG_MCUMGR_TRANSPORT_BT_PERM_RW_ENCRYPT` Kconfig option). - The Bluetooth pairing procedure of the unpaired Bluetooth peers must now be performed before the DFU operation. - * The :ref:`nrf_desktop_dfu_mcumgr` to enable the MCUmgr handler that is used to report the bootloader information (see the :kconfig:option:`CONFIG_MCUMGR_GRP_OS_BOOTLOADER_INFO` Kconfig option). + * System Power Management for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target on the application and radio cores. + The application still has high power consumption as the Bluetooth LE controller running on the radio core requires disabling MRAM latency (:kconfig:option:`CONFIG_MRAM_LATENCY_AUTO_REQ`). + Enabling MRAM latency makes the Bluetooth LE controller unstable. + * Application configurations for the nRF54L05 and nRF54L10 SoCs (emulated on the nRF54L15 DK). + The configurations are supported through ``nrf54l15dk/nrf54l10/cpuapp`` and ``nrf54l15dk/nrf54l05/cpuapp`` board targets. + For details, see the :ref:`nrf_desktop_board_configuration`. nRF Machine Learning (Edge Impulse) ----------------------------------- @@ -339,30 +231,12 @@ nRF Machine Learning (Edge Impulse) Serial LTE modem ---------------- -* Added: - - * DTLS support for the ``#XUDPSVR`` and ``#XSSOCKET`` (UDP server sockets) AT commands when the :file:`overlay-native_tls.conf` configuration file is used. - * The :kconfig:option:`CONFIG_SLM_PPP_FALLBACK_MTU` Kconfig option that is used to control the MTU used by PPP when the cellular link MTU is not returned by the modem in response to the ``AT+CGCONTRDP=0`` AT command. - * Handler for new nRF Cloud event type ``NRF_CLOUD_EVT_RX_DATA_DISCON``. - * Support for socket option ``AT_SO_IPV6_DELAYED_ADDR_REFRESH``. - -* Removed: - - * Support for the :file:`overlay-native_tls.conf` configuration file with the ``thingy91/nrf9160/ns`` board target. - * Support for deprecated RAI socket options ``AT_SO_RAI_LAST``, ``AT_SO_RAI_NO_DATA``, ``AT_SO_RAI_ONE_RESP``, ``AT_SO_RAI_ONGOING``, and ``AT_SO_RAI_WAIT_MORE``. - -* Updated: - - * AT string parsing to utilize the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. - * The ``#XUDPCLI`` and ``#XSSOCKET`` (UDP client sockets) AT commands to use Zephyr's Mbed TLS with DTLS when the :file:`overlay-native_tls.conf` configuration file is used. +* Updated the application to use the :ref:`lib_downloader` library instead of the deprecated :ref:`lib_download_client` library. Thingy:53: Matter weather station --------------------------------- -* Added: - - * The :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_ZAP_FILES_PATH` Kconfig option, which specifies ZAP files location for the application. - By default, the option points to the :file:`src/default_zap` directory and can be changed to any path relative to application's location that contains the ZAP file and :file:`zap-generated` directory. +|no_changes_yet_note| Samples ======= @@ -377,176 +251,94 @@ Amazon Sidewalk samples Bluetooth samples ----------------- -* Added: - - * The :ref:`ble_radio_notification_conn_cb` sample demonstrating how to use the :ref:`ug_radio_notification_conn_cb` feature. - * The :ref:`bluetooth_conn_time_synchronization` sample demonstrating microsecond-accurate synchronization of connections that are happening over Bluetooth® Low Energy Asynchronous Connection-oriented Logical transport (ACL). - -* :ref:`bluetooth_isochronous_time_synchronization`: - - * Fixed **LED** toggling issues on nRF52 and nRF53 Series devices that would occur after RTC wraps that occur every ~8.5 minutes. - The **LED** previously toggled unintentionally, at the wrong point in time, or not at all. - -* :ref:`ble_event_trigger` sample: - - * Moved to the :file:`samples/bluetooth/event_trigger` folder. - -* :ref:`peripheral_hr_coded` sample: +* :ref:`direct_test_mode` sample: - * Fixed an issue where the HCI LE Set Extended Advertising Enable command was called with a NULL pointer. - -* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` board in the following samples: - - * :ref:`central_bas` - * :ref:`bluetooth_central_hr_coded` - * :ref:`multiple_adv_sets` - * :ref:`peripheral_bms` - * :ref:`peripheral_cgms` - * :ref:`peripheral_cts_client` - * :ref:`peripheral_gatt_dm` - * :ref:`peripheral_hr_coded` - * :ref:`peripheral_mds` - * :ref:`peripheral_nfc_pairing` - * :ref:`power_profiling` - * :ref:`peripheral_rscs` - * :ref:`shell_bt_nus` - * :ref:`ble_throughput` - -* :ref:`peripheral_mds` sample: - - * Fixed an issue where device ID was incorrectly set during system initialization because MAC address was not available at that time. - The device ID is now set to ``ncs-ble-testdevice`` by default using the :kconfig:option:`CONFIG_MEMFAULT_NCS_DEVICE_ID` Kconfig option. + * Added loading of radio trims and a fix of a hardware errata for the nRF54H20 SoC to improve the RF performance. Bluetooth Fast Pair samples --------------------------- -* Updated: - - * The values for the :kconfig:option:`CONFIG_BT_ADV_PROV_TX_POWER_CORRECTION_VAL` Kconfig option in all configurations, and for the :kconfig:option:`CONFIG_BT_FAST_PAIR_FMDN_TX_POWER_CORRECTION_VAL` Kconfig option in configurations with the Find My Device Network (FMDN) extension support. - The values are now aligned with the Fast Pair requirements. - * :ref:`fast_pair_locator_tag` sample: - * Added: - - * LED indication on development kits for the Fast Pair advertising state. - * An application versioning using the :file:`VERSION` file. - * The DFU support which can be enabled using the ``SB_CONFIG_APP_DFU`` sysbuild Kconfig option. - DFU is available for all supported targets except the ``debug`` configurations of :ref:`zephyr:nrf52dk_nrf52832` and :ref:`zephyr:nrf52833dk_nrf52833` due to size constraints. - - * Updated: - - * The :ref:`ipc_radio` image configuration by splitting it into the debug and release configurations. - * The location of the sample configuration. - It has been moved from the root sample directory to the dedicated folder (:file:`locator_tag/configuration`). - * The ``fp_adv`` module to use the trigger requests for the Fast Pair advertising state instead of setting the Fast Pair advertising mode directly. + * Added support for the :ref:`zephyr:nrf54h20dk_nrf54h20` board target. Bluetooth Mesh samples ---------------------- -* Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` board in the following samples: - - * :ref:`bluetooth_mesh_sensor_client` - * :ref:`bluetooth_mesh_sensor_server` - * :ref:`bluetooth_ble_peripheral_lbs_coex` - * :ref:`bt_mesh_chat` - * :ref:`bluetooth_mesh_light_switch` - * :ref:`bluetooth_mesh_silvair_enocean` - * :ref:`bluetooth_mesh_light_dim` - * :ref:`bluetooth_mesh_light` - * :ref:`bluetooth_mesh_light_lc` - * :ref:`ble_mesh_dfu_target` - * :ref:`ble_mesh_dfu_distributor` - -* :ref:`bluetooth_ble_peripheral_lbs_coex` sample: +* Added: - * Updated the usage of the :c:macro:`BT_LE_ADV_CONN` macro. - See the Bluetooth Host section in Zephyr's :ref:`zephyr:migration_3.7`. + * Support for nRF54L10 in the following samples: + + * :ref:`bluetooth_mesh_sensor_client` + * :ref:`bluetooth_mesh_sensor_server` + * :ref:`bluetooth_ble_peripheral_lbs_coex` + * :ref:`bt_mesh_chat` + * :ref:`bluetooth_mesh_light_switch` + * :ref:`bluetooth_mesh_silvair_enocean` + * :ref:`bluetooth_mesh_light_dim` + * :ref:`bluetooth_mesh_light` + * :ref:`ble_mesh_dfu_target` + * :ref:`bluetooth_mesh_light_lc` + * :ref:`ble_mesh_dfu_distributor` + + * Support for nRF54L05 in the following samples: + + * :ref:`bluetooth_mesh_sensor_client` + * :ref:`bluetooth_mesh_sensor_server` + * :ref:`bluetooth_ble_peripheral_lbs_coex` + * :ref:`bt_mesh_chat` + * :ref:`bluetooth_mesh_light_switch` + * :ref:`bluetooth_mesh_silvair_enocean` + * :ref:`bluetooth_mesh_light_dim` + * :ref:`bluetooth_mesh_light` + * :ref:`bluetooth_mesh_light_lc` Cellular samples ---------------- -* Added the :ref:`uicc_lwm2m_sample` sample. +* Updated the following samples to use the :ref:`lib_downloader` library instead of the :ref:`lib_download_client` library: -* :ref:`fmfu_smp_svr_sample` sample: - - * Removed the unused :ref:`at_cmd_parser_readme` library. + * :ref:`http_application_update_sample` + * :ref:`http_modem_delta_update_sample` + * :ref:`http_modem_full_update_sample` + * :ref:`location_sample` + * :ref:`lwm2m_carrier` + * :ref:`lwm2m_client` + * :ref:`modem_shell_application` + * :ref:`nrf_cloud_multi_service` + * :ref:`nrf_cloud_rest_fota` * :ref:`modem_shell_application` sample: - * Added ``link modem`` command for initializing and shutting down the modem. - * Updated to use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. - -* :ref:`nrf_cloud_rest_fota` sample: - - * Added support for setting the FOTA update check interval using the config section in the shadow. - * Removed redundant logging now done by the :ref:`lib_nrf_cloud` library. + * Removed the ``CONFIG_MOSH_LINK`` Kconfig option. + The link control functionality is now always enabled and cannot be disabled. * :ref:`nrf_cloud_multi_service` sample: - * Added: - - * The :kconfig:option:`CONFIG_TEST_COUNTER_MULTIPLIER` Kconfig option to multiply the number of test counter messages sent, for testing purposes. - * A handler for new nRF Cloud event type ``NRF_CLOUD_EVT_RX_DATA_DISCON`` to stop sensors and location services. - * Board support files to enable Wi-Fi scanning for the Thingy:91 X. - * The :kconfig:option:`CONFIG_SEND_ONLINE_ALERT` Kconfig option to enable calling the :c:func:`nrf_cloud_alert` function on startup. - * Logging of the `reset reason code `_. - * The :kconfig:option:`CONFIG_POST_PROVISIONING_INTERVAL_M` Kconfig option to reduce the provisioning connection interval once the device successfully connects. - - * Updated: - - * Wi-Fi overlays from newlibc to picolib. - * Handling of JITP association to improve speed and reliability. - * Renamed the :file:`overlay_nrf7002ek_wifi_no_lte.conf` overlay to :file:`overlay_nrf700x_wifi_mqtt_no_lte.conf`. - * Renamed the :file:`overlay_nrf7002ek_wifi_coap_no_lte.conf` overlay to :file:`overlay_nrf700x_wifi_coap_no_lte.conf`. - * The value of the :kconfig:option:`CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE` Kconfig option in the :file:`overlay_coap.conf` file. - A larger value is required now that the :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option is enabled. - * Handling of credentials check to disable network if not using the provisioning service. - - * Fixed an issue where the accepted shadow was not marked as received because the config section did not yet exist in the shadow. - * Removed redundant logging now done by the :ref:`lib_nrf_cloud` library. - -* :ref:`nrf_cloud_rest_device_message` sample: - - * Added: - - * Support for dictionary logs using REST. - * The :kconfig:option:`CONFIG_SEND_ONLINE_ALERT` Kconfig option to enable calling the :c:func:`nrf_cloud_alert` function on startup. - * Logging of the `reset reason code `_. - - * Updated: - - * Credentials check to also see if AWS root CA cert is likely present. - * Credentials check failure to disable network if not using the provisioning service. - - * Removed redundant logging now done by the :ref:`lib_nrf_cloud` library. - -* :ref:`nrf_cloud_rest_cell_pos_sample` sample: + * Fixed: - * Removed redundant logging now done by the :ref:`lib_nrf_cloud` library. + * An issue with an uninitialized variable in the :c:func:`handle_at_cmd_requests` function. + * An issue with the too small :kconfig:option:`CONFIG_COAP_EXTENDED_OPTIONS_LEN_VALUE` Kconfig value + in the :file:`overlay-coap_nrf_provisioning.conf` file. -* :ref:`smp_svr` sample: +* :ref:`lte_sensor_gateway` sample: - * Added sysbuild configuration files. + * Fixed an issue with devicetree configuration after HCI updates in `sdk-zephyr`_. Cryptography samples -------------------- -* Added support for the ``nrf54l15dk/nrf54l15/cpuapp/ns`` board target, replacing ``nrf54l15pdk/nrf54l15/cpuapp/ns``. +|no_changes_yet_note| Debug samples ------------- -* :ref:`memfault_sample` sample: - - * Increased the value of the :kconfig:option:`CONFIG_MAIN_STACK_SIZE` Kconfig option to 8192 bytes to avoid stack overflow. - |no_changes_yet_note| DECT NR+ samples ---------------- -* Added the :ref:`dect_shell_application` sample. +|no_changes_yet_note| Edge Impulse samples -------------------- @@ -571,79 +363,51 @@ Keys samples Matter samples -------------- -* Added: - - * The :kconfig:option:`CONFIG_NCS_SAMPLE_MATTER_ZAP_FILES_PATH` Kconfig option, which specifies ZAP files location for the sample. - By default, the option points to the :file:`src/default_zap` directory and can be changed to any path relative to sample's location that contains the ZAP file and :file:`zap-generated` directory. - * Support for the nRF54L15 DK. - * Support for :ref:`Trusted Firmware-M ` on the nRF54L15 SoC. - * The :ref:`matter_smoke_co_alarm_sample` sample that demonstrates implementation of Matter Smoke CO alarm device type. - -* :ref:`matter_lock_sample` sample: - - * Added :ref:`Matter Lock schedule snippet `, and updated the documentation to use the snippet. - -* Enabled the :ref:`ug_thread_build_report` generation in all samples. -* Removed support for the nRF54L15 PDK in all samples. +* Updated the :ref:`matter_template_sample` sample document with the instructions on how to build the sample on the nRF54L15 DK with support for Matter OTA DFU and DFU over Bluetooth SMP, and using internal MRAM only. +* Enabled SUIT DFU support for the :ref:`matter_lock_sample`, and :ref:`matter_template_sample` samples. + Currently, only the Matter OTA protocol is fully supported for SUIT DFU purposes. Networking samples ------------------ -* :ref:`http_server` sample: +* Updated the following samples to use the :ref:`lib_downloader` library instead of the :ref:`lib_download_client` library: - * Fixed not to fail with a fatal error if IPv4 or IPv6 server setup fails. + * :ref:`aws_iot` + * :ref:`azure_iot_hub` + * :ref:`download_sample` NFC samples ----------- |no_changes_yet_note| -nRF RPC -------- - -* Added the :ref:`nrf_rpc_protocols_serialization_client` and the :ref:`nrf_rpc_protocols_serialization_server` samples. - nRF5340 samples --------------- -* :ref:`smp_svr_ext_xip` sample: - - * This sample has been converted to support sysbuild. - * Support has been added to demonstrate direct-XIP building and building without network core support. +* Removed the ``nRF5340: Multiprotocol RPMsg`` sample. + Use the :ref:`ipc_radio` application instead. Peripheral samples ------------------ -* :ref:`802154_sniffer` sample: - - * Increased the number of RX buffers to reduce the chances of frame drops during high traffic periods. - * Disabled the |NCS| boot banner. - * Added sysbuild configuration for nRF5340. - * Fixed the dBm value reported for captured frames. - -* :ref:`802154_phy_test` sample: - - * Added build configuration for the nRF54H20. - * :ref:`radio_test` sample: - * Added packet reception limit for the ``start_rx`` command. + * Added loading of radio trims and a fix of a hardware errata for the nRF54H20 SoC to improve the RF performance. PMIC samples ------------ -* Added: - - * Support for the :ref:`zephyr:nrf54l15dk_nrf54l15` and :ref:`zephyr:nrf54h20dk_nrf54h20` to the PMIC samples. +|no_changes_yet_note| -* :ref:`npm1300_fuel_gauge` sample: +Protocol serialization samples +------------------------------ - * Updated to accommodate API changes in nRF Fuel Gauge library v0.11.1. +|no_changes_yet_note| SDFW samples ------------ -|no_changes_yet_note| +* Removed the SDFW: Service Framework Client sample as all services demonstrated by the sample have been removed. Sensor samples -------------- @@ -658,48 +422,32 @@ SUIT samples Trusted Firmware-M (TF-M) samples --------------------------------- -* Replaced support for the ``nrf54l15pdk/nrf54l15/cpuapp/ns`` board target with ``nrf54l15dk/nrf54l15/cpuapp/ns``. +|no_changes_yet_note| + Thread samples -------------- -* Enabled the :ref:`ug_thread_build_report` generation in all samples. - -* :ref:`ot_cli_sample` sample: - - * Added support for the :ref:`zephyr:nrf54l15dk_nrf54l15` in the low-power snippet. +|no_changes_yet_note| Zigbee samples -------------- -* :ref:`zigbee_light_switch_sample` sample: - - * Added the option to configure transmission power. - * Fixed the FOTA configuration for the nRF5340 DK. +|no_changes_yet_note| Wi-Fi samples ------------- -* :ref:`wifi_radio_test` sample: - - * Added capture timeout as a parameter for packet capture. - * Expanded the scope of ``wifi_radio_test show_config`` subcommand and rectified the behavior of ``wifi_radio_test tx_pkt_preamble`` subcommand. - -* :ref:`softap_wifi_provision_sample` sample: - - * Increased the value of the :kconfig:option:`CONFIG_SOFTAP_WIFI_PROVISION_THREAD_STACK_SIZE` Kconfig option to 8192 bytes to avoid stack overflow. +* :ref:`wifi_station_sample` sample: -* :ref:`wifi_shell_sample` sample: - - * Added support for running the full stack on the Thingy:91 X. - This is a special configuration that uses the nRF5340 as the host chip instead of the nRF9151. + * Added an ``overlay-zperf.conf`` overlay for :ref:`performance benchmarking and memory footprint analysis `. Other samples ------------- * :ref:`coremark_sample` sample: - * Updated the logging mode to minimal (:kconfig:option:`CONFIG_LOG_MODE_MINIMAL`) to reduce the sample's memory footprint and ensure no logging interference with the running benchmark. + * Added support for the nRF54L05 and nRF54L10 SoCs (emulated on nRF54L15 DK). Drivers ======= @@ -711,7 +459,7 @@ This section provides detailed lists of changes by :ref:`driver `. Wi-Fi drivers ------------- -* nRF70 Series Wi-Fi driver is upstreamed to Zephyr, so, removed from the |NCS|. +|no_changes_yet_note| Libraries ========= @@ -721,48 +469,16 @@ This section provides detailed lists of changes by :ref:`library `. Binary libraries ---------------- -|no_changes_yet_note| +* :ref:`liblwm2m_carrier_readme` library: + + * Updated the glue to use the :ref:`lib_downloader` library instead of the deprecated :ref:`lib_download_client` library. Bluetooth libraries and services -------------------------------- -* :ref:`bt_fast_pair_readme` library: - - * Added: - - * The :kconfig:option:`CONFIG_BT_FAST_PAIR_BN` Kconfig option that enables support for the Battery Notification extension. - You must enable this option to access Fast Pair API elements associated with the Battery Notification extension. - * The :kconfig:option:`CONFIG_BT_FAST_PAIR_SUBSEQUENT_PAIRING` Kconfig option allowing the user to control the support for the Fast Pair subsequent pairing feature. - * The :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE` Kconfig choice option allowing the user to select their target Fast Pair use case. - The :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_UNKNOWN`, :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_INPUT_DEVICE`, :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_LOCATOR_TAG` and :kconfig:option:`CONFIG_BT_FAST_PAIR_USE_CASE_MOUSE` Kconfig options represent the supported use cases that can be selected as part of this Kconfig choice option. - - * Removed: +* :ref:`bt_mesh` library: - * The MbedTLS cryptographic backend support in Fast Pair, because it is superseded by the PSA backend. - Consequently, the :kconfig:option:`CONFIG_BT_FAST_PAIR_CRYPTO_MBEDTLS` Kconfig option has also been removed. - * The default overrides for the :kconfig:option:`CONFIG_BT_DIS` and :kconfig:option:`CONFIG_BT_DIS_FW_REV` Kconfig options that enable these options together with the Google Fast Pair Service. - This configuration is now selected only by the Fast Pair use cases that require the Device Information Service (DIS). - * The default override for the :kconfig:option:`CONFIG_BT_DIS_FW_REV_STR` Kconfig option that was set to :kconfig:option:`CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION` if :kconfig:option:`CONFIG_BOOTLOADER_MCUBOOT` was enabled. - The default override is now handled in the Kconfig of the Zephyr Device Information Service (DIS) module and is based on Zephyr's :ref:`zephyr:app-version-details` that uses the :file:`VERSION` file. - * The :c:func:`bt_fast_pair_factory_reset_user_action_prepare` weak function definition, which could previously be overridden to prepare for the incoming Fast Pair factory reset. - You can still override the :c:func:`bt_fast_pair_factory_reset_user_action_perform` weak function to perform custom actions during the Fast Pair factory reset. - - * Updated the default values of the following Fast Pair Kconfig options: - - * :kconfig:option:`CONFIG_BT_FAST_PAIR_SUBSEQUENT_PAIRING` - * :kconfig:option:`CONFIG_BT_FAST_PAIR_REQ_PAIRING` - * :kconfig:option:`CONFIG_BT_FAST_PAIR_PN` - * :kconfig:option:`CONFIG_BT_FAST_PAIR_GATT_SERVICE_MODEL_ID` - - These Kconfig options are now disabled by default and are selected only by the Fast Pair use cases that require them. - -* :ref:`bt_le_adv_prov_readme`: - - * Updated the :kconfig:option:`CONFIG_BT_ADV_PROV_FAST_PAIR_SHOW_UI_PAIRING` Kconfig option and the :c:func:`bt_le_adv_prov_fast_pair_show_ui_pairing` function to require the enabling of the :kconfig:option:`CONFIG_BT_FAST_PAIR_SUBSEQUENT_PAIRING` Kconfig option. - * Added the :c:member:`bt_le_adv_prov_adv_state.adv_handle` field to the :c:struct:`bt_le_adv_prov_adv_state` structure to store the advertising handle. - If the :kconfig:option:`CONFIG_BT_EXT_ADV` Kconfig option is enabled, you can use the :c:func:`bt_hci_get_adv_handle` function to obtain the advertising handle for the advertising set that employs :ref:`bt_le_adv_prov_readme`. - If the Kconfig option is disabled, the :c:member:`bt_le_adv_prov_adv_state.adv_handle` field must be set to ``0``. - This field is currently used by the TX Power provider (:kconfig:option:`CONFIG_BT_ADV_PROV_TX_POWER`). + * Fixed an issue in the :ref:`bt_mesh_light_ctrl_srv_readme` model to automatically resume the Lightness Controller after recalling a scene (``NCSDK-30033`` known issue). Common Application Framework ---------------------------- @@ -772,321 +488,95 @@ Common Application Framework Debug libraries --------------- -* :ref:`mod_memfault` library: - - * Added location metrics, including GNSS, cellular, and Wi-Fi specific metrics. - The metrics are enabled with the :kconfig:option:`CONFIG_MEMFAULT_NCS_LOCATION_METRICS` Kconfig option. +|no_changes_yet_note| DFU libraries ------------- -* :ref:`lib_dfu_target` library: +|no_changes_yet_note| - * Updated the DFU Target SUIT implementation to the newest version of the SUIT. - * Added SUIT cache processing to the DFU Target SUIT library, as described in the :ref:`lib_dfu_target_suit_style_update` section. +* :ref:`lib_fmfu_fdev`: + + * Regenerated the zcbor-generated code files using v0.9.0. Gazell libraries ---------------- |no_changes_yet_note| -Modem libraries ---------------- - -* Added: - - * The :ref:`at_parser_readme` library. - The :ref:`at_parser_readme` is a library that parses AT command responses, notifications, and events. - Compared to the deprecated :ref:`at_cmd_parser_readme` library, it does not allocate memory dynamically and has a smaller footprint. - For more information on how to transition from the :ref:`at_cmd_parser_readme` library to the :ref:`at_parser_readme` library, see the :ref:`migration guide `. - * The :ref:`lib_uicc_lwm2m` library. - This library reads the LwM2M bootstrap configuration from SIM. +Security libraries +------------------ -* :ref:`at_cmd_parser_readme` library: +|no_changes_yet_note| - * Deprecated: +Modem libraries +--------------- - * The :ref:`at_cmd_parser_readme` library in favor of the :ref:`at_parser_readme` library. - The :ref:`at_cmd_parser_readme` library will be removed in a future version. - For more information on how to transition from the :ref:`at_cmd_parser_readme` library to the :ref:`at_parser_readme` library, see the :ref:`migration guide `. - * The :kconfig:option:`CONFIG_AT_CMD_PARSER`. - This option will be removed in a future version. +* :ref:`pdn_readme` library: - * Renamed the :c:func:`at_parser_cmd_type_get` function to :c:func:`at_parser_at_cmd_type_get` to prevent a name collision. + * Deprecated the :c:func:`pdn_dynamic_params_get` function. + Use the new function :c:func:`pdn_dynamic_info_get` instead. * :ref:`lte_lc_readme` library: - * Removed: - - * The :c:func:`lte_lc_init` function. - All instances of this function can be removed without any additional actions. - * The :c:func:`lte_lc_deinit` function. - Use the :c:func:`lte_lc_power_off` function instead. - * The :c:func:`lte_lc_init_and_connect` function. - Use the :c:func:`lte_lc_connect` function instead. - * The :c:func:`lte_lc_init_and_connect_async` function. - Use the :c:func:`lte_lc_connect_async` function instead. - * The ``CONFIG_LTE_NETWORK_USE_FALLBACK`` Kconfig option. - Use the :kconfig:option:`CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT` or :kconfig:option:`CONFIG_LTE_NETWORK_MODE_LTE_M_NBIOT_GPS` Kconfig option instead. - In addition, you can control the priority between LTE-M and NB-IoT using the :kconfig:option:`CONFIG_LTE_MODE_PREFERENCE` Kconfig option. - - * Deprecated the :c:macro:`LTE_LC_ON_CFUN` macro. - Use the :c:macro:`NRF_MODEM_LIB_ON_CFUN` macro instead. - - * Added a new :c:enumerator:`LTE_LC_EVT_RAI_UPDATE` event that is enabled with the :kconfig:option:`CONFIG_LTE_RAI_REQ` Kconfig option. - - * Updated: - - * To use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. - * The :c:func:`lte_lc_neighbor_cell_measurement` function to return an error for invalid GCI count. - * The :c:func:`lte_lc_factory_reset` function has been deprecated. - Use the ``AT%XFACTORYRESET`` AT command instead. - Refer to the :ref:`migration guide ` for more details. - * The :c:enum:`lte_lc_factory_reset_type` type has been deprecated. - * The :c:func:`lte_lc_reduced_mobility_get` and :c:func:`lte_lc_reduced_mobility_set` functions have been deprecated. - Refer to the :ref:`migration guide ` for more details. - * The :c:enum:`lte_lc_reduced_mobility_mode` type has been deprecated. - Refer to the :ref:`migration guide ` for more details. - -* :ref:`lib_location` library: - - * Fixed: - - * A bug causing the GNSS obstructed visibility detection to sometimes count only part of the tracked satellites. - * A bug causing the GNSS obstructed visibility detection to be sometimes performed twice. - - * Removed the unused :ref:`at_cmd_parser_readme` library. - -* :ref:`lib_zzhc` library: - - * Updated to use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. - -* :ref:`modem_info_readme` library: - - * Updated: - - * To use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. - * The formulas of RSRP and RSRQ values in :c:macro:`RSRP_IDX_TO_DBM` and :c:macro:`RSRQ_IDX_TO_DB` based on AT command reference guide updates. - The formulas are now aligned with the modem implementation that has not changed - but the AT command reference guide has not been up to date with the modem implementation. - - * Removed ``RSRP_OFFSET_VAL``, ``RSRQ_OFFSET_VAL`` and ``RSRQ_SCALE_VAL`` from the API. - Clients should have used the :c:macro:`RSRP_IDX_TO_DBM` and the :c:macro:`RSRQ_IDX_TO_DB` macros. - -* :ref:`nrf_modem_lib_lte_net_if` library: - - * Added a log warning suggesting a SIM card to be installed if a UICC error is detected by the modem. - * Fixed a bug causing the cell network to be treated as offline if IPv4 is not assigned. - -* :ref:`nrf_modem_lib_readme`: - - * Added support for socket option ``SO_IPV6_DELAYED_ADDR_REFRESH``. - - * Updated: - - * The RTT trace backend to allocate the RTT channel at boot, instead of when the modem is activated. - * The flash trace backend to solve concurrency issues when reading traces while writing, and when reinitializing the application (warm start). - * Renamed the nRF91 socket offload layer from ``nrf91_sockets`` to ``nrf9x_sockets`` to reflect that the offload layer is not exclusive to the nRF91 Series SiPs. - * The :ref:`modem_trace_module` to let the trace thread sleep when the modem trace level is set to :c:enumerator:`NRF_MODEM_LIB_TRACE_LEVEL_OFF` using the :c:func:`nrf_modem_lib_trace_level_set` function, and the trace backend returns ``-ENOSPC``. - The trace thread wakes up when another trace level is set. - * The RTT trace backend to return ``-ENOSPC`` when the RTT buffer is full. - This allows the trace thread to sleep to save power. - - - * Rename the nRF91 socket offload layer from ``nrf91_sockets`` to ``nrf9x_sockets`` to reflect that the offload layer is not exclusive to the nRF91 Series SiPs. - - * Removed: - - * Support for deprecated RAI socket options ``SO_RAI_LAST``, ``SO_RAI_NO_DATA``, ``SO_RAI_ONE_RESP``, ``SO_RAI_ONGOING``, and ``SO_RAI_WAIT_MORE``. - * The mutex in the :c:func:`nrf9x_socket_offload_getaddrinfo` function after updating the :c:func:`nrf_getaddrinfo` function to handle concurrent requests. - -* :ref:`modem_info_readme` library: - - * Fixed a potential issue with scanf in the :c:func:`modem_info_get_current_band` function, which could lead to memory corruption. + * Fixed handling of ``%NCELLMEAS`` notification with status 2 (measurement interrupted) and no cells. + * Added sending of ``LTE_LC_EVT_NEIGHBOR_CELL_MEAS`` event with ``current_cell`` set to ``LTE_LC_CELL_EUTRAN_ID_INVALID`` in case an error occurs while parsing the ``%NCELLMEAS`` notification. * :ref:`modem_key_mgmt` library: - * Added the :c:func:`modem_key_mgmt_clear` function to delete all credentials associated with a security tag. - -* :ref:`pdn_readme` library: - - * Added the event ``PDN_EVENT_CTX_DESTROYED`` to indicate when a PDP context is destroyed. - This happens when the modem is switched to minimum functionality mode (``CFUN=0``). - -* :ref:`sms_readme` library: - - * Added the :kconfig:option:`CONFIG_SMS_STATUS_REPORT` Kconfig option to configure whether the SMS status report is requested. + * Fixed an issue with the :c:func:`modem_key_mgmt_clear` function where it returned ``-ENOENT`` when the credential was cleared. - * Updated: - - * To use the ``AT+CMMS`` AT command when sending concatenated SMS message. - * To set "7" as a fallback SMS service center address for type approval SIM cards which do not have it set. - -* :ref:`lib_at_shell` library: - - * Added the :kconfig:option:`CONFIG_AT_SHELL_UNESCAPE_LF` Kconfig option to enable reception of multiline AT commands. - * Updated the :c:func:`at_shell` function to replace ``\n`` with ```` if :kconfig:option:`CONFIG_AT_SHELL_UNESCAPE_LF` is enabled. - -* :ref:`modem_key_mgmt` library: - - * Updated the :c:func:`modem_key_mgmt_read()` function to return the actual size buffer required to read the certificate if the size provided is too small. +* Updated the :ref:`nrf_modem_lib_lte_net_if` to automatically set the actual link :term:`Maximum Transmission Unit (MTU)` on the network interface when PDN connectivity is gained. Multiprotocol Service Layer libraries ------------------------------------- -* The Kconfig option ``CONFIG_MPSL_CX_THREAD`` has been renamed to :kconfig:option:`CONFIG_MPSL_CX_3WIRE` to better indicate multiprotocol compatibility. -* The Kconfig option ``CONFIG_MPSL_CX_BT_1WIRE`` has been deprecated. -* Added: - - * A 1-wire coexistence implementation which can be enabled using the Kconfig option :kconfig:option:`CONFIG_MPSL_CX_1WIRE`. - -* Fixed: - - * An issue where the HFXO would be left on after uninitializing MPSL when the RC oscillator was used as the Low Frequency clock source (DRGN-22809). +|no_changes_yet_note| Libraries for networking ------------------------ -* :ref:`lib_lwm2m_client_utils` library: - - * Updated to use the :ref:`at_parser_readme` library instead of the :ref:`at_cmd_parser_readme` library. - -* :ref:`lib_nrf_cloud_rest` library: - - * Added the function :c:func:`nrf_cloud_rest_shadow_transform_request` to request shadow data using a JSONata expression. - -* :ref:`lib_nrf_cloud` library: - - * Added: - - * The function :c:func:`nrf_cloud_client_id_runtime_set` to set the device ID string if the :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_SRC_RUNTIME` Kconfig option is enabled. - * The functions :c:func:`nrf_cloud_sec_tag_set` and :c:func:`nrf_cloud_sec_tag_get` to set and get the sec tag used for nRF Cloud credentials. - * A new nRF Cloud event type ``NRF_CLOUD_EVT_RX_DATA_DISCON`` which is generated when a device is deleted from nRF Cloud. - * The functions :c:func:`nrf_cloud_print_details` and :c:func:`nrf_cloud_print_cloud_details` to log common nRF Cloud connection information in a uniform way. - * The :kconfig:option:`CONFIG_NRF_CLOUD_PRINT_DETAILS` Kconfig option to enable the above functions. - * The :kconfig:option:`CONFIG_NRF_CLOUD_VERBOSE_DETAILS` Kconfig option to print all details instead of only the device ID. - * Experimental support for shadow transform requests over MQTT using the :c:func:`nrf_cloud_shadow_transform_request` function. - This functionality is enabled by the :kconfig:option:`CONFIG_NRF_CLOUD_MQTT_SHADOW_TRANSFORMS` Kconfig option. - * The :kconfig:option:`CONFIG_NRF_CLOUD_COMBINED_CA_CERT_SIZE_THRESHOLD` and :kconfig:option:`CONFIG_NRF_CLOUD_COAP_CA_CERT_SIZE_THRESHOLD` Kconfig options to compare with the current root CA certificate size. - * The functions :c:func:`nrf_cloud_sec_tag_coap_jwt_set` and :c:func:`nrf_cloud_sec_tag_coap_jwt_get` to set and get the sec tag used for nRF Cloud CoAP JWT signing. - - * Updated: - - * The :kconfig:option:`CONFIG_NRF_CLOUD_CLIENT_ID_SRC_RUNTIME` Kconfig option to be available with CoAP and REST. - * The JSON string representing longitude in ``PVT`` reports from ``lng`` to ``lon`` to align with nRF Cloud. - nRF Cloud still accepts ``lng`` for backward compatibility. - * The handling of MQTT JITP device association to improve speed and reliability. - * To use nRF Cloud's custom MQTT topics instead of the default AWS topics. - * MQTT and CoAP transports to use a single unified DNS lookup mechanism that supports IPv4 and IPv6, fallback to IPv4, and handling of multiple addresses returned by :c:func:`getaddrinfo`. - * The log module in the :file:`nrf_cloud_fota_common.c` file from ``NRF_CLOUD`` to ``NRF_CLOUD_FOTA``. - * The :c:func:`nrf_cloud_credentials_configured_check` function to retrieve the size of the root CA, and compare it to thresholds to decide whether the CoAP, AWS, or both root CA certs are present. - Use this information to log helpful information and decide whether the root CA certificates are compatible with the configured connection type. - - * Deprecated: - - * The :kconfig:option:`CONFIG_NRF_CLOUD_IPV6` Kconfig option, which now no longer forces the nRF Cloud MQTT transport to use IPv4 when not enabled. - Instead, use the :kconfig:option:`CONFIG_NET_IPV4` and :kconfig:option:`CONFIG_NET_IPV6` Kconfig options to customize which IP versions the :ref:`lib_nrf_cloud` library uses. - * The :kconfig:option:`CONFIG_NRF_CLOUD_STATIC_IPV4` and :kconfig:option:`CONFIG_NRF_CLOUD_STATIC_IPV4_ADDR` Kconfig options. - Support for statically configured nRF Cloud IP Addresses will soon be removed. - Leave :kconfig:option:`CONFIG_NRF_CLOUD_STATIC_IPV4` disabled to instead use automatic DNS lookup. - - * Fixed: - - * An issue in the :c:func:`nrf_cloud_send` function that prevented data in the provided :c:struct:`nrf_cloud_obj` structure from being sent to the bulk and bin topics. - * An issue where the modem was not shut down from bootloader mode before attempting to initialize in normal mode after an unsuccessful update. - -* :ref:`lib_nrf_cloud_coap` library: - - * Fixed: - - * A hard fault that occurred when encoding AGNSS request data and the ``net_info`` field of the :c:struct:`nrf_cloud_rest_agnss_request` structure is NULL. - * An issue where certain CoAP functions could return zero, indidicating success, even though there was an error. - - * Updated: - - * To use a shorter resource string for the ``d2c/bulk`` resource. - * The function :c:func:`nrf_cloud_coap_shadow_get` to return ``-E2BIG`` if the received shadow data was truncated because the provided buffer was not big enough. - * The :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option to be enabled by default if either the :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_POLL` or :kconfig:option:`CONFIG_NRF_CLOUD_PGPS` Kconfig option is enabled. - - * Removed the experimental status (:kconfig:option:`CONFIG_EXPERIMENTAL`) from the :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DOWNLOADS` Kconfig option. - - * Added the :kconfig:option:`CONFIG_NRF_CLOUD_COAP_DISCONNECT_ON_FAILED_REQUEST` Kconfig option to disconnect the CoAP client on a failed request. - * Added the :kconfig:option:`CONFIG_NRF_CLOUD_COAP_JWT_SEC_TAG` Kconfig option to allow for a separate sec tag to be used for nRF Cloud CoAP JWT signing. - -* :ref:`lib_lwm2m_client_utils` library: - - * Fixed an issue where a failed delta update for the modem would not clear the state and blocks future delta updates. - This only occurred when an LwM2M Firmware object was used in push mode. +* Added the :ref:`lib_downloader` library. +* Deprecated the :ref:`lib_download_client` library. + See the :ref:`migration guide ` for recommended changes. -* :ref:`lib_nrf_cloud_log` library: +* Updated the following libraries to use the :ref:`lib_downloader` library instead of the :ref:`lib_download_client` library: - * Added: + * :ref:`lib_nrf_cloud` + * :ref:`lib_aws_fota` + * :ref:`lib_azure_fota` + * :ref:`lib_fota_download` - * Support for dictionary logs using REST. - * Support for dictionary (binary) logs when connected to nRF Cloud using CoAP. +* :ref:`lib_nrf_cloud_pgps` library: - * Fixed the missing log source when passing a direct log call to the nRF Cloud logging backend. - This caused the log parser to incorrectly use the first declared log source with direct logs when using dictionary mode. + * Fixed the warning due to missing ``https`` download protocol. - * Updated to use INF log level when the cloud side changes the log level. +* :ref:`lib_downloader` library: -* :ref:`lib_nrf_cloud_fota` library: + * Updated to support Proxy-URI option and an authentication callback after connecting. - * Added: +* :ref:`lib_fota_download` library: - * FOTA status callback. - * The :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_SMP` Kconfig option to enable experimental support for SMP FOTA. + * Updated to use the :ref:`lib_downloader` library for CoAP downloads. - * Updated: - - * The :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_DOWNLOAD_FRAGMENT_SIZE` Kconfig option to be available and used also when the :kconfig:option:`CONFIG_NRF_CLOUD_FOTA_POLL` Kconfig option is enabled. - The range of the option is now from 128 to 1900 bytes, and the default value is 1700 bytes. - * The function :c:func:`nrf_cloud_fota_poll_process` to be used asynchrounously if a callback to handle errors is provided. - -* :ref:`lib_mqtt_helper` library: - - * Updated the :kconfig:option:`CONFIG_MQTT_HELPER_PROVISION_CERTIFICATES` Kconfig option to depend on :kconfig:option:`CONFIG_TLS_CREDENTIALS` instead of specific boards. - -* :ref:`lib_nrf_provisioning` library: - - * Added support for the ``SO_KEEPOPEN`` socket option to keep the socket open even during PDN disconnect and reconnect. - * Updated the check interval logging to use INF to improve customer experience. - -* :ref:`lib_nrf_cloud_alert` library: +* :ref:`lib_nrf_cloud` library: - * Updated to use INF log level when cloud side changes the alert enable flag. + * Updated to use the :ref:`lib_downloader` library for CoAP downloads. Libraries for NFC ----------------- -* Added an experimental serialization of NFC tag 2 and tag 4 APIs. -* Fixed a potential issue with handling data pointers in the function ``ring_buf_get_data`` in the :file:`platform_internal_thread` file. +|no_changes_yet_note| nRF RPC libraries ----------------- -* Updated the internal Bluetooth serialization API and Bluetooth callback proxy API to become part of the public NRF RPC API. -* Added: - - * An experimental serialization of Openthread APIs. - * The logging backend that sends logs through nRF RPC events. +|no_changes_yet_note| Other libraries --------------- -* Added a compression/decompression library with support for the LZMA decompression. -* :ref:`lib_date_time` library: - - * Fixed a bug that caused date-time updates to not be rescheduled under certain circumstances. - - * Added: - - * A retry feature that reattempts failed date-time updates up to a certain number of consecutive times. - * The Kconfig options :kconfig:option:`CONFIG_DATE_TIME_RETRY_COUNT` to control whether and how many consecutive date-time update retries may be performed, and :kconfig:option:`CONFIG_DATE_TIME_RETRY_INTERVAL_SECONDS` to control how quickly date-time update retries occur. - -* :ref:`lib_ram_pwrdn` library: - - * Added support for the nRF54L15 SoC. +* Removed the following unused SDFW services: ``echo_service``, ``reset_evt_service``, and ``sdfw_update_service``. Security libraries ------------------ @@ -1113,7 +603,7 @@ Scripts This section provides detailed lists of changes by :ref:`script `. -* Added semantic version support to :ref:`nrf_desktop_config_channel_script` Python script for devices that use the SUIT DFU. +|no_changes_yet_note| Integrations ============ @@ -1140,8 +630,8 @@ AVSystem integration |no_changes_yet_note| -nRF Cloud integation --------------------- +nRF Cloud integration +--------------------- |no_changes_yet_note| @@ -1171,21 +661,21 @@ Zephyr .. NOTE TO MAINTAINERS: All the Zephyr commits in the below git commands must be handled specially after each upmerge and each nRF Connect SDK release. -The Zephyr fork in |NCS| (``sdk-zephyr``) contains all commits from the upstream Zephyr repository up to and including ``ea02b93eea35afef32ebb31f49f8e79932e7deee``, with some |NCS| specific additions. +The Zephyr fork in |NCS| (``sdk-zephyr``) contains all commits from the upstream Zephyr repository up to and including ``beb733919d8d64a778a11bd5e7d5cbe5ae27b8ee``, with some |NCS| specific additions. For the list of upstream Zephyr commits (not including cherry-picked commits) incorporated into nRF Connect SDK since the most recent release, run the following command from the :file:`ncs/zephyr` repository (after running ``west update``): .. code-block:: none - git log --oneline ea02b93eea ^23cf38934c + git log --oneline beb733919d ^ea02b93eea For the list of |NCS| specific commits, including commits cherry-picked from upstream, run: .. code-block:: none - git log --oneline manifest-rev ^ea02b93eea + git log --oneline manifest-rev ^beb733919d -The current |NCS| main branch is based on revision ``ea02b93eea`` of Zephyr. +The current |NCS| main branch is based on revision ``beb733919d`` of Zephyr. .. note:: For possible breaking changes and changes between the latest Zephyr release and the current Zephyr version, refer to the :ref:`Zephyr release notes `. @@ -1203,7 +693,7 @@ zcbor Trusted Firmware-M ================== -* Added possibility to read UICR.OTP registers through platform services. +|no_changes_yet_note| cJSON ===== @@ -1215,27 +705,17 @@ Documentation * Added: - * The :ref:`ug_app_dev` section, which includes pages from the :ref:`configuration_and_build` section and from the removed Device configuration guides section. - * The :ref:`dfu_tools_mcumgr_cli` page after it was removed from the Zephyr repository. - * The :ref:`ug_nrf54h20_suit_soc_binaries` page. - * The :ref:`ug_nrf54h20_suit_push` page documentating the SUIT push model-based update process. + * New section :ref:`ug_custom_board`. + This section includes the following pages: -* Restructured the :ref:`app_bootloaders` documentation and combined the DFU and bootloader articles. - Additionally, created a new bootloader :ref:`bootloader_quick_start`. -* Separated the instructions about building from :ref:`configure_application` and moved it to a standalone :ref:`building` page. -* Restructured the :ref:`ug_bt_mesh` documentation for clearer distinction between concepts or overview topics and how-to topics, thus moved some information from the Bluetooth Mesh library sections. + * :ref:`defining_custom_board` - Previously located under :ref:`app_boards`. + * :ref:`programming_custom_board` - New page. -* Removed: - - * The Device configuration guides section and moved its contents to :ref:`ug_app_dev`. - * The Advanced building procedures page and moved its contents to the :ref:`building` page. - * nRF70 Series support is upstreamed to Zephyr, hence the documentation is removed from the |NCS|. - * The standalone pages for getting started with nRF52 Series and with the nRF5340 DK. - These pages have been replaced by the `Quick Start`_ app, which now supports the nRF52 Series devices and the nRF5340 DK. - -* Updated: + * New page :ref:`thingy53_precompiled` under :ref:`ug_thingy53`. + This page includes some of the information previously located on the standalone page for getting started with Nordic Thingy:53. + * New page :ref:`add_new_led_example` under :ref:`configuring_devicetree`. + This page includes information previously located in the |nRFVSC| documentation. - * The :ref:`ug_nrf70_developing_debugging` page with the new snippets added for the nRF70 driver debug and WPA supplicant debug logs. - * The :ref:`programming_params` section on the :ref:`programming` page with information about readback protection moved from the :ref:`ug_nrf5340_building` page. - * The :ref:`security` page with a table that provides an overview of the available general security features. - This table replaces the subpage that was previously describing these features in more detail and was duplicating information available in other sections. +* Updated the :ref:`create_application` page with the :ref:`creating_add_on_index` section. +* Removed the standalone page for getting started with Nordic Thingy:53. + The contents of this page have been moved to the :ref:`thingy53_precompiled` page and to the `Programmer app `_ documentation. diff --git a/doc/nrf/releases_and_maturity/software_maturity.rst b/doc/nrf/releases_and_maturity/software_maturity.rst index ec430ed3caac..7a7a3d0468dc 100644 --- a/doc/nrf/releases_and_maturity/software_maturity.rst +++ b/doc/nrf/releases_and_maturity/software_maturity.rst @@ -183,12 +183,14 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 - nRF9160 - nRF9161 - * - **Bluetooth** + * - **Bluetooth®** - Supported - Supported - Supported @@ -197,7 +199,9 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - Experimental - - Experimental + - Supported + - Supported + - Supported - -- - -- - -- @@ -211,7 +215,9 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - -- - - Experimental + - Supported + - Supported + - Supported - -- - -- - -- @@ -226,6 +232,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- - Experimental - Experimental - -- @@ -240,6 +248,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- - Supported - Supported - Supported @@ -253,9 +263,27 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **NFC** + - -- + - -- + - -- + - Supported + - Supported + - Supported + - Supported - Experimental - -- - -- + - Supported + - -- + - -- - -- - -- * - **Sidewalk** @@ -267,7 +295,9 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - -- - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -281,12 +311,14 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - Experimental - - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- - * - **Wi-Fi** + * - **Wi-Fi®** - -- - -- - -- @@ -295,6 +327,8 @@ The following table indicates the software maturity levels of the support for ea - Supported\ :sup:`1` - Supported\ :sup:`2` - Experimental + - -- + - -- - Experimental - -- - Supported\ :sup:`1` @@ -314,6 +348,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- | [1]: Only with nRF7002 EK, nRF7002 EK in nRF7000 emulation mode or nRF7002 EK in nRF7001 emulation mode | [2]: Only with nRF7002 DK, nRF7002 DK in nRF7001 emulation mode, nRF7002 EB, nRF7002 EK, nRF7002 EK in nRF7000 emulation mode or nRF7002 EK in nRF7001 emulation mode @@ -338,6 +374,8 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -349,10 +387,12 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- - - Experimental - - Experimental + - Supported + - Supported - -- - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -366,6 +406,8 @@ The following table indicates the software maturity levels of the support for ea - Experimental - Experimental - -- + - -- + - Experimental - Experimental - -- - -- @@ -377,10 +419,12 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- - - Experimental - - Experimental + - Supported + - Supported - -- - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -391,10 +435,12 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- - - Experimental - - Experimental + - Supported + - Supported - -- - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -405,10 +451,12 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- - - Experimental - - Experimental + - Supported + - Supported - -- - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -419,10 +467,12 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- - - Experimental - - Experimental + - Supported + - Supported - -- - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -433,10 +483,12 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- - - Experimental - - Experimental + - Supported + - Supported - -- - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -462,220 +514,423 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 - nRF9160 - nRF9161 - * - **Bluetooth LE Peripheral/Central** + * - **2 Mbps PHY** + - Supported - Supported - Supported - - Experimental - Supported - Supported - Supported - Supported - Experimental - - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- - * - **Connectionless/Connected CTE Transmitter** + * - **Coded PHY (Long Range)** - -- - Supported - - Experimental - - -- - Supported - -- - Supported + - Supported + - Supported - Experimental - - Experimental - - -- + - Supported + - Supported + - Supported - -- - -- - -- - * - **LE Coded PHY** - -- + * - **Concurrent Roles**\ :sup:`1` + - Supported + - Supported + - Supported - Supported - - Experimental - - -- - Supported - Supported - Supported - Experimental - - Experimental - - -- - - -- - - -- + - Supported + - Supported + - Supported - -- - * - **LLPM** - -- - -- - -- + * - **Data Length Extensions** + - Supported + - Supported + - Supported + - Supported - Supported - Supported - Supported - - -- - - Experimental - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- - -Thread features support -*********************** - -The following table indicates the software maturity levels of the support for each Thread feature: - -.. toggle:: - - .. list-table:: - :widths: auto - :header-rows: 1 - - * - - - nRF52810 - - nRF52811 - - nRF52820 - - nRF52832 - - nRF52833 - - nRF52840 - - nRF5340 - - nRF54H20 - - nRF54L15 - - nRF9131 - - nRF9151 - - nRF9160 - - nRF9161 - * - **Thread + nRF21540 (GPIO)** - - -- + * - **Advertising Extensions** + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- + * - **Periodic Advertising with Responses** + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Experimental + - Supported + - Supported - Supported - -- - -- - -- - -- - - -- - - -- - - -- - * - **Thread - Full Thread Device (FTD)** + * - **Periodic Advertising Sync Transfer** + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- + * - **Isochronous Channels** + - Supported\ :sup:`2` + - Supported\ :sup:`2` - Supported + - Supported\ :sup:`2` - Supported + - Supported\ :sup:`2` - Supported - Experimental - - Experimental - - -- - - -- - - -- + - Supported + - Supported + - Supported - -- - * - **Thread - Minimal Thread Device (MTD)** - -- - -- - -- + * - **Direction Finding**\ :sup:`3` - -- + - Supported + - Supported - -- - Supported + - -- - Supported - Experimental - Experimental + - Experimental + - Experimental - -- - -- - -- - -- - * - **Thread 1.1** + * - **LE Power Control** + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- + * - **Connection Subrating** + - Supported + - Supported + - Supported + - Supported - Supported - Supported - Supported - Experimental - - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- - * - **Thread 1.2 - CSL Receiver** + * - **Channel Sounding** + - -- - -- - -- - -- - -- - - Supported - - Supported - - Supported - - Experimental - - Experimental - -- - -- - -- - -- - * - **Thread 1.2 - Core** + - -- + - Experimental - -- - -- - -- - -- + * - **GATT Database Hash** + - Supported + - Supported + - Supported + - Supported - Supported - Supported - Supported - Experimental - - Experimental - - -- - - -- - - -- - - -- - * - **Thread 1.2 - Link Metrics** + - Supported + - Supported + - Supported - -- - -- - -- - -- + * - **Enhanced ATT** + - Supported + - Supported + - Supported + - Supported - Supported - Supported - Supported - Experimental - - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- - * - **Thread 1.3 - Core** + * - **L2CAP Connection Oriented Channels** + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- + + | [1]: Concurrent central, observer, peripheral, and broadcaster roles with up to 20 concurrent connections along with one Observer and one Broadcaster (subject to RAM availability) + | [2]: Do not support encrypting and decrypting the Isochronous Channels packets + | [3]: Only AoA transmitter is supported + +The following table indicates the software maturity levels of the support for each proprietary Bluetooth feature: + +.. toggle:: + + .. list-table:: + :widths: auto + :header-rows: 1 + + * - + - nRF52810 + - nRF52811 + - nRF52820 + - nRF52832 + - nRF52833 + - nRF52840 + - nRF5340 + - nRF54H20 + - nRF54L05 + - nRF54L10 + - nRF54L15 + - nRF9131 + - nRF9151 + - nRF9160 + - nRF9161 + * - **Low Latency Packet Mode** + - Supported - Supported - Supported - Supported + - Supported + - Supported + - -- - Experimental + - Supported + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Multi-protocol Support** + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported - Experimental + - Supported + - Supported + - Supported - -- - -- - -- - -- - * - **Thread FTD + Bluetooth LE multiprotocol** + * - **QoS Conn Event Reports** + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Supported + - Experimental + - Supported + - Supported + - Supported + - -- + - -- - -- - -- + * - **QoS Channel Survey** + - Experimental + - Experimental + - Experimental + - Experimental + - Experimental + - Experimental + - Experimental + - Experimental + - Experimental + - Experimental + - Experimental - -- - -- - -- + - -- + * - **Radio Coexistence** + - Supported + - Supported + - Supported + - Supported + - Supported - Supported - Supported - Experimental + - Supported + - Supported + - Supported + - -- + - -- + - -- + - -- + +Thread features support +*********************** + +The following table indicates the software maturity levels of the support for each Thread feature: + +.. toggle:: + + .. list-table:: + :widths: auto + :header-rows: 1 + + * - + - nRF52810 + - nRF52811 + - nRF52820 + - nRF52832 + - nRF52833 + - nRF52840 + - nRF5340 + - nRF54H20 + - nRF54L05 + - nRF54L10 + - nRF54L15 + - nRF9131 + - nRF9151 + - nRF9160 + - nRF9161 + * - **Thread + nRF21540 (GPIO)** + - -- + - -- + - -- + - -- + - -- + - Supported + - -- + - -- + - -- + - -- + - -- + - -- + - -- + - -- + - -- + * - **Thread - Full Thread Device (FTD)** + - -- + - -- + - -- + - -- + - Supported + - Supported + - Supported - Experimental - -- + - Supported + - Supported + - -- - -- - -- - -- - * - **Thread MTD + Bluetooth LE multiprotocol** + * - **Thread - Minimal Thread Device (MTD)** - -- - -- - -- @@ -684,36 +939,170 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Thread 1.1** + - -- + - -- + - -- + - -- + - Supported + - Supported + - Supported - Experimental - -- + - Supported + - Supported - -- - -- - -- - * - **Thread Radio Co-Processor (RCP)** + - -- + * - **Thread 1.2 - CSL Receiver** + - -- - -- - -- - -- + - Supported + - Supported + - Supported + - Experimental - -- - Supported - Supported - -- - -- + - -- + - -- + * - **Thread 1.2 - Core** + - -- + - -- + - -- + - -- + - Supported + - Supported + - Supported - Experimental - -- + - Supported + - Supported - -- - -- - -- - * - **Thread TCP** - -- + * - **Thread 1.2 - Link Metrics** - -- - -- - -- - -- + - Supported + - Supported + - Supported - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Thread 1.3 - Core** + - -- + - -- + - -- + - -- + - Supported + - Supported + - Supported - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Thread 1.4 - Core** + - -- + - -- + - -- + - -- + - Supported + - Supported + - Supported - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Thread FTD + Bluetooth LE multiprotocol** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported - Experimental - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Thread MTD + Bluetooth LE multiprotocol** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Thread Radio Co-Processor (RCP)** + - -- + - -- + - -- + - -- + - Supported + - Supported + - -- + - -- + - Supported + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Thread TCP** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Experimental + - -- + - Supported + - Supported + - -- - -- - -- - -- @@ -740,6 +1129,8 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -754,7 +1145,9 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - Experimental - - Experimental + - -- + - Supported + - Supported - -- - -- - -- @@ -768,99 +1161,273 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Matter commissioning over Bluetooth LE with NFC onboarding** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Matter commissioning over Bluetooth LE with QR code onboarding** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Matter commissioning over IP** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Matter over Thread** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + * - **Matter over Wi-Fi** + - -- + - -- + - -- + - -- + - -- + - -- + - Supported + - Experimental + - -- + - -- + - -- + - -- + - -- + - -- + - -- + * - **OTA DFU over Matter** + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Experimental + - -- + - Supported + - Supported + - -- + - -- + - -- + - -- + +NFC features support +******************** + +The following table indicates the software maturity levels of the support for each NFC feature: + +.. toggle:: + + .. list-table:: + :widths: auto + :header-rows: 1 + + * - + - nRF52810 + - nRF52811 + - nRF52820 + - nRF52832 + - nRF52833 + - nRF52840 + - nRF5340 + - nRF54H20 + - nRF54L05 + - nRF54L10 + - nRF54L15 + - nRF9131 + - nRF9151 + - nRF9160 + - nRF9161 + * - **NFC Type 2 Tag (read-only)** + - -- + - -- + - -- + - Supported + - Supported + - Supported + - Supported + - Experimental + - -- + - -- + - Supported + - -- + - -- + - -- + - -- + * - **NFC Type 4 Tag (read/write)** + - -- + - -- + - -- + - Supported + - Supported + - Supported + - Supported - Experimental - -- - -- + - Supported - -- - -- - * - **Matter commissioning over Bluetooth LE with NFC onboarding** - -- - -- + * - **NFC Reader/Writer (polling device)** - -- - -- - -- - Supported - Supported - - Experimental - - Experimental + - Supported + - Supported + - -- - -- - -- - -- - -- - * - **Matter commissioning over Bluetooth LE with QR code onboarding** - -- - -- - -- + * - **NFC ISO-DEP protocol (ISO/IEC 14443-4)** + - -- - -- - -- - Supported - Supported - - Experimental + - Supported + - Supported - Experimental - -- - -- + - Supported - -- - -- - * - **Matter commissioning over IP** - -- - -- + * - **NDEF encoding/decoding** - -- - -- - -- - Supported - Supported - - Experimental + - Supported + - Supported - Experimental - -- - -- + - Supported - -- - -- - * - **Matter over Thread** - -- - -- + * - **NFC Record Type Definitions: URI, Text, Connection Handover** - -- - -- - -- - Supported - Supported - - Experimental + - Supported + - Supported - Experimental - -- - -- + - Supported - -- - -- - * - **Matter over Wi-Fi** - - -- - -- - -- + * - **NFC Connection Hadover to Bluetooth carrier, Static and Negotiated Handover** - -- - -- - -- - Supported + - Supported + - Supported + - Supported - Experimental - -- - -- + - Supported - -- - -- - -- - * - **OTA DFU over Matter** - - -- - -- + * - **NFC Tag NDEF Exchange Protocol (TNEP)** - -- - -- - -- - Supported - Supported - Supported - - Experimental + - Supported + - Experimental\ :sup:`1` + - -- + - -- + - Supported\ :sup:`1` - -- - -- - -- - -- + | [1]: Only supported on the NFC Tag device + Zigbee feature support ********************** +.. include:: /includes/zigbee_deprecation.txt + The following table indicates the software maturity levels of the support for each Zigbee feature: .. toggle:: @@ -878,6 +1445,8 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -897,6 +1466,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Zigbee (Sleepy) End Device** - -- - -- @@ -911,6 +1482,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Zigbee + Bluetooth LE multiprotocol** - -- - -- @@ -925,6 +1498,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Zigbee + nRF21540 (GPIO)** - -- - -- @@ -939,6 +1514,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Zigbee Coordinator** - -- - -- @@ -953,6 +1530,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Zigbee Network Co-Processor (NCP)** - -- - -- @@ -967,6 +1546,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Zigbee Router** - -- - -- @@ -981,6 +1562,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- Wi-Fi feature support ********************* @@ -1002,6 +1585,8 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -1021,6 +1606,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Monitor Mode** - -- - -- @@ -1035,6 +1622,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Promiscuous Mode** - -- - -- @@ -1042,7 +1631,9 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- - - Experimental\ :sup:`2` + - Supported\ :sup:`2` + - -- + - -- - -- - -- - -- @@ -1058,6 +1649,8 @@ The following table indicates the software maturity levels of the support for ea - Experimental\ :sup:`3` - Supported\ :sup:`1` - Experimental\ :sup:`4` + - -- + - -- - Experimental\ :sup:`5` - -- - -- @@ -1074,6 +1667,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- - Supported\ :sup:`6` - Supported\ :sup:`6` - Supported\ :sup:`6` @@ -1091,6 +1686,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **TX injection Mode** - -- - -- @@ -1105,6 +1702,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **Thread Coexistence** - -- - -- @@ -1119,12 +1718,14 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- | [1]: Only with nRF7002 DK, nRF7002 DK in nRF7001 emulation mode, nRF7002 EB, nRF7002 EK or nRF7002 EK in nRF7001 emulation mode | [2]: Only with nRF7002 DK, nRF7002 DK in nRF7001 emulation mode or nRF7002 EK | [3]: Only with nRF7002 EK or nRF7002 EK in nRF7001 emulation mode - | [4]: Only with nRF700X_nRF54H20DK - | [5]: Only with nRF700X_nRF54L15PDK + | [4]: Only with nrf7002 EB and nRF7002 EB-interposer + | [5]: Only with nrf7002 EB and nRF7002 EB-interposer | [6]: Only with nRF7002 EK, nRF7002 EK in nRF7000 emulation mode or nRF7002 EK in nRF7001 emulation mode | [7]: Only with nRF7002 DK, nRF7002 EB, nRF7002 EK, nRF7002 EK in nRF7000 emulation mode or nRF7002 EK in nRF7001 emulation mode @@ -1159,6 +1760,8 @@ The following table indicates the software maturity levels of the support for Go - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -1173,6 +1776,8 @@ The following table indicates the software maturity levels of the support for Go - Experimental - Experimental - Experimental + - Experimental + - -- - -- - Experimental - -- @@ -1189,7 +1794,9 @@ The following table indicates the software maturity levels of the support for Go - Supported - Experimental - -- - - Experimental + - -- + - -- + - Supported - -- - -- - -- @@ -1215,6 +1822,8 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -1228,10 +1837,12 @@ The following table indicates the software maturity levels of the support for ea - Supported - Supported - Experimental - - -- - Experimental - -- - -- + - Supported + - -- + - -- - -- - -- * - **Subsequent pairing** @@ -1242,6 +1853,8 @@ The following table indicates the software maturity levels of the support for ea - Experimental - Experimental - Experimental + - Experimental + - -- - -- - Experimental - -- @@ -1256,6 +1869,8 @@ The following table indicates the software maturity levels of the support for ea - Experimental - Experimental - Experimental + - Experimental + - -- - -- - Experimental - -- @@ -1270,6 +1885,8 @@ The following table indicates the software maturity levels of the support for ea - Experimental - Experimental - Experimental + - Experimental + - -- - -- - Experimental - -- @@ -1285,7 +1902,9 @@ The following table indicates the software maturity levels of the support for ea - Supported - Experimental - -- - - Experimental + - -- + - -- + - Supported - -- - -- - -- @@ -1307,52 +1926,60 @@ Trusted Firmware-M support .. toggle:: - .. list-table:: - :widths: auto - :header-rows: 1 - - * - - - nRF52810 - - nRF52811 - - nRF52820 - - nRF52832 - - nRF52833 - - nRF52840 - - nRF5340 - - nRF54H20 - - nRF54L15 - - nRF9131 - - nRF9151 - - nRF9160 - - nRF9161 - * - **Full build** - - -- - - -- - - -- - - -- - - -- - - -- - - Experimental - - -- - - Experimental - - -- - - Experimental - - Experimental - - Experimental - * - **Minimal Build** - - -- - - -- - - -- - - -- - - -- - - -- - - Supported - - -- - - -- - - Experimental - - Supported - - Supported - - Supported + .. list-table:: + :widths: auto + :header-rows: 1 + + * - + - nRF52810 + - nRF52811 + - nRF52820 + - nRF52832 + - nRF52833 + - nRF52840 + - nRF5340 + - nRF54H20 + - nRF54L05 + - nRF54L10 + - nRF54L15 + - nRF9131 + - nRF9151 + - nRF9160 + - nRF9161 + * - **Full build** + - -- + - -- + - -- + - -- + - -- + - -- + - Experimental + - -- + - -- + - -- + - Experimental\ :sup:`1` + - -- + - Experimental + - Experimental + - Experimental + * - **Minimal Build** + - -- + - -- + - -- + - -- + - -- + - -- + - Supported + - -- + - -- + - -- + - Experimental + - Experimental + - Supported + - Supported + - Supported + + | [1]: The attestation service is not supported. PSA Crypto support ================== @@ -1372,12 +1999,14 @@ PSA Crypto support - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 - nRF9160 - nRF9161 - * - **PSA Crypto APIs** + * - **Oberon PSA core** - -- - -- - -- @@ -1385,12 +2014,46 @@ PSA Crypto support - Supported - Supported - Supported + - -- + - Supported + - Supported + - Supported - Experimental + - Supported + - Supported + - Supported + * - **TF-M crypto service** + - -- + - -- + - -- + - Supported + - Supported + - Supported + - Supported + - -- + - -- + - -- - Experimental - Experimental - Supported - Supported - Supported + * - **SSF crypto service** + - -- + - -- + - -- + - -- + - -- + - -- + - -- + - Experimental + - -- + - -- + - -- + - -- + - -- + - -- + - -- |NSIB| ====== @@ -1410,6 +2073,8 @@ PSA Crypto support - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -1426,6 +2091,8 @@ PSA Crypto support - -- - -- - -- + - -- + - -- - Supported - Supported - Supported @@ -1449,6 +2116,8 @@ Hardware Unique Key - nRF5340 - nRF54H20 - nRF54L15 + - nRF54L10 + - nRF54L05 - nRF9131 - nRF9151 - nRF9160 @@ -1463,6 +2132,8 @@ Hardware Unique Key - Supported - -- - Experimental + - Experimental + - Experimental - -- - Supported - Supported @@ -1471,6 +2142,8 @@ Hardware Unique Key Trusted storage =============== +Trusted storage implements the PSA Certified Secure Storage APIs without TF-M. + .. toggle:: .. list-table:: @@ -1486,12 +2159,14 @@ Trusted storage - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 - nRF9160 - nRF9161 - * - **Trusted storage implements the PSA Certified Secure Storage APIs without TF-M** + * - **Trusted storage** - -- - -- - -- @@ -1500,12 +2175,106 @@ Trusted storage - Supported - Supported - Experimental - - Experimental + - Supported + - Supported + - Supported - -- - Supported - Supported - Supported +MCUboot bootloader +****************** + +The following table indicates the software maturity levels of the support for each MCUboot bootloader feature: + +.. toggle:: + + .. list-table:: + :widths: auto + :header-rows: 1 + + * - + - nRF52810 + - nRF52811 + - nRF52820 + - nRF52832 + - nRF52833 + - nRF52840 + - nRF5340 + - nRF54H20 + - nRF54L05 + - nRF54L10 + - nRF54L15 + - nRF9131 + - nRF9151 + - nRF9160 + - nRF9161 + * - **Immutable MCUboot as part of build** + - -- + - -- + - -- + - Supported + - Supported + - Supported + - Supported + - -- + - Experimental + - Experimental + - Supported + - -- + - Supported + - Supported + - Supported + * - **Updatable MCUboot as part of build** + - -- + - -- + - -- + - Supported + - Supported + - Supported + - Supported + - -- + - -- + - -- + - -- + - -- + - Supported + - Supported + - Supported + * - **application image compression** + - -- + - -- + - -- + - -- + - -- + - Experimental + - Experimental + - -- + - -- + - Experimental + - Experimental + - -- + - Experimental + - Experimental + - Experimental + * - **hardware cryptography acceleration** + - -- + - -- + - -- + - -- + - -- + - Supported + - -- + - -- + - Experimental + - Experimental + - Supported + - -- + - Supported + - Supported + - Supported + Power management device support ******************************* @@ -1526,6 +2295,8 @@ The following table indicates the software maturity levels of the support for ea - nRF52840 - nRF5340 - nRF54H20 + - nRF54L05 + - nRF54L10 - nRF54L15 - nRF9131 - nRF9151 @@ -1545,6 +2316,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- * - **nPM1300** - -- - -- @@ -1553,6 +2326,8 @@ The following table indicates the software maturity levels of the support for ea - -- - Supported - Supported + - Supported + - -- - -- - Supported - Experimental @@ -1570,6 +2345,8 @@ The following table indicates the software maturity levels of the support for ea - -- - -- - -- + - -- + - -- - Supported - -- - -- diff --git a/doc/nrf/samples.rst b/doc/nrf/samples.rst index 87760b0ab02e..eb76b1f2799f 100644 --- a/doc/nrf/samples.rst +++ b/doc/nrf/samples.rst @@ -7,10 +7,12 @@ The |NCS| provides samples that specifically target Nordic Semiconductor devices Samples showcase a single feature or library, while :ref:`applications` include a variety of libraries to implement a specific use case. -Zephyr also provides a variety of :ref:`zephyr:samples-and-demos`, including very simple :ref:`zephyr:basic-sample`. +Zephyr also provides a variety of :zephyr:code-sample-category:`samples`, including very simple :zephyr:code-sample-category:`basic`. These samples are a good starting point for understanding how to put together your own application. However, Zephyr samples and applications are not tested and verified to work with the |NCS| releases. +.. samples_general_info_start + General information about samples in the |NCS| * |ncs_unchanged_samples_note| * |ncs_oot_sample_note| @@ -19,10 +21,12 @@ General information about samples in the |NCS| You can change the default behavior by updating the configuration option :kconfig:option:`CONFIG_RESET_ON_FATAL_ERROR`. * All samples in the |NCS| are tested and verified in accordance with their :ref:`maturity level `. +.. samples_general_info_end + .. note:: |common_sample_components_desc| -If you want to list samples available for one or more specific boards, `use the nRF Connect for Visual Studio Code extension to filter them `_. +|filter_samples_by_board| .. toctree:: :maxdepth: 1 @@ -47,7 +51,6 @@ If you want to list samples available for one or more specific boards, `use the samples/nrf5340 samples/peripheral samples/pmic - samples/sdfw samples/sensor samples/serialization samples/suit diff --git a/doc/nrf/samples/bl.rst b/doc/nrf/samples/bl.rst index 2212815fadd3..3dbf4e7184fd 100644 --- a/doc/nrf/samples/bl.rst +++ b/doc/nrf/samples/bl.rst @@ -3,9 +3,19 @@ Bluetooth samples ################# +This section lists the available |NCS| samples for the :ref:`Bluetooth® ` protocol. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages :glob: ../../../samples/bluetooth/*/README + ../../tests/bluetooth/bsim/nrf_auraconfig/README + ../../tests/bluetooth/bsim/nrf_auraconfig/tester/README diff --git a/doc/nrf/samples/cellular.rst b/doc/nrf/samples/cellular.rst index 3205b130b8ca..b7be5b800a6d 100644 --- a/doc/nrf/samples/cellular.rst +++ b/doc/nrf/samples/cellular.rst @@ -3,6 +3,15 @@ Cellular samples ################ +This section lists the available |NCS| samples for the :ref:`cellular IoT development `. +Additionally, you might want to check the :ref:`memfault_sample` sample and the :ref:`networking_samples`. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/crypto.rst b/doc/nrf/samples/crypto.rst index bb5e031f3a5d..70207df706ee 100644 --- a/doc/nrf/samples/crypto.rst +++ b/doc/nrf/samples/crypto.rst @@ -3,6 +3,14 @@ Cryptography samples #################### +This section lists the available |NCS| samples and tests for the :ref:`nrf_security` and the :ref:`nrfxlib:crypto`, two of the :ref:`security` features of the |NCS|. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/debug.rst b/doc/nrf/samples/debug.rst index cb044650d551..3f3295746427 100644 --- a/doc/nrf/samples/debug.rst +++ b/doc/nrf/samples/debug.rst @@ -3,6 +3,14 @@ Debug samples ############# +This section lists the |NCS| samples useful for :ref:`debugging`. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/dect.rst b/doc/nrf/samples/dect.rst index 0e03dbd7c4ed..bd154a059413 100644 --- a/doc/nrf/samples/dect.rst +++ b/doc/nrf/samples/dect.rst @@ -3,6 +3,14 @@ DECT NR+ samples ################ +This section lists the |NCS| samples that showcase the use of the :ref:`nrf_modem_dect_phy` interface of the :ref:`nrfxlib:nrf_modem`. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/edge.rst b/doc/nrf/samples/edge.rst index 38f9b6e48a93..8aefd30dc526 100644 --- a/doc/nrf/samples/edge.rst +++ b/doc/nrf/samples/edge.rst @@ -3,6 +3,14 @@ Edge Impulse samples #################### +This section lists the |NCS| samples for :ref:`integrating Edge Impulse with the nRF Connect SDK `. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/esb.rst b/doc/nrf/samples/esb.rst index fc827a62a122..a5e80acb978b 100644 --- a/doc/nrf/samples/esb.rst +++ b/doc/nrf/samples/esb.rst @@ -3,6 +3,14 @@ Enhanced ShockBurst samples ########################### +This section lists the available |NCS| samples for the :ref:`ug_esb` protocol. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/fast_pair.rst b/doc/nrf/samples/fast_pair.rst index 43f7f439cdbd..15b3db5eec3d 100644 --- a/doc/nrf/samples/fast_pair.rst +++ b/doc/nrf/samples/fast_pair.rst @@ -3,6 +3,14 @@ Bluetooth Fast Pair samples ########################### +This section lists the |NCS| samples for :ref:`integrating Google Fast Pair with the nRF Connect SDK `. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/gazell.rst b/doc/nrf/samples/gazell.rst index 6c855db1121b..ffcc3e7eb169 100644 --- a/doc/nrf/samples/gazell.rst +++ b/doc/nrf/samples/gazell.rst @@ -3,6 +3,14 @@ Gazell samples ############## +This section lists the available |NCS| samples for the :ref:`ug_gz` protocol. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/keys.rst b/doc/nrf/samples/keys.rst index bf6bdd78548d..a018c228f346 100644 --- a/doc/nrf/samples/keys.rst +++ b/doc/nrf/samples/keys.rst @@ -3,6 +3,14 @@ Keys samples ############ +This section lists the |NCS| samples related to the :ref:`Hardware unique key (HUK) library `, one of the :ref:`security` features of the |NCS|. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/matter.rst b/doc/nrf/samples/matter.rst index 4a500b1e1f72..c005c48d2abd 100644 --- a/doc/nrf/samples/matter.rst +++ b/doc/nrf/samples/matter.rst @@ -52,7 +52,7 @@ The following table lists variants and extensions available out of the box for e - SSED - - SED - * - Wi-Fi support + * - Wi-Fi® support - ✔ - ✔ - ✔ @@ -84,9 +84,16 @@ In addition to these samples, check also the following Matter applications: * :ref:`Thingy:53 Matter weather station ` * :ref:`Matter bridge ` +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages :glob: ../../../samples/matter/*/README + ../../../samples/matter/common/config diff --git a/doc/nrf/samples/mesh.rst b/doc/nrf/samples/mesh.rst index b1086eb0cbed..70408a648378 100644 --- a/doc/nrf/samples/mesh.rst +++ b/doc/nrf/samples/mesh.rst @@ -3,6 +3,14 @@ Bluetooth Mesh samples ###################### +This section lists the available |NCS| samples for the :ref:`ug_bt_mesh` protocol. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/net.rst b/doc/nrf/samples/net.rst index 74033f0bdbd3..9ff8b74af267 100644 --- a/doc/nrf/samples/net.rst +++ b/doc/nrf/samples/net.rst @@ -3,6 +3,16 @@ Networking samples ################## +This section lists the available |NCS| samples for networking development. +These samples use an nRF91 Series device over LTE or an nRF70 Series device over Wi-Fi® for communication and connection. +Additionally, you might want to check the :ref:`cellular_samples` and the :ref:`wifi_samples`. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/nfc.rst b/doc/nrf/samples/nfc.rst index bb40777c9ccb..89d69e15ec45 100644 --- a/doc/nrf/samples/nfc.rst +++ b/doc/nrf/samples/nfc.rst @@ -3,6 +3,14 @@ NFC samples ########### +This section lists the available |NCS| samples for the :ref:`ug_nfc` protocol. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/nrf5340.rst b/doc/nrf/samples/nrf5340.rst index 46199cb58f32..b22b84ebbd50 100644 --- a/doc/nrf/samples/nrf5340.rst +++ b/doc/nrf/samples/nrf5340.rst @@ -3,6 +3,12 @@ nRF5340 samples ############### +This section lists the |NCS| samples specific to :ref:`developing with the nRF5340 SoC `. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/other.rst b/doc/nrf/samples/other.rst index c4f4e3936503..f7b9d2661373 100644 --- a/doc/nrf/samples/other.rst +++ b/doc/nrf/samples/other.rst @@ -3,6 +3,14 @@ Other samples ############# +This section lists single |NCS| samples for various uses that are not part of other sections. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/peripheral.rst b/doc/nrf/samples/peripheral.rst index 14fdc675072d..8de38048db42 100644 --- a/doc/nrf/samples/peripheral.rst +++ b/doc/nrf/samples/peripheral.rst @@ -3,6 +3,14 @@ Peripheral samples ################## +This section lists available |NCS| samples for various peripherals and test tools. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/pmic.rst b/doc/nrf/samples/pmic.rst index 13d2e560bae1..1bd4f5264651 100644 --- a/doc/nrf/samples/pmic.rst +++ b/doc/nrf/samples/pmic.rst @@ -3,6 +3,14 @@ PMIC samples ############ +This section lists available |NCS| samples for :ref:`developing with PMICs `. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/sdfw.rst b/doc/nrf/samples/sdfw.rst deleted file mode 100644 index b9379b044871..000000000000 --- a/doc/nrf/samples/sdfw.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. _sdfw_samples: - -SDFW samples -############ - -.. toctree:: - :maxdepth: 1 - :caption: Subpages - :glob: - - ../../../samples/sdfw/*/README diff --git a/doc/nrf/samples/sensor.rst b/doc/nrf/samples/sensor.rst index 56477568c770..17f548535e51 100644 --- a/doc/nrf/samples/sensor.rst +++ b/doc/nrf/samples/sensor.rst @@ -3,6 +3,14 @@ Sensor samples ############## +This section lists available |NCS| samples for sensors that you can use with :ref:`Nordic Thingy:53 ` and :ref:`Nordic Thingy:91 ` prototyping platforms. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/serialization.rst b/doc/nrf/samples/serialization.rst index bd53847e9fbe..333ecead160a 100644 --- a/doc/nrf/samples/serialization.rst +++ b/doc/nrf/samples/serialization.rst @@ -3,6 +3,16 @@ Protocol serialization samples ############################## + +This section lists available |NCS| samples for using remote procedure calls with the :ref:`nrfxlib:nrf_rpc`. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/suit.rst b/doc/nrf/samples/suit.rst index 96ef74f51017..6968f0e101c5 100644 --- a/doc/nrf/samples/suit.rst +++ b/doc/nrf/samples/suit.rst @@ -3,6 +3,14 @@ SUIT samples ############ +This section lists available |NCS| samples for :ref:`Device Firmware Update using SUIT for the nRF54H Series of System-on-Chip `. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/tfm.rst b/doc/nrf/samples/tfm.rst index 467f3796bbdd..55f78a61f4a7 100644 --- a/doc/nrf/samples/tfm.rst +++ b/doc/nrf/samples/tfm.rst @@ -3,6 +3,14 @@ Trusted Firmware-M (TF-M) samples ################################# +This section lists the available |NCS| samples and tests for :ref:`ug_tfm`, one of the :ref:`security` features of the |NCS|. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/thread.rst b/doc/nrf/samples/thread.rst index 7b138e5782ce..eb958b58412c 100644 --- a/doc/nrf/samples/thread.rst +++ b/doc/nrf/samples/thread.rst @@ -3,6 +3,14 @@ Thread samples ############## +This section lists the available |NCS| samples for the :ref:`ug_thread` protocol. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/wifi.rst b/doc/nrf/samples/wifi.rst index 883d50031aa7..3beee0f7af1b 100644 --- a/doc/nrf/samples/wifi.rst +++ b/doc/nrf/samples/wifi.rst @@ -3,6 +3,14 @@ Wi-Fi samples ############# +This section lists the available |NCS| samples for the :ref:`Wi-Fi® ` protocol. + +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/samples/wifi_zephyr.rst b/doc/nrf/samples/wifi_zephyr.rst index e994b665cbe1..bd21d7cb21bd 100644 --- a/doc/nrf/samples/wifi_zephyr.rst +++ b/doc/nrf/samples/wifi_zephyr.rst @@ -46,4 +46,4 @@ The following is an example of the CLI command: west build -b nrf5340dk/nrf5340/cpuapp -S wifi-ipv4 -- -DSHIELD=nrf7002ek -DSB_CONFIG_WIFI_NRF70=y -For additional details about running a sample, refer to the respective sample in Zephyr’s :ref:`Samples and Demos documentation `. +For additional details about running a sample, refer to the respective sample in Zephyr’s :zephyr:code-sample-category:`samples`. diff --git a/doc/nrf/samples/zigbee.rst b/doc/nrf/samples/zigbee.rst index f64d2d5d9300..38ee1658a756 100644 --- a/doc/nrf/samples/zigbee.rst +++ b/doc/nrf/samples/zigbee.rst @@ -3,6 +3,8 @@ Zigbee samples ############## +.. include:: /includes/zigbee_deprecation.txt + The nRF Connect SDK provides the following samples showcasing the :ref:`ug_zigbee` protocol. You can build the samples for various boards and configure them for different usage scenarios. @@ -75,6 +77,12 @@ Read the table symbols in the following manner: Some variants and extensions might also require additional hardware and software, such as mobile applications for testing purposes. +.. include:: ../samples.rst + :start-after: samples_general_info_start + :end-before: samples_general_info_end + +|filter_samples_by_board| + .. toctree:: :maxdepth: 1 :caption: Subpages diff --git a/doc/nrf/scripts.rst b/doc/nrf/scripts.rst index 97634c77be0e..f7b66c709071 100644 --- a/doc/nrf/scripts.rst +++ b/doc/nrf/scripts.rst @@ -15,6 +15,7 @@ Here you can find documentation for these scripts. ../../scripts/shell/*/* ../../scripts/nrf_provision/*/* ../../scripts/hid_configurator/* + ../../scripts/docker/* ../../scripts/partition_manager/* ../../scripts/west_commands/sbom/* ../../scripts/memfault/* diff --git a/doc/nrf/security.rst b/doc/nrf/security.rst index 1ddb71bf76b0..4837f839eaa1 100644 --- a/doc/nrf/security.rst +++ b/doc/nrf/security.rst @@ -36,16 +36,15 @@ Some of them are documented in detail in other parts of this documentation, whil - All samples and applications that support the ``*/ns`` :ref:`variant ` of the boards. * - Trusted Firmware-M (TF-M) - TF-M is the reference implementation of `Platform Security Architecture (PSA)`_. - On nRF5340 and nRF91 Series devices, TF-M is used to configure and boot an application with :ref:`CMSE enabled `. + On nRF5340, nRF54L and nRF91 Series devices, TF-M is used to configure and boot an application with :ref:`CMSE enabled `. - See :ref:`ug_tfm`. - | - :ref:`tfm_samples` - | - :ref:`cryptography samples ` - | - :ref:`https_client` sample - | - :ref:`openthread_samples` - | - :ref:`TF-M integration samples ` in Zephyr + | - :ref:`crypto_samples` + | - :zephyr:code-sample-category:`tfm_integration` in Zephyr * - Cryptographic operations (:ref:`nrf_security`) - The :ref:`nrf_security` library acts as an orchestrator for the different cryptographic libraries available in the system. HW accelerated libraries are prioritized over SW libraries when both are enabled. + | Find more information on nRF54L Series-specific cryptography operations and the related configuration in :ref:`ug_nrf54l_cryptography`. - :kconfig:option:`CONFIG_NRF_SECURITY` (:ref:`more info`) - | - :ref:`nrf_security` library with :ref:`nrf_security_drivers` | - :ref:`nrfxlib:crypto` diff --git a/doc/nrf/security/ap_protect.rst b/doc/nrf/security/ap_protect.rst index 85d399e75aa3..9cf793b43f93 100644 --- a/doc/nrf/security/ap_protect.rst +++ b/doc/nrf/security/ap_protect.rst @@ -35,12 +35,12 @@ For detailed information, refer to the hardware documentation. * - Hardware - Disabled - Writing ``Enabled`` to ``UICR.APPROTECT`` and performing a reset. - - Issuing an ``ERASEALL`` command via CTRL-AP. + - Issuing an ``ERASEALL`` command using CTRL-AP. This command erases the flash, UICR, and RAM, including ``UICR.APPROTECT``. * - Hardware and software - Enabled - When AP-Protect is disabled, a reset or a wake enables the access port protection again. - - Issuing an ``ERASEALL`` command via CTRL-AP. + - Issuing an ``ERASEALL`` command through CTRL-AP. This command erases the flash, UICR, and RAM, including ``UICR.APPROTECT``. To keep the AP-Protect disabled, ``UICR.APPROTECT`` must be programmed to ``HwDisabled`` and the firmware must write ``SwDisable`` to ``APPROTECT.DISABLE``. @@ -87,8 +87,8 @@ See the related hardware documentation for more information about which implemen * - nRF54L15 - n/a - ✔ - - *Documentation not yet available* - - Can also use the lifecycle state management mechanism as an alternative to AP-Protect + - `AP-Protect for nRF54L15`_ + - Also supports Secure AP-Protect (see note below) * - nRF5340 - n/a - ✔ @@ -131,7 +131,7 @@ See the related hardware documentation for more information about which implemen - .. note:: - The SoCs or SiPs that support `ARM TrustZone`_ and different :ref:`app_boards_spe_nspe` (nRF5340 and nRF91 Series) implement two AP-Protect systems: AP-Protect and Secure AP-Protect. + The SoCs or SiPs that support `ARM TrustZone`_ and different :ref:`app_boards_spe_nspe` (nRF5340, nRF54L15 and nRF91 Series) implement two AP-Protect systems: AP-Protect and Secure AP-Protect. While AP-Protect blocks access to all CPU registers and memories, Secure AP-Protect limits access to the CPU to only non-secure accesses. This means that the CPU is entirely unavailable while it is running the code in the Secure Processing Environment, and only non-secure registers and address-mapped resources can be accessed. @@ -170,43 +170,150 @@ Based on the available implementation types, you can configure the access port p .. _app_approtect_ncs_lock: -Enabling AP-Protect with :kconfig:option:`CONFIG_NRF_APPROTECT_LOCK` -==================================================================== +Enabling software AP-Protect with :kconfig:option:`CONFIG_NRF_APPROTECT_LOCK` +============================================================================= + +Setting the :kconfig:option:`CONFIG_NRF_APPROTECT_LOCK` Kconfig option to ``y`` and compiling the firmware enables the software access protection mechanism for SoCs of the nRF53 Series and the SoC revisions of the nRF52 Series that feature the hardware and software type of AP-Protect. + +Enabling the Kconfig option writes the debugger register in the ``SystemInit()`` function to lock the access port protection at every boot. +In addition to this, the ``UICR.APPROTECT`` register should be written as instructed in :ref:`app_approtect_uicr_approtect`. + +.. note:: + For multi-image builds, this Kconfig option needs to be set for the first image (usually a bootloader). + Otherwise, the software AP-Protect will not be sufficient as the debugger can be attached to the device after the first image opens the software AP-Protect with the :kconfig:option:`CONFIG_NRF_APPROTECT_USE_UICR` Kconfig option, which is the default value. -Setting the :kconfig:option:`CONFIG_NRF_APPROTECT_LOCK` Kconfig option to ``y`` and compiling the firmware is enough to enable the access port protection mechanism for SoCs of the nRF53 Series and those SoCs of the nRF52 Series that feature the hardware and software type of AP-Protect. -The access port protection configured in this way cannot be disabled without erasing the flash. + When using sysbuild, set the ``SB_CONFIG_APPROTECT_LOCK`` sysbuild Kconfig option, which enables the :kconfig:option:`CONFIG_NRF_APPROTECT_LOCK` Kconfig option for all images. + +.. important:: + On the nRF91x1 Series devices, the register setting related to the :kconfig:option:`CONFIG_NRF_APPROTECT_LOCK` Kconfig option does not persist in System ON IDLE mode. + You must lock the ``UICR.APPROTECT`` register to enable the hardware AP-Protect mechanism as instructed in :ref:`app_approtect_uicr_approtect`. .. _app_approtect_ncs_user_handling: -Enabling AP-Protect with :kconfig:option:`CONFIG_NRF_APPROTECT_USER_HANDLING` -============================================================================= +Enabling software AP-Protect with :kconfig:option:`CONFIG_NRF_APPROTECT_USER_HANDLING` +====================================================================================== -Setting the :kconfig:option:`CONFIG_NRF_APPROTECT_USER_HANDLING` Kconfig option to ``y`` and compiling the firmware allows you to handle the state of AP-Protect at a later stage. +Setting the :kconfig:option:`CONFIG_NRF_APPROTECT_USER_HANDLING` Kconfig option to ``y`` and compiling the firmware allows you to handle the state of the software AP-Protect at a later stage. This option in fact does not touch the mechanism and keeps it closed. You can use this option for example to implement the authenticated debug and lock. See the SoC or SiP hardware documentation for more information. +.. note:: + For multi-image builds, this Kconfig option has to be set for all images. + The default value is to open the device if the ``UICR.APPROTECT`` register is not set. + This allows the debugger to be attached to the device. + + When using sysbuild, set the ``SB_CONFIG_APPROTECT_USER_HANDLING`` sysbuild Kconfig option, which enables the :kconfig:option:`CONFIG_NRF_APPROTECT_USER_HANDLING` Kconfig option for all images. + .. _app_approtect_ncs_use_uicr: -Enabling AP-Protect with :kconfig:option:`CONFIG_NRF_APPROTECT_USE_UICR` -======================================================================== +Enabling software AP-Protect with :kconfig:option:`CONFIG_NRF_APPROTECT_USE_UICR` +================================================================================= -Setting the :kconfig:option:`CONFIG_NRF_APPROTECT_USE_UICR` Kconfig option to ``y`` and compiling the firmware makes the AP-Protect disabled by default. +Setting the :kconfig:option:`CONFIG_NRF_APPROTECT_USE_UICR` Kconfig option to ``y`` and compiling the firmware makes the software AP-Protect disabled by default. This is the default setting in the |NCS|. You can start debugging the firmware without additional steps needed. -Once you are done debugging, run the following command to enable the access port protection: +.. _app_approtect_uicr_approtect: + +Enabling hardware AP-Protect by locking the ``UICR.APPROTECT`` register +======================================================================= + +For the devices that are in a production environment, it is highly recommended to lock the ``UICR.APPROTECT`` register to prevent unauthorized access to the device. +If the access port protection is configured this way, it cannot be disabled without erasing the flash memory. + +.. note:: + This is the only mechanism supported by the nRF52 Series and the nRF9160 devices that do not support both hardware and software AP-Protect. + +To lock the ``UICR.APPROTECT`` register, complete the following steps: .. code-block:: console nrfjprog --rbp ALL -This command enables the AP-Protect and resets the device. +.. note:: + |nrfjprog_deprecation_note| + +This command enables the hardware AP-Protect (and Secure AP-Protect) and resets the device. + +.. _app_secure_approtect: + +Secure AP-Protect +================= + +With :ref:`Trusted Firmware-M (TF-M) ` comes :ref:`security by separation `, enabling a Secure Processing Environment (SPE) that is isolated from the Non-Secure Processing Environment (NSPE). +TF-M is available for the nRF53 and nRF91 Series devices. + +While AP-Protect blocks access to all CPU registers and memories, Secure AP-Protect limits the CPU access to the non-secure side only. +This allows debugging of the NSPE, while the SPE debugging is blocked. + +The following Kconfig options for enabling Secure AP-Protect are available for the nRF91x1 and nRF53 Series devices: + +* :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_LOCK` +* :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USER_HANDLING` +* :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USE_UICR` + +In addition, you can enable hardware Secure AP-Protect by setting the ``UICR.SECUREAPPROTECT`` register as instructed in :ref:`app_secure_approtect_uicr_approtect`. -To enable only the Secure AP-Protect, run the following command: +Enabling software Secure AP-Protect with :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_LOCK` +------------------------------------------------------------------------------------------- + +Setting the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_LOCK` Kconfig option to ``y`` and compiling the firmware enables the secure access protection mechanism for SoCs of the nRF53 Series. + +Enabling this Kconfig option writes the secure debugger register in the ``SystemInit()`` function to lock the secure access port protection at every boot. +In addition to this, the ``UICR.SECUREAPPROTECT`` register should be written as instructed in :ref:`app_secure_approtect_uicr_approtect`. + +.. note:: + For multi-image builds, this Kconfig option needs to be set for the first image (usually a bootloader). + Otherwise, the software Secure AP-Protect will not be sufficient as the debugger can be attached to the SPE after the first image opens the software Secure AP-Protect with the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USE_UICR` Kconfig option, which is the default value. + + When using sysbuild, set the sysbuild Kconfig option ``SB_CONFIG_SECURE_APPROTECT_LOCK``, which enables the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_LOCK` Kconfig option for all images. + +.. important:: + On the nRF91x1 Series devices, the register setting related to the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_LOCK` Kconfig option does not persist in System ON IDLE mode. + You must lock the ``UICR.SECUREAPPROTECT`` register to enable the hardware Secure AP-Protect mechanism as instructed in :ref:`app_secure_approtect_uicr_approtect`. + +Enabling software Secure AP-Protect with :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USER_HANDLING` +---------------------------------------------------------------------------------------------------- + +Setting the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USER_HANDLING` Kconfig option to ``y`` and compiling the firmware allows you to handle the state of the software Secure AP-Protect at a later stage. +This option does not touch the mechanism and keeps it closed. + +You can for example use this option to implement an authenticated debug and lock of the SPE. +See the SoC or SiP hardware documentation for more information. + +.. note:: + For multi-image builds, this Kconfig option needs to be set for all images. + The default value is to open the device if the ``UICR.SECUREAPPROTECT`` is not set. + This allows the debugger to be attached to the device. + + When using sysbuild, set the ``SB_CONFIG_SECURE_APPROTECT_USER_HANDLING`` sysbuild Kconfig option, which enables the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USER_HANDLING` Kconfig option for all images. + +Enabling software Secure AP-Protect with :kconfig:option:`CONFIG_SECURE_NRF_APPROTECT_USE_UICR` +----------------------------------------------------------------------------------------------- + +Setting the :kconfig:option:`CONFIG_NRF_SECURE_APPROTECT_USE_UICR` Kconfig option to ``y`` and compiling the firmware disables the software Secure AP-Protect mechanism by default. +This is the default setting in the |NCS|. + +You can start debugging the SPE without additional steps needed. + +.. _app_secure_approtect_uicr_approtect: + +Enabling hardware Secure AP-Protect by locking the ``UICR.SECUREAPPROTECT`` register +------------------------------------------------------------------------------------ + +To enable only the hardware Secure AP-Protect mechanism, run the following command: + +.. note:: + This is the only mechanism supported for the nRF9160 devices that do not have software support for Secure AP-Protect. .. code-block:: console nrfjprog --rbp SECURE + +.. note:: + |nrfjprog_deprecation_note| + +This command enables hardware Secure AP-Protect and resets the device. diff --git a/doc/nrf/security/tfm.rst b/doc/nrf/security/tfm.rst index e9185546ef61..48d3f3b30722 100644 --- a/doc/nrf/security/tfm.rst +++ b/doc/nrf/security/tfm.rst @@ -7,7 +7,7 @@ Running applications with Trusted Firmware-M :local: :depth: 2 -On nRF5340 and nRF91 Series devices, Trusted Firmware-M (TF-M) is used to configure and boot an application as non-secure. +On nRF5340, nRF54L15 and nRF91 Series devices, Trusted Firmware-M (TF-M) is used to configure and boot an application as non-secure. Overview ******** @@ -19,17 +19,17 @@ This is achieved by a set of secure run time services such as Secure Storage, Cr Additionally, secure boot through MCUboot in TF-M ensures integrity of runtime software and supports firmware upgrade. .. note:: - Support for TF-M with :ref:`minimal version ` disabled in |NCS| is currently :ref:`experimental `. + Support for TF-M with :ref:`minimal version ` disabled in the |NCS| is currently :ref:`experimental `. For official documentation, see the `TF-M documentation`_. -The TF-M implementation in |NCS| is currently demonstrated in the following samples: +The TF-M implementation in |NCS| is demonstrated in the following samples: -- All :ref:`tfm_samples` in this SDK -- All :ref:`cryptography samples ` in this SDK -- A series of :ref:`TF-M integration samples ` available in Zephyr -- The :ref:`https_client` sample for nRF91 Series devices in this SDK -- The :ref:`openthread_samples` that support the ``nrf5340dk/nrf5340/cpuapp/ns`` board target in this SDK +* All :ref:`tfm_samples` in this SDK +* All :ref:`cryptography samples ` in this SDK +* A series of :zephyr:code-sample-category:`tfm_integration` samples available in Zephyr + +In addition, the TF-M implementation is used in all samples and applications in this SDK that support the ``*/ns`` :ref:`variant ` of the boards, due to :ref:`Cortex-M Security Extensions (CMSE) ` support. Building ******** @@ -48,6 +48,7 @@ To use the full TF-M, you must disable the :kconfig:option:`CONFIG_TFM_PROFILE_T You must build TF-M using a non-secure board target. The following platforms are currently supported: +* nRF54L15 * nRF5340 * nRF91 Series @@ -65,7 +66,7 @@ In such case, the Kconfig configurations in the Nordic Security Backend control You can configure what crypto modules to include in TF-M by using the ``CONFIG_TFM_CRYPTO_*`` Kconfig options found in file :file:`zephyr/modules/trusted-firmware-m/Kconfig.tfm.crypto_modules`. TF-M utilizes :ref:`hardware unique keys ` when the PSA Crypto key derivation APIs are used, and ``psa_key_derivation_setup`` is called with the algorithm ``TFM_CRYPTO_ALG_HUK_DERIVATION``. -For more information about the PSA cryptography and the API, see `PSA Cryptography API 1.0.1`_. +For more information about the PSA cryptography and the API, see `PSA Certified Crypto API`_. .. _tfm_minimal_build: @@ -193,8 +194,8 @@ TF-M partition alignment requirements TF-M requires that secure and non-secure partition addresses must be aligned to the flash region size :kconfig:option:`CONFIG_NRF_TRUSTZONE_FLASH_REGION_SIZE`. |NCS| ensures that they in fact are aligned and comply with the TF-M requirements. -In nRF53 and nRF91 series TF-M uses the SPU to enforce the security policy between the partitions, so the :kconfig:option:`CONFIG_NRF_TRUSTZONE_FLASH_REGION_SIZE` is set to the SPU flash region size. -In nRF54L15 TF-M uses the MPC to enforce the security policy between the partitions, so the :kconfig:option:`CONFIG_NRF_TRUSTZONE_FLASH_REGION_SIZE` is set to the MPC region size. +On nRF53 and nRF91 Series devices, TF-M uses the SPU to enforce the security policy between the partitions, so the :kconfig:option:`CONFIG_NRF_TRUSTZONE_FLASH_REGION_SIZE` is set to the SPU flash region size. +On nRF54L15 devices, TF-M uses the MPC to enforce the security policy between the partitions, so the :kconfig:option:`CONFIG_NRF_TRUSTZONE_FLASH_REGION_SIZE` is set to the MPC region size. When the :ref:`partition_manager` is enabled, it will take into consideration the alignment requirements. But when the static partitions are used, the user is responsible for following the alignment requirements. diff --git a/doc/nrf/security/trusted_storage.rst b/doc/nrf/security/trusted_storage.rst index 3cdf2fd2b36f..ab842c4e982f 100644 --- a/doc/nrf/security/trusted_storage.rst +++ b/doc/nrf/security/trusted_storage.rst @@ -43,6 +43,18 @@ The table below gives an overview of the trusted storage support for the product - Yes - Yes - No + * - nRF54L15 with TF-M + - TF-M secure storage service + - Yes + - Yes + - Yes + - Yes + * - nRF54L15 without TF-M + - Trusted storage library + - Partial [1]_ + - Yes + - Yes + - Yes * - nRF5340 with TF-M - TF-M secure storage service - Yes diff --git a/doc/nrf/shortcuts.txt b/doc/nrf/shortcuts.txt index ffbf3d599994..2a8bd9da8fd1 100644 --- a/doc/nrf/shortcuts.txt +++ b/doc/nrf/shortcuts.txt @@ -2,11 +2,11 @@ .. ### Versions -.. |release| replace:: v2.7.0 -.. |release_tt| replace:: ``v2.7.0`` -.. |release_number_tt| replace:: ``2.7.0`` +.. |release| replace:: v2.9.0-nRF54H20-rc1 +.. |release_tt| replace:: ``v2.9.0-nRF54H20-rc1`` +.. |release_number_tt| replace:: ``2.9.0-nRF54H20-rc1`` -.. |jlink_ver| replace:: v7.94i +.. |jlink_ver| replace:: v8.10f .. |jlink_ver_vsc| replace:: v7.94i .. ### Config shortcuts @@ -25,25 +25,25 @@ .. |connect_kit| replace:: Connect the kit to the computer using a USB cable. The kit is assigned a COM port (Windows) or ttyACM device (Linux), which is visible in the Device Manager. -.. |connect_terminal_generic| replace:: Connect to the device with a terminal emulator (for example, nRF Connect Serial Terminal). +.. |connect_terminal_generic| replace:: Connect to the device with a terminal emulator (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings and steps. -.. |connect_terminal| replace:: Connect to the kit with a terminal emulator (for example, nRF Connect Serial Terminal). +.. |connect_terminal| replace:: Connect to the kit with a terminal emulator (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings and steps. -.. |connect_terminal_specific| replace:: Connect to the kit that runs this sample with a terminal emulator (for example, nRF Connect Serial Terminal). +.. |connect_terminal_specific| replace:: Connect to the kit that runs this sample with a terminal emulator (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings and steps. -.. |connect_terminal_both| replace:: Connect to both kits with a terminal emulator (for example, nRF Connect Serial Terminal). +.. |connect_terminal_both| replace:: Connect to both kits with a terminal emulator (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings and steps. -.. |connect_terminal_ANSI| replace:: Open a serial port connection to the kit using a terminal emulator that supports VT100/ANSI escape characters (for example, nRF Connect Serial Terminal). +.. |connect_terminal_ANSI| replace:: Open a serial port connection to the kit using a terminal emulator that supports VT100/ANSI escape characters (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings and steps. -.. |connect_terminal_specific_ANSI| replace:: Connect to the kit that runs this sample with a terminal emulator that supports VT100/ANSI escape characters (for example, nRF Connect Serial Terminal). +.. |connect_terminal_specific_ANSI| replace:: Connect to the kit that runs this sample with a terminal emulator that supports VT100/ANSI escape characters (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings and steps. -.. |connect_terminal_both_ANSI| replace:: Connect to both kits with a terminal emulator that supports VT100/ANSI escape characters (for example, nRF Connect Serial Terminal). +.. |connect_terminal_both_ANSI| replace:: Connect to both kits with a terminal emulator that supports VT100/ANSI escape characters (for example, the `Serial Terminal app`_). See :ref:`test_and_optimize` for the required settings and steps. .. |ANSI| replace:: that supports VT100/ANSI escape characters @@ -65,6 +65,8 @@ .. |Thingy91| replace:: Thingy:91 (PCA20035) - see :ref:`ug_thingy91` .. |nRF21540DK| replace:: nRF21540 DK board (PCA10112) +.. |thingy52_not_supported_note| replace:: Despite being supported in :ref:`Zephyr `, the |NCS| does not support `Nordic Thingy:52`_. + .. ### FOTA shortcuts .. |fota_upgrades_def| replace:: You can update the firmware of the device over the air, thus without a wired connection. @@ -79,6 +81,21 @@ .. |VSC| replace:: Visual Studio Code .. |nRFVSC| replace:: nRF Connect for VS Code extension +.. ### Deprecation shortcuts + +.. |file_suffix_related_deprecation_note| replace:: This feature is deprecated and is being replaced by :ref:`suffix-based configurations `. + You can continue to use it until the transition is complete in the |NCS| and the feature is removed in one of the upcoming |NCS| releases. + +.. |sysbuild_related_deprecation_note| replace:: This feature is deprecated and is being replaced by Zephyr's :ref:`zephyr:sysbuild`. + You can continue to use it until the transition is complete in the |NCS| and the feature is removed in one of the upcoming |NCS| releases. + For more information, see :ref:`zephyr:sysbuild`, :ref:`sysbuild_images`, :ref:`zephyr_samples_sysbuild`, and :ref:`sysbuild_forced_options`. + +.. |nrfjprog_deprecation_note| replace:: Starting with the |NCS| v2.8.0, nrfjprog is in the process of being archived. + It will remain available for download, but `nRF Util (device command) `_ will gradually replace it. + +.. |nrf_CLT_deprecation_note| replace:: Starting with the |NCS| v2.8.0, the nRF Command Line Tools are in the process of being archived. + They will remain available for download, but `nRF Util`_ will gradually replace them. + .. ### Thread usage shortcuts .. |enable_thread_before_testing| replace:: Make sure to enable the OpenThread stack before building and testing this sample. @@ -89,8 +106,8 @@ .. ### Zigbee & ZBOSS shortcuts .. |zigbee_version| replace:: Zigbee 3.0 -.. |zboss_version| replace:: 3.11.4.0 -.. |zigbee_ncp_package_version| replace:: 2.2.3 +.. |zboss_version| replace:: 3.11.5.0 +.. |zigbee_ncp_package_version| replace:: 2.2.4 .. |zigbee_description| replace:: Zigbee is a portable, low-power software networking protocol that provides connectivity over an 802.15.4-based mesh network. .. |enable_zigbee_before_testing| replace:: Make sure to configure the Zigbee stack before building and testing this sample. See :ref:`ug_zigbee_configuring` for more information. @@ -169,6 +186,9 @@ .. |ncs_oot_sample_note| replace:: Some samples in the |NCS| are currently not designed to work out-of-tree. You may need to manually configure your sample to work correctly in the |nRFVSC|. +.. |ncs_repo| replace:: https://github.com/nrfconnect/sdk-nrf + +.. |ncs_nrfxlib_repo| replace:: https://github.com/nrfconnect/sdk-nrfxlib .. |ncs_unchanged_samples_note| replace:: If you are working with embedded devices, it is a good practice to first test your setup by programming an unchanged :ref:`sample` to your development kit. .. |application_sample_definition| replace:: For simplicity, this guide will refer to both :ref:`samples` and :ref:`applications` as "applications". @@ -195,6 +215,7 @@ For these reasons, providing a general guide on how to test with external devices is challenging. The suggested approach is to test with Nordic Semiconductor devices on both sides first to verify basic functionalities and get familiar with the solution before using custom devices. Contact `Technical Support team `_ if you need assistance. + .. |usb_known_issues| replace:: Make sure to check the :ref:`nRF5340 Audio application known issues ` related to serial connection with the USB. .. |trusted_execution| replace:: nRF5340 and nRF9160 @@ -220,20 +241,11 @@ .. |board_target| replace:: Replace the *board_target* with the board target of the nRF91 Series device you are using (see the Requirements section). -.. |thingy52_not_supported_note| replace:: Despite being supported in :ref:`Zephyr `, the |NCS| does not support `Nordic Thingy:52`_. - -.. |sysbuild_related_deprecation_note| replace:: This feature is deprecated and is being replaced by Zephyr's :ref:`zephyr:sysbuild`. - You can continue to use it until the transition is complete in the |NCS| and the feature is removed in one of the upcoming |NCS| releases. - For more information, see :ref:`zephyr:sysbuild`, :ref:`sysbuild_images`, :ref:`zephyr_samples_sysbuild`, and :ref:`sysbuild_forced_options`. - .. |sysbuild_autoenabled_ncs| replace:: When building :ref:`repository applications ` in the :ref:`SDK repositories `, building with sysbuild is :ref:`enabled by default `. If you work with out-of-tree :ref:`freestanding applications `, you need to manually pass the ``--sysbuild`` parameter to every build command or :ref:`configure west to always use it `. .. |parameters_override_west_config| replace:: The parameters and options passed in the command line always take precedence over ``west config`` settings. -.. |file_suffix_related_deprecation_note| replace:: This feature is deprecated and is being replaced by :ref:`suffix-based configurations `. - You can continue to use it until the transition is complete in the |NCS| and the feature is removed in one of the upcoming |NCS| releases. - .. |multi_image| replace:: These samples are built for the application core and, by default, include the network core application as child image in a multi-image build (see :ref:`ug_nrf5340_multi_image`). .. |migration_contact_devzone| replace:: While we strive to document all breaking changes, the migration guides might not include the detailed migration steps for your use case. @@ -247,3 +259,11 @@ .. |toolchain_management_ncs_versions| replace:: The Toolchain Manager installation is recommended only when using the nRF54H20 DK with the |NCS| v2.7.0. When using any other DK, the Toolchain Manager installation is recommended for the |NCS| v1.9.x and earlier versions. + +.. |filter_samples_by_board| replace:: If you want to list samples available for one or more specific boards, `use the nRF Connect for Visual Studio Code extension to filter them `_. + +.. |54H_engb_2_8| replace:: The nRF54H20 DK Engineering A and B (up to version 0.8.2) are no longer supported starting with |NCS| v2.9.0. + +.. |devicetree_bindings| replace:: The devicetree bindings provide the structure for the content of the devicetree nodes. + The :ref:`compatible ` property defines the compatibility of a devicetree node with a devicetree binding. + For more information, read the :ref:`documentation about devicetree bindings in Zephyr `. diff --git a/doc/nrf/test_and_optimize.rst b/doc/nrf/test_and_optimize.rst index f35a90fec8b5..18682ab6c664 100644 --- a/doc/nrf/test_and_optimize.rst +++ b/doc/nrf/test_and_optimize.rst @@ -40,9 +40,9 @@ Use one of the following methods: .. tabs:: - .. group-tab:: nRF Connect Serial Terminal + .. group-tab:: Serial Terminal app - You can use the `nRF Connect Serial Terminal`_ app, which you can install from `nRF Connect for Desktop`_. + You can use the `Serial Terminal app`_, which you can install from `nRF Connect for Desktop`_. It establishes serial communication with the device, sends commands through UART, and also displays the UART output. The app is available for Windows, Linux, and macOS. @@ -57,9 +57,9 @@ Use one of the following methods: #. Configure the serial port connection parameters using the default serial port connection settings listed at the top of this page. #. Click :guilabel:`Connect to port`. - nRF Connect Serial Terminal starts the serial communication with the kit. + The Serial Terminal app starts the serial communication with the kit. - For more information about how to connect using the app, see the `steps in the Serial Terminal documentation `_. + For more information about how to connect using the app, see the `steps in the Serial Terminal documentation `_. .. group-tab:: nRF Connect for Visual Studio Code diff --git a/doc/nrf/test_and_optimize/debugging.rst b/doc/nrf/test_and_optimize/debugging.rst index 4090d301fc83..e6243cba6e2e 100644 --- a/doc/nrf/test_and_optimize/debugging.rst +++ b/doc/nrf/test_and_optimize/debugging.rst @@ -128,8 +128,8 @@ Use the following steps to enable monitor-mode debugging in the |NCS|: 2. Attach the debugger to the application. 3. Depending on debugger you are using, enable monitor-mode debugging: - * For nRF Debug in the |nRFVSC|, enter ``-exec monitor exec SetMonModeDebug=1`` in the debug console. - * For debugging using Ozone, enter ``Exec.Command("SetMonModeDebug = 1");`` in the console. + * For nRF Debug in the |nRFVSC|, the monitor-mode is automatically enabled when you set the :kconfig:option:`CONFIG_SEGGER_DEBUGMON` Kconfig option and build your application (``-exec monitor exec SetMonModeDebug=1`` is automatically passed to the debug console). + * For debugging using Ozone, enter ``Exec.Command("SetMonModeDebug = 1");`` in the console. For more information about monitor-mode debugging, see Zephyr's :ref:`zephyr:debugmon` documentation and SEGGER's `Monitor-mode Debugging `_ documentation. @@ -159,19 +159,19 @@ The following debugging tools are most commonly used in different areas of the | * - Tool - Purpose - Area - * - `nRF Connect Bluetooth Low Energy`_ + * - `Bluetooth Low Energy app`_ - Configure and test Bluetooth Low Energy devices. Available from `nRF Connect for Desktop`_. - :ref:`ug_bt` - * - `nRF Connect Cellular Monitor `_ + * - `Cellular Monitor app`_ - Capture and analyze modem traces to evaluate communication and view network parameters. Available from `nRF Connect for Desktop`_. - :ref:`ug_lte` - * - `nRF Connect Direct Test Mode`_ + * - `Direct Test Mode app`_ - Perform RF PHY checks of Bluetooth Low Energy devices using a GUI for the Bluetooth-specified Direct Test Mode. Available from `nRF Connect for Desktop`_. - :ref:`ug_bt` - * - `nRF Connect RSSI Viewer `_ + * - `RSSI Viewer app`_ - Visualize RSSI and frequency in the 2.4-GHz band in real time. Available from `nRF Connect for Desktop`_. - :ref:`ug_bt` - * - `nRF Connect Power Profiler`_ + * - `Power Profiler app`_ - Measure the real-time power consumption of your designs. Available from `nRF Connect for Desktop`_. - :ref:`ug_bt`, :ref:`ug_lte`, :ref:`ug_matter`, :ref:`ug_thread`, :ref:`ug_wifi`, :ref:`ug_zigbee` * - `Online Power Profiler (OPP)`_ diff --git a/doc/nrf/test_and_optimize/optimizing/memory.rst b/doc/nrf/test_and_optimize/optimizing/memory.rst index 32f1a03a7ba5..04dbb8dbed40 100644 --- a/doc/nrf/test_and_optimize/optimizing/memory.rst +++ b/doc/nrf/test_and_optimize/optimizing/memory.rst @@ -257,10 +257,10 @@ Besides applying `General recommendations`_, you can also complete the following .. _app_memory_wifi: -Wi-Fi -***** +Wi-Fi® +****** -The current Wi-Fi® memory requirements are listed on the :ref:`ug_wifi_mem_req_sta_mode` and :ref:`ug_wifi_mem_req_scan_mode` pages. +The current Wi-Fi memory requirements are listed on the :ref:`ug_wifi_mem_req_sta_mode` and :ref:`ug_wifi_mem_req_scan_mode` pages. In addition to applying `General recommendations`_, you can also see the :ref:`nRF70_nRF5340_constrained_host` page to optimize the Wi-Fi stack of your application. Specifically, you can refer to the section on :ref:`networking stack ` or :ref:`memory fine-tuning controls ` which lists Kconfig options that can be used to reduce memory requirements of your application. diff --git a/doc/nrf/test_and_optimize/optimizing/power_general.rst b/doc/nrf/test_and_optimize/optimizing/power_general.rst index 770acfa30912..ca5b786f41a6 100644 --- a/doc/nrf/test_and_optimize/optimizing/power_general.rst +++ b/doc/nrf/test_and_optimize/optimizing/power_general.rst @@ -176,8 +176,8 @@ Protocol-specific recommendations Besides applying `General recommendations`_, read the following subsections for more information on how to optimize specific subsystems. -Bluetooth Mesh -============== +Bluetooth® Mesh +=============== The Bluetooth Mesh protocol offers the :ref:`ug_bt_mesh_configuring_lpn` feature for optimizing the power consumption of the Bluetooth Mesh devices. @@ -226,8 +226,8 @@ Sleepy End Devices try to limit their power consumption by sleeping most of the The :ref:`ot_cli_sample` sample can be used to perform power consumption measurements when configured following some of the general recommendations. See the :ref:`ot_cli_sample_low_power` section of the sample documentation for more information. -Wi-Fi -===== +Wi-Fi® +====== The Wi-Fi protocol introduces the power save mechanism that allows the Station (STA) device to spend the majority of the time in a sleep state and wake up periodically to check for pending traffic. For more information about the Wi-Fi power save mechanism, see the :ref:`Wi-Fi MAC layer ` documentation. diff --git a/doc/nrf/test_and_optimize/test_framework/running_unit_tests.rst b/doc/nrf/test_and_optimize/test_framework/running_unit_tests.rst index d8645f2b700d..e442008429db 100644 --- a/doc/nrf/test_and_optimize/test_framework/running_unit_tests.rst +++ b/doc/nrf/test_and_optimize/test_framework/running_unit_tests.rst @@ -3,6 +3,10 @@ Running unit tests ################## +.. contents:: + :local: + :depth: 2 + Both Zephyr and the |NCS| support running unit tests using the following methods: * :ref:`Twister ` - A test runner tool that is part of Zephyr, used for automating the execution of test cases. diff --git a/doc/nrfx/nrfx.doxyfile.in b/doc/nrfx/nrfx.doxyfile.in index d5819a9d27a3..00edb7ddc486 100644 --- a/doc/nrfx/nrfx.doxyfile.in +++ b/doc/nrfx/nrfx.doxyfile.in @@ -285,8 +285,8 @@ TAB_SIZE = 4 # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) -ALIASES = "tagGreenTick=\htmlonly
\endhtmlonly \xmlonlyembed:rst:inline :green:`✔`\endxmlonly" \ - "tagRedCross=\htmlonly
\endhtmlonly \xmlonlyembed:rst:inline :red:`✖`\endxmlonly" \ +ALIASES = "tagGreenTick=\htmlonly
\endhtmlonly" \ + "tagRedCross=\htmlonly
\endhtmlonly" \ "nRF5340pinAssignmentsURL=\"https://infocenter.nordicsemi.com/index.jsp?topic=%2Fps_nrf5340%2Fchapters%2Fpin.html\"" \ "refhal{1}=\sa \1 \copydoc \1" diff --git a/doc/nrfxlib/conf.py b/doc/nrfxlib/conf.py index cdc786c23876..9b9b7e9d24b8 100644 --- a/doc/nrfxlib/conf.py +++ b/doc/nrfxlib/conf.py @@ -41,10 +41,11 @@ "zephyr.doxyrunner", "zephyr.doxybridge", "zephyr.domain", + "zephyr.gh_utils", ] master_doc = "README" -linkcheck_ignore = [r"(\.\.(\\|/))+(kconfig|nrf)"] +linkcheck_ignore = [r"\.\.(\\|/)"] rst_epilog = """ .. include:: /doc/links.txt .. include:: /doc/shortcuts.txt @@ -102,6 +103,11 @@ external_content_contents = [(NRFXLIB_BASE, "**/*.rst"), (NRFXLIB_BASE, "**/doc/")] +# -- Options for zephyr.gh_utils ----------------------------------------------- + +gh_link_version = "main" if version.endswith("99") else f"v{version}" +gh_link_base_url = f"https://github.com/nrfconnect/sdk-nrfxlib" + def setup(app): app.add_css_file("css/nrfxlib.css") diff --git a/doc/nrfxlib/nrfxlib.doxyfile.in b/doc/nrfxlib/nrfxlib.doxyfile.in index 58339bf57cb2..422f7b5ec880 100644 --- a/doc/nrfxlib/nrfxlib.doxyfile.in +++ b/doc/nrfxlib/nrfxlib.doxyfile.in @@ -279,13 +279,7 @@ TAB_SIZE = 8 # with the commands \{ and \} for these it is advised to use the version @{ and # @} or use a double escape (\\{ and \\}) -ALIASES = "rst=\verbatim embed:rst" \ - "endrst=\endverbatim" \ - "rststar=\verbatim embed:rst:leading-asterisk" \ - "endrststar=\endverbatim" \ - "r=\verbatim embed:rst:leading-asterisk" \ - "er=\endverbatim" \ - "kconfig{1}=\verbatim embed:rst:inline :kconfig:option:`\1` \endverbatim" \ +ALIASES = "kconfig{1}=\verbatim \1 \endverbatim" \ "req=\xrefitem req \"Requirement\" \"Requirements\"" # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources @@ -962,11 +956,7 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = @DOCSET_SOURCE_BASE@ \ - @DOCSET_SOURCE_BASE@/nrf_wifi/fw_if/umac_if/inc/fmac_api_common.h \ - @DOCSET_SOURCE_BASE@/nrf_wifi/fw_if/umac_if/inc/fmac_structs_common.h \ - @DOCSET_SOURCE_BASE@/nrf_wifi/fw_if/umac_if/inc/default \ - @DOCSET_SOURCE_BASE@/nrf_wifi/fw_if/umac_if/inc/radio_test/fmac_api.h +INPUT = @DOCSET_SOURCE_BASE@ # This tag can be used to specify the character encoding of the source files # that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/doc/requirements.txt b/doc/requirements.txt index 412c39ea032a..10b1e50a3972 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -6,6 +6,7 @@ # - Keep nrf/installation/recommended_versions.rst up to date # Extension | NCS | Kconfig | Matter | MCUboot | nrfxlib | TF-M | Zephyr | +anytree # | | | | | | | X | azure-storage-blob # | X | | | | | | | doxmlparser # | | | | | | | X | m2r2 # | | | | | | | | @@ -13,11 +14,11 @@ PyYAML # | X | | | | | pykwalify # | | | | | | | X | pytest # | | | | | | | X | recommonmark # | | | X | X | | | | -sphinx~=6.2 # | X | X | X | X | X | X | X | +sphinx~=7.4 # | X | X | X | X | X | X | X | sphinx-autobuild # | X | X | X | X | X | X | X | sphinx-copybutton # | X | | | | | | X | sphinx-ncs-theme<1.1 # | X | | | | | | | -sphinx-notfound-page # | X | | | | | | X | +sphinx-notfound-page>=1.0.0 # | X | | | | | | X | sphinx-tabs>=3.4 # | X | | | | | | X | sphinx-togglebutton # | X | | | | | | X | sphinx_markdown_tables # | | | X | | | | | diff --git a/doc/versions.json b/doc/versions.json index c208abe7ef15..452e71804346 100644 --- a/doc/versions.json +++ b/doc/versions.json @@ -1,5 +1,9 @@ [ - "2.7.99", + "2.9.99", + "2.9.0-nRF54H20-rc1", + "2.9.0", + "2.8.0", + "2.8.0-preview1", "2.7.99-cs2", "2.7.99-cs1", "2.7.0", diff --git a/doc/wifi/wifi.doxyfile.in b/doc/wifi/wifi.doxyfile.in new file mode 100644 index 000000000000..237a2eef590a --- /dev/null +++ b/doc/wifi/wifi.doxyfile.in @@ -0,0 +1,2876 @@ +# Doxyfile 1.12.0 + +# This file describes the settings to be used by the documentation system +# Doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use Doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use Doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "nRF WiFi" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = @DOCSET_VERSION@ + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = @NRF_BASE@/doc/_doxygen/logo.png + +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where Doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = @DOCSET_BUILD_DIR@ + +# If the CREATE_SUBDIRS tag is set to YES then Doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this +# option can be useful when feeding Doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + +# If the ALLOW_UNICODE_NAMES tag is set to YES, Doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by Doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, Doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, Doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, Doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES, Doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which Doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where Doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = @DOCSET_SOURCE_BASE@ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, Doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the JAVADOC_BANNER tag is set to YES then Doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by Doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# By default Python docstrings are displayed as preformatted text and Doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# Doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as Doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then Doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = YES + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:^^" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by Doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make Doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by Doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then Doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by Doxygen, so you can +# mix Doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 6. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 6 + +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + +# When enabled Doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let Doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also makes the inheritance and +# collaboration diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse +# them like normal C++ but will assume all classes use public instead of private +# inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# Doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then Doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = YES + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, Doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# Doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run Doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +# The NUM_PROC_THREADS specifies the number of threads Doxygen is allowed to use +# during processing. When set to 0 Doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, Doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = YES + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all friend +# declarations. If set to NO, these declarations will be included in the +# documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# With the correct setting of option CASE_SENSE_NAMES Doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and macOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. + +CASE_SENSE_NAMES = SYSTEM + +# If the HIDE_SCOPE_NAMES tag is set to NO then Doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then Doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + +# If the SHOW_INCLUDE_FILES tag is set to YES then Doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then Doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then Doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then Doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then Doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = YES + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and Doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING Doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# Doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by Doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by Doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents Doxygen's defaults, run Doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. +# +# Note that if you run Doxygen from a directory containing a file called +# DoxygenLayout.xml, Doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +# The EXTERNAL_TOOL_PATH tag can be used to extend the search path (PATH +# environment variable) so that external tools such as latex and gs can be +# found. +# Note: Directories specified with EXTERNAL_TOOL_PATH are added in front of the +# path already specified by the PATH variable, and are added in the order +# specified. +# Note: This option is particularly useful for macOS version 14 (Sonoma) and +# higher, when running Doxygen from Doxywizard, because in this case any user- +# defined changes to the PATH are ignored. A typical example on macOS is to set +# EXTERNAL_TOOL_PATH = /Library/TeX/texbin /usr/local/bin +# together with the standard path, the full search path used by doxygen when +# launching external tools will then become +# PATH=/Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin + +EXTERNAL_TOOL_PATH = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by Doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by Doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then Doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, Doxygen will generate warnings for +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# If WARN_IF_INCOMPLETE_DOC is set to YES, Doxygen will warn about incomplete +# function parameter documentation. If set to NO, Doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, Doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, Doxygen will warn about +# undocumented enumeration values. If set to NO, Doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + +# If the WARN_AS_ERROR tag is set to YES then Doxygen will immediately stop when +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then Doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the Doxygen process Doxygen will return with a non-zero status. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then Doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined Doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. +# The default value is: NO. + +WARN_AS_ERROR = YES + +# The WARN_FORMAT tag determines the format of the warning messages that Doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of Doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). In case the file specified cannot be opened for writing the +# warning and error messages are written to standard error. When as file - is +# specified the warning and error messages are written to standard output +# (stdout). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = @DOCSET_SOURCE_BASE@ + +# This tag can be used to specify the character encoding of the source files +# that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# This tag can be used to specify the character encoding of the source files +# that Doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). +# See also: INPUT_ENCODING for further information on supported encodings. + +INPUT_FILE_ENCODING = + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by Doxygen. +# +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as Doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.h + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which Doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# ANamespace::AClass, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that Doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that Doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by Doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by Doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the Doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# multi-line macros, enums or list initialized variables directly into the +# documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct Doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of Doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by Doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then Doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then Doxygen will use the +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which Doxygen's built-in parser lacks the necessary type information. +# Note: The availability of this option depends on whether or not Doxygen was +# generated with the -Duse_libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS +# tag is set to YES then Doxygen will add the directory of each input to the +# include path. +# The default value is: YES. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_ADD_INC_PATHS = YES + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by Doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. +# Note: The availability of this option depends on whether or not Doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, Doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = wifi + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank Doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that Doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that Doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of Doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = @NRF_BASE@/doc/_doxygen/header.html + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank Doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that Doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank Doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that Doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by Doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = @NRF_BASE@/doc/_doxygen/doxygen-awesome.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = @NRF_BASE@/doc/_doxygen/doxygen-awesome-darkmode-toggle.js \ + @NRF_BASE@/doc/_doxygen/doxygen-awesome-paragraph-link.js \ + @NRF_BASE@/doc/_doxygen/doxygen-awesome-interactive-toc.js + +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generates light mode output, DARK always +# generates dark mode output, AUTO_LIGHT automatically sets the mode according +# to the user preference, uses light mode if no preference is set (the default), +# AUTO_DARK automatically sets the mode according to the user preference, uses +# dark mode if no preference is set and TOGGLE allows a user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = AUTO_LIGHT + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a color-wheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use gray-scales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via JavaScript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have JavaScript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then Doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# Doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, Doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag determines the URL of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDURL = + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then Doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by Doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# Doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the main .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty Doxygen will try to +# run qhelpgenerator on the generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by Doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATE_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# Doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# When the SHOW_ENUM_VALUES tag is set doxygen will show the specified +# enumeration values besides the enumeration mnemonics. +# The default value is: NO. + +SHOW_ENUM_VALUES = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, Doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# If the OBFUSCATE_EMAILS tag is set to YES, Doxygen will obfuscate email +# addresses. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +OBFUSCATE_EMAILS = YES + +# If the HTML_FORMULA_FORMAT option is set to svg, Doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# Doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side JavaScript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with JavaScript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled Doxygen will generate a search box for +# the HTML output. The underlying search engine uses JavaScript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the JavaScript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /