在开发时可能需要回读保护功能,在产品出厂后这个功能可以让你的代码更加安全,无法用SEGGER或者其余方式读取你的代码HEX文件,也就是禁用SWD下载接口。但是SWD锁住了,还想使用(从新下载代码)也是可以解锁的,但是注意,当你解锁时,会直接擦除Flash中的代码,也防止代码被强制读取。

开发准备:nrf52840或者nrf52832(原理一样)、SDK包例程或者程序一个

功能实现:

想要实现禁用SWD的功能,一种方式在程序中对UICR APPROTECT寄存器进行设置,就可以进行禁用,当然也可以启用,如果没有设置解除机制这个回调保护,那么SWD不再可访问芯片,需要访问既产擦除FLash。

一、禁用

1.1.1、在芯片手册中有对该寄存器有这样的描述:

由此可知,在该寄存器低8位写入0x00,即可启用SWD端口的读保护。默认为0xFF,不启用。

1.1.2、软件设置如下:先任意打开一个程序,在程序中添加如下代码

头文件添加:

#include "nrf_nvmc.h"

然后添加头文件和.c文件。

在添加如下程序

 int SWD_protect(void)
{
nrf_delay_ms(1000);
if (NRF_UICR->APPROTECT == 0xFFFFFFFF)
{
nrf_nvmc_write_word((uint32_t)&(NRF_UICR->APPROTECT), 0xFFFFFF00);
NVIC_SystemReset();
}
}

并在main()函数开始调用,程序运行后既不能在访问SWD接口,除非有相应的解除机制,解除保护。

1.1.3、下载程序后我们使用segger(j_flash)去读我们的芯片,当点击连接时,会有一下提示

显示设备已经被保护,无法连接,是否需要解除保护?说明设备已经被保护了,无法进行读取,当我们点击Yes后,会解除保护,但是Flash中的程序也被擦除了。

点击yes后读出来Flash如下,全为FF,说明程序已经擦除

1.2 第二种方式是直接更改HEX文件的相应位

由芯片手册,确定APPROTECT的地址为0x208,UICR的基址为0x10001000

首先需要准备一份HEX固件,这份固件最好是烧写到芯片中,然后利用j-flash读出后在0x10001208为把FF修改为00,就得到了一份禁用SWD的HEX文件,可以进行烧录。为什么不直接用keil编译的HEX做更改,因为该HEX是没有这个地址的。

如下是没有在程序中禁用下载相关代码的程序,我下载后可以用segger的j_flash连接,并读出程序,地址0x10001208为FF

直接更改该位的值为00,并回车保存然后从新下载程序

然后运行程序

会提示CPU 运行失败。

我们再次点击连接会有如下提示,说明禁用成功

2、解除禁用

如果程序中没有做处理去修改寄存器的值为FF,那么我们可以用两种方式去解除禁用,解除后程序会被擦除。

2.1、segger(j-flash)

这种方式只需要安装的有segger,根据芯片型号选择好后,点击连接,会弹出一个提示框,点击Yes即可。

2.2、利用官方工具nrfjprog进行

这种方式请确认你安装的有nrfjprog,安装方式请根据官方中文博客进行安装:连接如下: Nordic nRF51/nRF52开发环境搭建 - iini - 博客园 (cnblogs.com)

2.2.1、通Windows命令窗口,(win+R调出在其中输入cmd)

在打开的命令框中输入nrfjprog,并加回车后有如图所示界面,说明你正确安装了nrfjprog,并加入了环境变量

输入nrfjprog --recover回车有如下说明解除成功。

nordic——nrf52系列SWD设置回读保护的更多相关文章

  1. nRF52系列来袭,Nordic的低功耗蓝牙方案大有可为

      坐落在北欧的挪威不像他的邻居芬兰那样,可以先后依靠NOKIA和愤怒的小鸟在世界科技界享有盛名.在一般人看来,挪威除了一个逐渐式微的Opera浏览器以外,并没有更多拿得出手的科技企业.而事实证明这只 ...

  2. nRF52系列——nRF52832来袭

    nRF52系列——nRF52832来袭 Nordic凭借着在无线技术的数十年深耕,推出第一个μBlue芯片-- nRF8001.其低功耗等特性在当时吸引了无数厂商的目光,并将这产品应用到多个领域,再之 ...

  3. STM32-对芯片启动读保护,实现加密(详解)

    STM32可以对存储在flash上的程序进行读保护. 启动读保护后,用户就不能再读写程序了. 所以,在烧写程序之前,需要程序调用关闭读保护.关闭读保护后,会自动清空flash上的程序 头文件位于:#i ...

  4. NRF52840相对于之前的NRF52系列、NRF51系列增加了什么功能

    现在广大客户的蓝牙采用NORDIC越来越多了,NORDIC一直在不断进行技术改进更好的满足市场需求 推出了新款NRF52840.NRF52840更为先进些,支持的功能也多点,比如IEEE802.15. ...

  5. SSM保姆级从创建项目到使用,包括事务和设置回滚

    1. 简介 Spring 和 Mybaits整合 2. 创建项目 负责将代理类记性扫描,扫描的是Mapper接口所在的包,这个是mybatis提供的,所以会去找SqlSessionFactory 2. ...

  6. Maven入门系列(二)--设置中央仓库的方法

    原文地址:http://www.codeweblog.com/maven入门系列-二-设置中央仓库的方法/ Maven仓库放在我的文档里好吗?当然不好,重装一次电脑,意味着一切jar都要重新下载和发布 ...

  7. 17.Quartus 怎么回读CPLD里面的东西

    可以使用Quartus® II Programmer的“Examine”特性回读编程目标文件(.POF)是CPLD不是FPGA 先用auto检测加没加加密位,然后执行ex,然后save,Examine ...

  8. CDN设置回源host的意义

    CDN设置回源host的意义 如果CDN后端用户的的源站web服务上没有绑定加速域名,只绑定了其他域名,未限制域名访问(比如通过服务器IP可以访问到默认网站),可以在CDN控制台填写回源host,这样 ...

  9. centos7.6+samba+设置可读可写不可删权限

    samba原文 https://www.cnblogs.com/muscleape/p/6385583.html 设置可读可写不可删权限原文: https://blog.51cto.com/guanh ...

随机推荐

  1. MySQL 数据操纵语句

    插入 插入多个字段 insert into grade (`name`) values ('大一'),('大二'),('大三'),('大四'); 修改 设置时间为当前时间 update `studen ...

  2. virtual box 安装虚拟机如何全屏

    最近由于要进行微信小程序的开发.可恶的腾讯狗没有提供linux版的开发工具!不得以安装虚拟机!暗号虚拟机后发现win10的界面实在是太小,于是乎去解决这个问题!其实很简单,一般来是说直接点虚拟机面板上 ...

  3. 微服务性能分析|Pyroscope 在 Rainbond 上的实践分享

    随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈.CPU利用率高.或内存泄漏等问题.要找到问题的根本原因,我们通常都会通过日志.进程再结合代码去判断根 ...

  4. Excel 运算符(四):引用运算符

    引用运算符用于将单元格区域合并运算,包括:冒号.,逗号. 空格. : 运算 :运算符用于定义一个连续的数据区域,例如"A1:B3",表示从 A1 到 B3 的 6 个单元格. 并集 ...

  5. 教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式

    目录 1. 你应该先知道的基础知识 1.1. CesiumJS 的库构成 1.2. 选择 Vite3 和 pnpm 的理由 1.3. 使用 External 模式引入静态库 - 不打包静态库 1.4. ...

  6. [NOI P模拟赛] 传统艺能(子序列自动机、矩阵乘法,线段树)

    (2:00)OID:"完了,蓝屏了!"(代码全消失) 众人欢呼 OID:开机,"原题测试--" (30min later)OID 开始传统艺能: " ...

  7. JS数据结构之 Map

    JS数据结构之 Map Map介绍 Map(映射)是ES6引入的一种数据结构.这是一种存储键值对列表很方便的方法,类似于其他编程语言的哈希表. HashMap(哈希表),也叫做散列表.是根据关键码值 ...

  8. 2020年12月-第01阶段-前端基础-HTML CSS 项目阶段(二)

    品优购项目(二) 1. 品优购首页布局 命名集合: 名称 说明 快捷导航栏 shortcut 头部 header 标志 logo 购物车 shopcar 搜索 search 热点词 hotwrods ...

  9. ProxySQL SQL 注入引擎

    ProxySQL 2.0.9 引入了 libsqlinjection 作为识别可能的 SQL 注入攻击的机制. 启用 S​​QL 注入检测 要启用 SQL 注入检测,只需要启用变量 mysql-aut ...

  10. MinIO对接k8s使用

    文档地址:https://github.com/minio/operator/blob/master/README.md https://docs.min.io/minio/k8s/deploymen ...