{"id":11254,"date":"2026-01-03T17:31:23","date_gmt":"2026-01-03T08:31:23","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=11254"},"modified":"2026-01-03T17:41:30","modified_gmt":"2026-01-03T08:41:30","slug":"nrf-connect-sdk","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=11254","title":{"rendered":"nRF Connect SDK"},"content":{"rendered":"<h1>nRF Connect SDK<\/h1>\n<h2>nRF Connect for VS Code<\/h2>\n<p>\ud655\uc7a5\uc5d0\uc11c nRF Connect \ub97c \ucc3e\uc544 \uc124\uce58\ud569\ub2c8\ub2e4.<\/p>\n<h2>Toolchain, SDK \uc124\uce58<\/h2>\n<p>nRF Connect \ud0ed\uc744 \uc120\ud0dd \ud6c4 Toolchain, SDK \ub97c \uac01\uac01 \uc124\uce58\ud569\ub2c8\ub2e4.<\/p>\n<p>nRF Connect SDK(NCS)\ub97c \uc0ac\uc6a9\ud558\uc5ec <strong>MCUboot(Bootloader)<\/strong>\uc640 <strong>TF-M(Trusted Firmware-M)<\/strong>\uc744 \uacb0\ud569\ud558\ub294 \uac83\uc740 \ubcf4\uc548 \ubd80\ud305\uacfc \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uc2e4\ud589 \ud658\uacbd(TEE)\uc744 \uad6c\ucd95\ud558\ub294 \uac00\uc7a5 \ud45c\uc900\uc801\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uac00\uc774\ub4dc\ub294 nRF5340 \ub610\ub294 nRF9160\uacfc \uac19\uc774 <strong>Arm TrustZone<\/strong>\uc744 \uc9c0\uc6d0\ud558\ub294 \uae30\uae30\ub97c \uae30\uc900\uc73c\ub85c \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<hr \/>\n<h2>nRF Connect SDK: MCUboot + TF-M \ud1b5\ud569 \uac00\uc774\ub4dc<\/h2>\n<p>\uc774 \ubb38\uc11c\ub294 \ubcf4\uc548 \ubd80\ud305(MCUboot)\uacfc \ud558\ub4dc\uc6e8\uc5b4 \uaca9\ub9ac \ubcf4\uc548(TF-M)\uc744 \ud65c\uc131\ud654\ud558\uc5ec \ubcf4\uc548\uc774 \uac15\ud654\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ube4c\ub4dc\ud558\ub294 \uc808\ucc28\ub97c \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<h3>1. \uae30\ubcf8 \uac1c\ub150 \uc774\ud574<\/h3>\n<ul>\n<li><strong>MCUboot<\/strong>: \uc2dc\uc2a4\ud15c\uc758 Secure Boot\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4. \uc774\ubbf8\uc9c0 \uac80\uc99d \ubc0f \uc5c5\ub370\uc774\ud2b8(OTA) \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>TF-M<\/strong>: Cortex-M \ud558\ub4dc\uc6e8\uc5b4\uc758 TrustZone\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc2dc\uc2a4\ud15c\uc744 <strong>Secure World<\/strong>\uc640 <strong>Non-Secure World<\/strong>\ub85c \ubd84\ub9ac\ud569\ub2c8\ub2e4. \ud0a4 \uc800\uc7a5\uc18c, \uc554\ud638\ud654 \uac00\uc18d \ub4f1\uc744 \uc548\uc804\ud558\uac8c \uad00\ub9ac\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<hr \/>\n<h3>2. \ud504\ub85c\uc81d\ud2b8 \uc124\uc815 (prj.conf)<\/h3>\n<p>\uac00\uc7a5 \uba3c\uc800 \ud504\ub85c\uc81d\ud2b8\uc758 \uc124\uc815 \ud30c\uc77c\uc5d0\uc11c TF-M\uacfc MCUboot \uae30\ub2a5\uc744 \ud65c\uc131\ud654\ud574\uc57c \ud569\ub2c8\ub2e4. nRF Connect SDK\uc5d0\uc11c\ub294 \ub2e8\uc21c\ud55c Kconfig \uc124\uc815\ub9cc\uc73c\ub85c\ub3c4 \ubcf5\uc7a1\ud55c \ube4c\ub4dc \uccb4\uc778\uc744 \uc790\ub3d9\uc73c\ub85c \uad6c\uc131\ud574 \uc90d\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-config\"># TF-M \ud65c\uc131\ud654\nCONFIG_TFM_BOARD=y\nCONFIG_TFM_PROFILE_TYPE_NOT_SET=y\n\n# MCUboot \ud65c\uc131\ud654\nCONFIG_BOOTLOADER_MCUBOOT=y\n\n# \ubcf4\uc548\uc744 \uc704\ud574 Non-secure \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc73c\ub85c \ube4c\ub4dc\nCONFIG_TRUSTED_EXECUTION_NONSECURE=y\n<\/code><\/pre>\n<hr \/>\n<h3>3. \ub514\ubc14\uc774\uc2a4 \ud2b8\ub9ac(Devicetree) \uc124\uc815<\/h3>\n<p>TrustZone\uc744 \uc0ac\uc6a9\ud558\uba74 \uba54\ubaa8\ub9ac \ub9f5\uc774 <strong>Secure<\/strong> \uc601\uc5ed\uacfc <strong>Non-Secure<\/strong> \uc601\uc5ed\uc73c\ub85c \ub098\ub269\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c <code>nrf5340dk_nrf5340_cpuapp_ns<\/code>\uc640 \uac19\uc774 \ub4a4\uc5d0 <strong>_ns<\/strong>\uac00 \ubd99\uc740 \ubcf4\ub4dc \ud0c0\uac9f\uc744 \uc120\ud0dd\ud558\uba74 SDK\uac00 \uc790\ub3d9\uc73c\ub85c \ud30c\ud2f0\uc158\uc744 \ud560\ub2f9\ud569\ub2c8\ub2e4.<\/p>\n<h4>\ud50c\ub798\uc2dc \uba54\ubaa8\ub9ac \uad6c\uc870<\/h4>\n<p>MCUboot\uc640 TF-M\uc774 \ud568\uaed8 \uc2e4\ud589\ub420 \ub54c\uc758 \uc77c\ubc18\uc801\uc778 \uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<ol>\n<li><strong>MCUboot<\/strong>: \ud50c\ub798\uc2dc\uc758 \ub9e8 \ucc98\uc74c\uc5d0 \uc704\uce58 (Secure)<\/li>\n<li><strong>TF-M<\/strong>: MCUboot \ub2e4\uc74c \uc139\uc158\uc5d0 \uc704\uce58 (Secure)<\/li>\n<li><strong>App<\/strong>: TF-M \uc774\ud6c4\uc758 \uc601\uc5ed\uc5d0 \uc704\uce58 (Non-Secure)<\/li>\n<\/ol>\n<hr \/>\n<h3>4. \ucf54\ub4dc \uad6c\ud604 (Main Application)<\/h3>\n<p>TF-M\uc774 \ud65c\uc131\ud654\ub41c \ud658\uacbd\uc5d0\uc11c Non-Secure \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 PSA(Platform Security Architecture) API\ub97c \ud1b5\ud574 \ubcf4\uc548 \uc11c\ube44\uc2a4\uc5d0 \uc811\uadfc\ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-c\">#include &lt;zephyr\/kernel.h&gt;\n#include &lt;psa\/crypto.h&gt;  \/\/ TF-M \ubcf4\uc548 API\n\nint main(void) {\n    psa_status_t status;\n\n    \/\/ PSA Crypto API \ucd08\uae30\ud654\n    status = psa_crypto_init();\n    if (status != PSA_SUCCESS) {\n        printk(&quot;PSA Crypto init failed! (%d)\\n&quot;, status);\n        return -1;\n    }\n\n    printk(&quot;TF-M &amp; MCUboot \uae30\ubc18 \ubcf4\uc548 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc2dc\uc791\ub428\\n&quot;);\n    return 0;\n}\n<\/code><\/pre>\n<hr \/>\n<h3>5. \ube4c\ub4dc \ubc0f \ud50c\ub798\uc2f1 (CLI \uae30\uc900)<\/h3>\n<p>\ube4c\ub4dc \uc2dc \ubc18\ub4dc\uc2dc <strong>Non-Secure \ud0c0\uac9f(<code>_ns<\/code>)<\/strong>\uc744 \uc9c0\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-bash\"># nRF5340 DK \uae30\uc900 \ube4c\ub4dc \uba85\ub839\uc5b4\nwest build -b nrf5340dk_nrf5340_cpuapp_ns -- -DCONFIG_BOOTLOADER_MCUBOOT=y -DCONFIG_TFM_BOARD=y\n\n# \ud50c\ub798\uc2f1 (\uc804\uccb4 \uc774\ubbf8\uc9c0 \ud1b5\ud569 \uae30\ub85d)\nwest flash\n<\/code><\/pre>\n<p>\ube4c\ub4dc\uac00 \uc644\ub8cc\ub418\uba74 <code>build\/zephyr<\/code> \ub514\ub809\ud1a0\ub9ac\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \ud30c\uc77c\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4:<\/p>\n<ul>\n<li><code>merged.hex<\/code>: MCUboot + TF-M + App\uc774 \ubaa8\ub450 \ud569\uccd0\uc9c4 \uc804\uccb4 \uc774\ubbf8\uc9c0<\/li>\n<li><code>app_update.bin<\/code>: MCUboot\ub97c \ud1b5\ud574 \uc5c5\ub370\uc774\ud2b8\ud560 \ub54c \uc0ac\uc6a9\ud558\ub294 \uc11c\uba85\ub41c \uc571 \uc774\ubbf8\uc9c0<\/li>\n<\/ul>\n<hr \/>\n<h3>6. \uc8fc\uc694 \uc8fc\uc758 \uc0ac\ud56d<\/h3>\n<ol>\n<li><strong>\uc774\ubbf8\uc9c0 \uc11c\uba85<\/strong>: MCUboot\ub294 \uc11c\uba85\ub41c \uc774\ubbf8\uc9c0\ub9cc \uc2e4\ud589\ud569\ub2c8\ub2e4. \uac1c\ubc1c \ub2e8\uacc4\uc5d0\uc11c\ub294 \uae30\ubcf8 \ud0a4\ub97c \uc0ac\uc6a9\ud558\uc9c0\ub9cc, \uc591\uc0b0 \uc2dc\uc5d0\ub294 \ubc18\ub4dc\uc2dc <code>west.yml<\/code>\uc774\ub098 \ud504\ub85c\uc81d\ud2b8 \uc124\uc815\uc744 \ud1b5\ud574 \ubcc4\ub3c4\uc758 <code>.pem<\/code> \ud0a4\ub97c \uc9c0\uc815\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<li><strong>\ubcf4\ub4dc \ud0c0\uac9f<\/strong>: \ubc18\ub4dc\uc2dc \ubcf4\ub4dc \uc774\ub984 \ub05d\uc5d0 <code>_ns<\/code> (Non-Secure)\uac00 \ubd99\uc740 \uac83\uc744 \uc120\ud0dd\ud558\uc138\uc694. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 TF-M\uacfc \ucda9\ub3cc\uc774 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>\uc5f0\uc18d\uc131<\/strong>: MCUboot\uac00 TF-M\uc744 \uba3c\uc800 \ubd80\ud305\ud558\uace0, TF-M\uc774 \ucd08\uae30\ud654\ub97c \ub9c8\uce5c \ud6c4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158(NS)\uc73c\ub85c \uc81c\uc5b4\uad8c\uc744 \ub118\uae41\ub2c8\ub2e4.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>nRF Connect SDK nRF Connect for VS Code \ud655\uc7a5\uc5d0\uc11c nRF Connect \ub97c \ucc3e\uc544 \uc124\uce58\ud569\ub2c8\ub2e4. Toolchain, SDK \uc124\uce58 nRF Connect \ud0ed\uc744 \uc120\ud0dd \ud6c4 Toolchain, SDK \ub97c \uac01\uac01 \uc124\uce58\ud569\ub2c8\ub2e4. nRF Connect SDK(NCS)\ub97c \uc0ac\uc6a9\ud558\uc5ec MCUboot(Bootloader)\uc640 TF-M(Trusted Firmware-M)\uc744 \uacb0\ud569\ud558\ub294 \uac83\uc740 \ubcf4\uc548 \ubd80\ud305\uacfc \uc2e0\ub8b0\ud560 \uc218 \uc788\ub294 \uc2e4\ud589 \ud658\uacbd(TEE)\uc744 \uad6c\ucd95\ud558\ub294 \uac00\uc7a5 \ud45c\uc900\uc801\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4. \uc774 \uac00\uc774\ub4dc\ub294 nRF5340 \ub610\ub294 nRF9160\uacfc \uac19\uc774 Arm TrustZone\uc744\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=11254\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-11254","post","type-post","status-publish","format-standard","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/11254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11254"}],"version-history":[{"count":2,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/11254\/revisions"}],"predecessor-version":[{"id":11256,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/11254\/revisions\/11256"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}