SEGGER J-Flash烧写SN号(serial number)的两种方式
stm32软件开发调试完成之后,需要发布产品进行批量生产。每一个产品应该有一个唯一的设备编号,我们可以把设备编号与软件程序一起,写入stm32的flash中进行保存,在软件中读取到设备编号使用。这时候我们就需要使用到J-Flash的Serial number(序列号,简称SN)功能。
综述
打开J-Flash,Help->J-Flash User Guide,打开J-Flash用户手册,搜索“serial number”,可以找到对应介绍章节(不同版本章节可能不同)。
1. 编程连续的序列号。
Address:编程序列号的flash地址,十六进制格式;
Len:序列号的长度,十进制,支持1-4字节;
Next SN:下一个序列号,十进制,区分正负;
Increment:增量,每次写入之后SN增加的大小,十进制,可正可负;
开始测试: 先向flash中写入SN,之后读出flash,查看SN(J-Flash下载程序请参照SEGGER J-Flash 烧写stm32程序)。
test0:在0x08050000写入序列号123456,递增1;
结果:写入正确,Next SN增加Increment变为123457
test1:写入在0x08050000写入序列号2147483647(0x7FFFFFFF),递增1;
结果:2147483647写入成功,Next SN加1后变为了-2147483648???
其实,在有符号四字节的数据里,0x7FFFFFFF再增1就会符号溢出,0x80000000表示有符号的-2147483648。然而Next SN输入框里面,最多输入10位数字,包括正负号,所以我们最大可填入的SN号为7FFFFFFF。当然我们程序里面解析的时候,可以将4字节当做无符号整型,可以获得最大2^32的SN号值。实际使用,也可以填入负数的SN号,比如-1,其写入flash的值为0xFFFFFFFF。
Next SN输入框中,可填入负数最小为-999999999(0xC4653601),可填入正数最大9999999999,但是写入的会是2147483647(0x7FFFFFFF)。
test2:修改文件写入序列号
事实上,J-Flash写入的SN号保存在一个文本文件里,我们可以通过直接修改这个文件对要写入的SN号进行修改,在写入非连续的SN号时,该方式比较方便。SN号保存文件路径与工程文件路径相同,使用 Flie->Open project… 打开的一般就是当前打开的工程的路径,在资源管理器中找到该路径即可看到与工程名同名的序列号文件。
文本输入长度没有限制,十进制格式,可以输入负数,比如-2147483648,写入结果应该是0x80000000。
注意:修改文本文件之后,记得Ctrl+S保存一下,否则不生效。如果文本内容格式错误的话,将会写入0x00000000;正数溢出写入0x7FFFFFFF;负数溢出写入0x80000000。
2. 从序列号列表文件中编程序列号
test2中使用文本文件写入序列号,保存序列号的文本文件名称为 < JFlashProjectName >_Serial.txt,而需要使用列表写入的话,则需要在工程文件目录下创建一个名称为 < JFlashProjectName >_SNList.txt的文件,在其中填入要写入的序列号。每行为一个序列号,每个序列号为4字节十六进制数(不带0x),文件的排列的字节序就是写入flash的字节序。
在工程文件目录下有SNList文件时,优先使用SNList文件,忽略Serial文件。该方式需要配合Program serial number中的参数使用。
Address:编程序列号的flash地址,十六进制格式;
Len:序列号的长度,十进制,支持1-4字节;
Next SN:列表行号,十进制非负数,从0开始,0代表列表第一行;
Increment:增量,每次写入之后列表行号增加的大小,十进制,可正可负;
test3:使用序列号列表文件写入序列号
列表写入模式与直接写入区别不大,如果不满4字节,在后面自动补0,超出则自动截断,格式错误则写入0x00000000,行数超出则不写入。
3. 读取flash函数
#define SN_ADDR (uint32_t)0x08050000/*** @brief 读取指定地址的字(32位数据)* @param addr 读地址* @return uint32_t 读取的数据*/
uint32_t StmFlashReadWord(uint32_t addr)
{return *(uint32_t *)addr;
}/*** @brief 从指定地址开始读出指定长度的数据,每次读出一个字(32位)* @param readAddr 起始地址* @param pbuf 数据指针* @param readNum 读出字(32位)数* @return void*/
void StmFlashRead(uint32_t readAddr, uint32_t *pbuf, uint32_t readNum)
{uint32_t i;for (i = 0; i < readNum; i++) {pbuf[i] = StmFlashReadWord(readAddr);readAddr += 4;}
}
SEGGER J-Flash烧写SN号(serial number)的两种方式相关推荐
- nand flash 烧写
有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot-2009.03差别不大,只不过这个u-boot-2009.03是从TI的网站上下载 ...
- 《iBoard 电子学堂》SPI Flash烧写方法
<iBoard 电子学堂>通过外部串行FLASH 存储完整的汉字字库和开机画面:本文介绍通过软件 iBoard ToolBox 利用USB (标准 HID 驱动)接口,烧写汉字字库以及开机 ...
- 怎么重写MDK(KEIL)Flash烧写程序
MDK提供了Flash烧写程序接口,位于文件夹C:\Keil\ARM\Flash (不同的安装目录参考相对路径).KEIL提供了各种的demo,打开_Template文件夹 有个NewDevice的工 ...
- FLASH烧写(简单概括)
第一次烧写flash,烧写成功还是有些兴奋. 昨天给今天定的任务就是弄会如何烧写flash,今天算是完成任务了. 程序在ram里仿真成功后,就要烧到flash里. 首先要修改cmd文件. MEMORY ...
- 理解ESP32 Flash烧写的DOUT/DIO/QOUT/QIO配置
一.目的 刚接触ESP32开发的同学如果不是使用Ubuntu进行烧写的话,可能在使用乐鑫的Flash烧写工具时可能会有这样的疑问 Flash工具下载地址 工具 | 乐鑫科技 (espressif.co ...
- STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程
STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt ...
- 嵌入式系统 - Nand Flash 烧写问题排查
问题背景 板卡:SOM-TL437x-A1 事件:生产了 410 PCS 需要测试.烧写系统,部分板卡烧写出货系统异常. 现象:其中 78 PCS 由于 BTB 问题未测试.332 PCS 功能测试后 ...
- F2812 Flash烧写总结
<!--一个博主专栏付费入口结束--><link rel="stylesheet" href="https://csdnimg.cn/release/p ...
- php 公众号打开小程序,微信公众号图文消息新增两种进入小程序的方式
终于不再是凌晨--就在刚刚,微信宣布小程序的能力再次升级.除了添加小程序卡片外,公众号图文消息新增两种进入小程序的方式:支持通过蓝色文字链接或图片链接跳转到小程序. 1.推送形式更多样 公众号运营者在 ...
- 说一个奇奇怪怪的知识点,uniapp,公众号页面,uni.chooseImage只能相机或者相册选,不能同时使用两种方式sourceType:['camera','album']...
由于自身认为这是一个小功能,于是没怎么细心吧 然后客户之前需要的是只能拍照上传,测试截图看到是有两种方式可选择的 于是我改为了sourceType:['camera''] 一种方式上传.但是另一个选择 ...
最新文章
- 虚拟中央处理器新星软机公司即将被收购
- 前端iframe 能指定本地网页吗_微前端的技术拆分方式
- Boost:BOOST_ASSERT_IS_VOID的测试程序
- 培养有见识的孩子,这6部适合孩子的纪录片,在家也能涨知识!
- 内连接、左外连接、右外连接、交叉连接区别
- Qt5.4生成安装包过程
- 工业大数据分析平台有哪些价值
- cpu使用率偏高如何排查
- BigInteger类
- Qt文档阅读笔记-QCustom3DLabel使用及Q3DSurface基本信号
- 【分享】豆瓣上排名top100的书籍
- proteus仿真常见报错信息
- 【Linux】Linux操作系统简单介绍 ----vim编辑器
- python读取docx中表格 图片_Python-docx 读写 Word 文档:插入图片、表格,设置表格样式,章节,页眉页脚等...
- 软件方法(下)分析和设计第8章连载[20210816更新]分析 之 分析类图——知识篇
- VBS脚本实现宽带上网加网页认证上网双验证
- 机器学习之PQ量化算法
- Expected value but found invalid token at character 1stack traceback:coroutine 0: [C]: in function
- 一些实用的安卓UI设计工具
- 谷歌PR权重劫持的原理与方法介绍
热门文章
- Matlab打开prn文件,打印prn文件的方法和技巧,.prn用什么软件打开?
- 计算机ws2_32dll丢失,电脑显示计算机中丢失ws2-32.dll,怎么办
- AB.RSLogix500软件 下载分享
- masm5.0与masm32
- 怎么查看c语言库文件,C语言函数库和文件
- isight2019安装教程_DS SIMULIA Suite 2019 (Abaqus/Isight/Fe-safe/Tosca) Win/Linux x64
- 黑马程序员—怎么去黑马?吃住问题解答
- C# 反编译-Reflector 反混淆-De4Dot 修改dll/exe代码-reflexil
- 哔哩哔哩用户需求分析报告
- CSDN账号绑定github(极简办法)