【NCS随笔】nRF54L15使用UICR寄存器保存数据

电子说

1.4w人已加入

描述

nRF54L15使用UICR寄存器保存数据
本文章主要是讲解如何使用nRF54L15的UICR寄存器保存一些基础数据

一、UICR寄存器的说明

UICR(用户信息配置寄存器)**是非易失性存储器(NVM)寄存器,用于配置用户特定的设置

注意所有 UICR 寄存器都具有 RW1 保护,只能写入一次,需要再写的话必须要擦除Erase All

默认复位值为0xFFFFFFFF

这个是是寄存器的说明:nRF54的UICR寄存器说明

二、如何使用

我们可以在生产的时候使用J-LINK烧录工具搭配nrfutil来写入寄存器,再在软件上面读取该寄存器然后打印

举例如下,我使用UCIR寄存器保存MAC地址并且通过读取UICR寄存器设置MAC地址

2.1 读取UICR寄存器并且配置MAC地址

注意这个函数要在bt_enable前调用


#include < hal/nrf_uicr.h >
#include < sdc_hci_vs.h >
void read_uicr_and_set_mac_address(void)
{
int ret;

uint8_t mac_address[6];
// nRF54L15的UICR基地址为0x00FFD000
// OTP寄存器偏移为0x500
volatile uint32_t *uicr_otp_base = (volatile uint32_t *)(0x00FFD000 + 0x500);

// 读取前两个OTP寄存器(假设MAC地址存储在OTP[0]和OTP[1])
uint32_t otp0 = uicr_otp_base[0];  // OTP[0]
uint32_t otp1 = uicr_otp_base[1];  // OTP[1]


// 判断两个寄存器是否都被设置
	if (otp0 != 0xFFFFFFFF && otp1 != 0xFFFFFFFF) {
		
	    mac_address[0] = (otp0 > > 0) & 0xFF;
		mac_address[1] = (otp0 > > 8) & 0xFF;
		mac_address[2] = (otp0 > > 16) & 0xFF;
		mac_address[3] = (otp0 > > 24) & 0xFF;
		mac_address[4] = (otp1 > > 0) & 0xFF;
		mac_address[5] = (otp1 > > 8) & 0xFF;

		sdc_hci_cmd_vs_zephyr_write_bd_addr_t bd_addr_cmd = {
		.bd_addr = {mac_address[0],mac_address[1],mac_address[2],mac_address[3],mac_address[4],mac_address[5]},
		};

	ret = sdc_hci_cmd_vs_zephyr_write_bd_addr(&bd_addr_cmd);

	} else {
		printk("OTP registers not fully programmed, using default MACn");
		// 使用默认MAC地址或其他处理
	}

printk("MAC Address from UICR: %02X:%02X:%02X:%02X:%02X:%02Xn",
       mac_address[0], mac_address[1], mac_address[2],
       mac_address[3], mac_address[4], mac_address[5]);

}

#### 2.2通过nrfutil写入UICR寄存器

可以使用如下命令,如果有不知道如何安装nrfutil工具的,可以看我之前的博客[【NCS随笔】nRF54芯片怎么烧录程序&nrfutil的安装使用](https://tedlee.blog.csdn.net/article/details/147622349?spm=1001.2014.3001.5502)

```C

nrfutil device recover //擦除设备

nrfutil device program --firmware merged.hex //烧录固件

nrfutil device x-write --address 0x00FFD500 --value 0xddccbbaa //写入UICR寄存器0x00FFD500

nrfutil device x-write --address 0x00FFD504 --value 0x8877ffee //写入UICR寄存器0x00FFD504

nrfutil device reset //复位设备

nrfutil device protection-set All //设备读保护

#### 2.3测试

使用nRF54L15DK,和peripheral_uart例程

![在这里插入图片描述](https://file1.elecfans.com/web3/M00/3F/1D/wKgZPGkoFSmAVzLtAAAqH_nVV20713.png)

![在这里插入图片描述](https://file1.elecfans.com/web3/M00/3F/1D/wKgZPGkoFSmAZmPeAAQcQyFae9E358.png)

###### 你的点赞、收藏和评论是对我最大的支持,有问题多多指教,如果有需要Nordic开发板、Nordic的芯片以及Nordic技术支持的可以在个人资料获取我的联系方式,感谢读者支持!

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分