stm32f1xx中的几个ID

一、ID的作用

在物联网系统中产品的ID不可或缺,产品组网后就需要一个身份去让网里其它的设备去识别自己;
ID表示的含义可能多种多样,如一个生产批次中的产品编号、mac地址、设备条形码等,可能是设备通信中用于表示自己身份的编号,也可能是产品外壳的一个硬件层面的编号;
ID编码的规则也多种多样,只要在一个系统里彼此都认可的一个编号规则即可,最好能考虑安全性;
stm32f1xx中有几个自身的ID可以用于一些场景,下面做下总结;

二、ID的说明

产品唯一身份标识

【1】位于基地址 0x1FFFF7E8,只读不可修改,每个芯片是唯一的;
【2】一共96bit,一共占12个字节,分四组
0x1FFFF7E8~0x1FFFF7E9 , 0 ~ 15bit为一组, uint16_t id_0 = (uint16_t *)(0x1FFFF7E8);
0x1FFFF7EA~0x1FFFF7EB,16 ~ 31bit为一组, uint16_t id_1 = (uint16_t *)( 0x1FFFF7EA);
0x1FFFF7EC~0x1FFFF7EF,32 ~ 63bit为一组, uint32_t id_2 = (uint32_t *)(0x1FFFF7EC);
0x1FFFF7F0~0x1FFFF7F3,64 ~ 95bit为一组, uint32_t id_3 = (uint32_t *)(0x1FFFF7F0);

实际使用中可以将四组进行一些操作,如分别取hash,结果再取hash等,获得方便存储的、不易重复的32位ID作为一种编码;

MCU ID code

【1】虽然称作MCU ID 但不是每个芯片都有一个不一样的这个ID,确切表示是一种 批次、容量的ID编号;
【2】手册中定义为硅片版本和容量编码;
【3】基地址为0xE0042000, 占用四个字节;
uint32_t mcu_id = (uint32_t *)(0xE0042000);
【4】含义
在这里插入图片描述

可以结合寄存器闪存容量寄存器0x1FFFF7E0和小、中、大容量对应存储大小定义可以校验确定mcu id 信息;
【5】mcu id虽然对每个芯片不是唯一的,但是可以判断是不是一类芯片,比如项目中有pin to pin芯片替换但是容量不一样需要在软件上做些适配判断时,可以考虑使用mcu id 的信息;

JTAG ID

【1】ARM Cortex-M3的TAP有一个JTAG ID编码。这个ID编码是ARM默认的,且没有被修改过,只能通过JTAG调试口访问。此编码是0x3BA00477(对应于Cortex-M3 r1p1)
【2】实际软件编程中代码无法使用;

JEDEC-106 ID

【1】ARM 的 Cortex-M3 有 一 个 JEDEC-106 ID 编 码 。 它 位 于 映 射 到 内 部 PPB 总 线 地 址 为0xE00FF000_0xE00FFFFF的4KB ROM表中
【2】获取方式

uint16_t Get_JEDEC_ID(void)
{
	if( *( uint8_t *)( 0xE00FFFE8 ) & 0x08 )
	{
		return  (( *( uint8_t *)( 0xE00FFFD0 ) & 0x0F ) << 8 ) |   
		 ( ( *( uint8_t *)( 0xE00FFFE4 ) & 0xFF ) >> 3  ) 
		  |     ( ( *( uint8_t *)( 0xE00FFFE8 ) & 0x07 ) << 5 ) + 1 ;
	}
	return  0;
}

【3】此id也不是每个芯片唯一的,类似mcu id 能区分一类芯片,实际根据芯片的选型实测验证差异;

三、自定义ID

实际中可以自定义编码将ID存储到EEPROM或者芯片特定的flash地址,在产线生产时进行写入;
参考如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值