STM32 BootLoader 刷新项目 (七) 获取芯片ID-0x53

STM32 BootLoader 刷新项目 (七) 获取芯片ID-0x53

1. 概述

前面的一系列文章中,我们介绍了整体的BootLoader的一个方案,现在我们针对该BootLoader设计多个命令,下面我们来讲述获取芯片ID的命令-0x53。

image-20241006101047973

1.1 芯片Device ID和类型ID描述

STM32F407的Device ID(设备标识符)和Type ID(类型标识符)是用于标识芯片的唯一性信息。Device ID通常是芯片生产时赋予的唯一序列号,而Type ID用于标识芯片的型号和系列。

1.2 作用

  1. 设备识别:在大规模部署或生产中,可以通过Device ID唯一标识每一个设备。
  2. 型号确认:Type ID可以帮助软件确定正在运行的硬件型号,从而加载正确的驱动程序或配置。
  3. 安全验证:在启动过程中,可以通过验证Device ID来确保设备的合法性,增加系统的安全性。

1.3 读取方法

Device ID和Type ID通常存储在STM32F407的特定内存地址中。可以通过直接读取这些内存地址来获取这些信息。

1.4 应用场景

  1. 设备管理:在设备固件升级和维护时确认设备型号。
  2. 软件授权:确保软件只能在特定型号的硬件上运行。
  3. 安全启动:在设备启动时验证芯片类型,增加启动过程的安全性。

2. Device ID和芯片类型ID

STM32F407的Device ID(设备标识符)和Type ID(类型标识符)是用于标识芯片的唯一性信息。Device ID通常是芯片生产时赋予的唯一序列号,而Type ID用于标识芯片的型号和系列。

2.1 Device ID

从STM32F4芯片手册可以看出,Device ID是独一无二的设备标识符,由96位 bit组成。目前了解到的可以作为信息安全加密算法中的加密种子,具有和芯片强绑定的特性。

image-20241011233127290

image-20241011233619880

image-20241011233635142

2.2 Type ID即MCU device ID

Type ID是经常在芯片中使用的,这个主要是表示该芯片的类型,例如我们现在用的STM32F407ZGT6,读取这个芯片Type ID可以读出上面的数值类型,可以方便软件针对该类型的芯片做适配。比如说我们的软件可能是平台软件,支持STM32F1、STM32F4、STM32F7或者其他别家供应商的芯片,我们可以通过读取这个Type ID走平台软件的不同分支,进而将不同芯片的软件做成一个,减少软件分支的管理,这对具有很多项目的公司来说是将本增效和增加可维护性的软件工程方法。

如果大家对软件工程的开发模式比较感兴趣的话,推荐大家看两本书**《人月神话》,《观止-微软创建NT和未来的夺命狂奔》**。人月神话大家应该都听说过,为什么叫这个名字呢?其实是一种比喻,一个人干十个月的话,那反之10个人能否一个月干完?在软件这种繁琐复杂的工程中简直如同神话一般,加人战术在软件工程中似乎失效了,大家可以感兴趣的话可以看这本书,讲述作者在IBM开发大型软件中遇到的问题和解决的方法。另外一本书我详细介绍一下《观止:微软创建NT和未来的夺命狂奔》是一本揭示微软公司如何通过Windows NT重新定义计算标准的书籍。它详细讲述了在比尔·盖茨的领导下,微软不断追求技术创新的故事。书中特别强调了大卫·卡特勒这位传奇程序员在NT开发中的重要作用,以及他如何带领团队克服重重困难,最终完成这一里程碑式的项目。这本书不仅是对微软历史的记录,也是对软件开发过程中挑战和胜利的真实描绘。大家有兴趣的话可以阅读这两本书。

下面我们来讲述Type ID,通过读取地址0xE004200,则可以获得该芯片的Mcu Device ID,由下图可以看到,芯片STM32F405xx/07xx and STM32F415xx/17xx的ID为 0x413STM32F42xxx and STM32F43xxx芯片ID为0x419

image-20241012073537103

image-20241012073728973

3. 代码实现

下面是我们获取的命令结构。上位机向MCU发送6 Byte的数据,第一个Byte为发送的数据长度,第二位为命令,第3-6 Byte发送的是前2个Byte的CRC校验。

image-20241006101047973

通过按键进入到BootLoader后,软件会一直在bootloader_uart_read_data()函数中循环,当上位机发送了相应的指令0x53后,即case BL_GET_CID,则会进入到bootloader_handle_getcid_cmd(bl_rx_buffer)函数,读取芯片ID地址0xE004200并返回MCU Device ID。

void  bootloader_uart_read_data(void)
{uint8_t rcv_len=0;printmsg_Host("BL_DEBUG_MSG: Receive CMD\n\r");while (1){HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);memset(bl_rx_buffer, 0, 200);//here we will read and decode the commands coming from host//first read only one byte from the host , which is the "length" field of the command packetHAL_UART_Receive(C_UART,bl_rx_buffer,1,HAL_MAX_DELAY);rcv_len= bl_rx_buffer[0];HAL_UART_Receive(C_UART,&bl_rx_buffer[1],rcv_len,HAL_MAX_DELAY);switch(bl_rx_buffer[1]){case BL_GET_VER:bootloader_handle_getver_cmd(bl_rx_buffer);break;case BL_GET_HELP:bootloader_handle_gethelp_cmd(bl_rx_buffer);break;case BL_GET_CID:bootloader_handle_getcid_cmd(bl_rx_buffer);break;default:printmsg("BL_DEBUG_MSG:Invalid command code received from host \n");break;}}
}

下面是获取芯片ID的代码,地址为0xE004200。

//Read the chip identifier or device Identifier
uint16_t get_mcu_chip_id(void)
{
/*The STM32F407xx MCUs integrate an MCU ID code. This ID identifies the ST MCU partnumberand the die revision. It is part of the DBG_MCU component and is mapped on theexternal PPB bus (see Section 38.6.1 on page 1702). This code is accessible using theJTAG debug pCat.2ort (4 to 5 pins) or the SW debug port (two pins) or by the user software.It is even accessible while the MCU is under system reset. */uint16_t cid;cid = (uint16_t)(DBGMCU->IDCODE) & 0x0FFF;return  cid;
}

4. 功能实现

上位机是用Python脚本写的,后续所有BootLoader文章更新完后会将代码开源出来。

image-20241012075742652

我的电脑是COM19,输入后上位机与开发版连接成功

image-20241012075910424

输入3,则下位机回复0x413即为STM32F407的芯片MCU Device ID。

image-20241012080107597

至此,STM32 BootLoader 刷新项目 (七) 获取芯片ID-0x53完成。

5. 系列文章

STM32 BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建

STM32 BootLoader 刷新项目 (二) 方案介绍

STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示

STM32 BootLoader 刷新项目 (四) 通信协议

STM32 BootLoader 刷新项目 (五) 获取软件版本号-命令0x51

STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM和GC案例详解

接上文JVM环境配置说明:上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控),设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat&#xff0…

sklearn机器学习实战——支持向量机四种核函数分类任务全过程(附完整代码和结果图)

sklearn机器学习实战——支持向量机四种核函数分类任务全过程(附完整代码和结果图) 关于作者 作者:小白熊 作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目…

vue 解决高德地图Uncaught Error: Invalid Object: Pixel(NaN, NaN)

有点啰嗦,可以直接跳到最后看解决方法。 问题排查过程 原因起始于一个新需求:在编辑列表信息时需要修改设备位置。 按照文档一番操作,发现完美需求解决了。后续测试的时候就发现浏览器报错Uncaught Error: Invalid Object: Pixel(NaN, NaN)…

【2024最新】基于springboot+vue的人职匹配推荐系统lw+ppt

作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…

【课程设计/毕业设计】Java家政预约管理系统源码+开发文档

项目介绍 一直想做一款家政管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以咨询留言。 在线体验 http://jiazheng.gitapp.cn/ 源码地址 https://github.com/geeeeeeeek/java_jiazh…

Mycat引领MySQL分布式部署新纪元:性能与扩展性的双重飞跃

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

使用 Helsinki-NLP 中英文翻译本地部署 - python 实现

通过 Helsinki-NLP 本地部署中英文翻译功能。该开源模型性价比相对高,资源占用少,对于翻译要求不高的应用场景可以使用,比如单词,简单句式的中英文翻译。 该示例使用的模型下载地址:【免费】Helsinki-NLP中英文翻译本…

Java程序打包成jar包

步骤1 打开项目结构 步骤2 配置工件 选择你要打包的模块选择主类(程序的主入口main类)提取到目标会把库文件的jar包打包到目标,一般选择这个,更方便在不同电脑上运行 步骤3 构建并生成jar包 最后,在对应的out/artifacts文件夹中找到jar包,在终端输入java -jar xxxx.jar就可以正…

Sentinel 1.80(CVE-2021-44139)

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 Report a Sentinel Security Vulnerability …

“重阳敬老情,爱心暖夕阳”__郑光荣敬老慰问

“重阳敬老情,爱心暖夕阳”__郑光荣敬老慰问 2024年的重阳节,北京正明圣达叫卖团和窦志联的志愿者们来到润龄养老院和老人一起共庆 重阳节、共同带来、 歌、 舞、 演讲、 尤其是(北京正明圣达叫卖团)非遗项目传承人 郑光荣带来…

爬虫prc技术----小红书爬取解决xs

知识星球:知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具知识星球是创作者连接铁杆粉丝,实现知识变现的工具。任何从事创作或艺术的人,例如艺术家、工匠、教师、学术研究、科普等,只要能获得一…

【JVM】如何判断对象是否可以被回收

引用计数法: 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。 优点:实现简单,判…

5G NR BWP 简介

文章目录 BWP介绍BWP 分类BWP相关总结 BWP介绍 5G NR 系统带宽比4G LTE 大了很多,4G LTE 最大支持带宽为20MHz, 而5G NR 的FR1 最大支持带宽为100MH在, FR2 最大支持带宽为 400MH在。带宽越大,意味了终端功耗越多。为了减少终端的…

Nginx的正向与反向代理

一、Nginx简介 1. 什么是Nginx Nginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx是由俄罗斯的Igor Sysoev(伊戈尔赛索耶夫)为解决C10k问题(即…

下一代安全:融合网络和物理策略以实现最佳保护

在当今快速发展的技术环境中,网络和物理安全融合变得比以往任何时候都更加重要。随着物联网 (IoT) 和工业物联网 (IIoT) 的兴起,组织在保护数字和物理资产方面面临着独特的挑战。 本文探讨了安全融合的概念、说明其重要性的实际事件以及整合网络和物理安…

RNN心脏病预测

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 前期准备 1.数据导入 import pandas as pd from keras.optimizers import Adam from matplotlib import pyplot as plt from sklearn.model_selection import train_test_split from sklearn.p…

构建高效互通的数字桥梁:香港服务器托管指南

在当今全球化日益加深的商业环境中,出海企业面临着前所未有的机遇与挑战。为了确保国内外业务的顺畅运行,特别是在实现国内外数据高效互通、低延迟访问方面,选择一家合适的香港服务器机房进行托管成为了许多企业的关键决策之一。香港&#xf…

网络协议——IP协议

一、IPv4 1、IPv4:TCP/IP协议规定,IPv4地址使用32位的二进制表示,也就是4个字节,为了方便使用,IPv4地址被写成十进制形式,中间用”.”分开。 【点分十进制表示法】 2、IPv4地址分类 2.1 私有地址在互联网…

基于DSP+ARM+FPGA的电能质量分析仪的软件设计

软件设计是电能质量设备的核心内容,上述章节详细介绍了电能质量参数的 算法,并且通过仿真实验进行了验证,本章将结合现代电能质量监测设备需求实 现算法在实际电网中应用。根据设计的电能质量分析仪的需求分析,进行总体的 软件…

英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏

英特尔终于解决了台式机 CPU 发热和耗电的问题。英特尔的新旗舰 Core Ultra 200S 系列处理器将于 10 月 24 日上市,该系列专注于每瓦性能,比之前的第 14 代芯片运行更凉爽、更高效。这些代号为 Arrow Lake S 的处理器也是英特尔首款内置 NPU(…