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)的两种方式相关推荐

  1. nand flash 烧写

    有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot-2009.03差别不大,只不过这个u-boot-2009.03是从TI的网站上下载 ...

  2. 《iBoard 电子学堂》SPI Flash烧写方法

    <iBoard 电子学堂>通过外部串行FLASH 存储完整的汉字字库和开机画面:本文介绍通过软件 iBoard ToolBox 利用USB (标准 HID 驱动)接口,烧写汉字字库以及开机 ...

  3. 怎么重写MDK(KEIL)Flash烧写程序

    MDK提供了Flash烧写程序接口,位于文件夹C:\Keil\ARM\Flash (不同的安装目录参考相对路径).KEIL提供了各种的demo,打开_Template文件夹 有个NewDevice的工 ...

  4. FLASH烧写(简单概括)

    第一次烧写flash,烧写成功还是有些兴奋. 昨天给今天定的任务就是弄会如何烧写flash,今天算是完成任务了. 程序在ram里仿真成功后,就要烧到flash里. 首先要修改cmd文件. MEMORY ...

  5. 理解ESP32 Flash烧写的DOUT/DIO/QOUT/QIO配置

    一.目的 刚接触ESP32开发的同学如果不是使用Ubuntu进行烧写的话,可能在使用乐鑫的Flash烧写工具时可能会有这样的疑问 Flash工具下载地址 工具 | 乐鑫科技 (espressif.co ...

  6. STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程

    STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt ...

  7. 嵌入式系统 - Nand Flash 烧写问题排查

    问题背景 板卡:SOM-TL437x-A1 事件:生产了 410 PCS 需要测试.烧写系统,部分板卡烧写出货系统异常. 现象:其中 78 PCS 由于 BTB 问题未测试.332 PCS 功能测试后 ...

  8. F2812 Flash烧写总结

    <!--一个博主专栏付费入口结束--><link rel="stylesheet" href="https://csdnimg.cn/release/p ...

  9. php 公众号打开小程序,微信公众号图文消息新增两种进入小程序的方式

    终于不再是凌晨--就在刚刚,微信宣布小程序的能力再次升级.除了添加小程序卡片外,公众号图文消息新增两种进入小程序的方式:支持通过蓝色文字链接或图片链接跳转到小程序. 1.推送形式更多样 公众号运营者在 ...

  10. 说一个奇奇怪怪的知识点,uniapp,公众号页面,uni.chooseImage只能相机或者相册选,不能同时使用两种方式sourceType:['camera','album']...

    由于自身认为这是一个小功能,于是没怎么细心吧 然后客户之前需要的是只能拍照上传,测试截图看到是有两种方式可选择的 于是我改为了sourceType:['camera''] 一种方式上传.但是另一个选择 ...

最新文章

  1. 虚拟中央处理器新星软机公司即将被收购
  2. 前端iframe 能指定本地网页吗_微前端的技术拆分方式
  3. Boost:BOOST_ASSERT_IS_VOID的测试程序
  4. 培养有见识的孩子,这6部适合孩子的纪录片,在家也能涨知识!
  5. 内连接、左外连接、右外连接、交叉连接区别
  6. Qt5.4生成安装包过程
  7. 工业大数据分析平台有哪些价值
  8. cpu使用率偏高如何排查
  9. BigInteger类
  10. Qt文档阅读笔记-QCustom3DLabel使用及Q3DSurface基本信号
  11. 【分享】豆瓣上排名top100的书籍
  12. proteus仿真常见报错信息
  13. 【Linux】Linux操作系统简单介绍 ----vim编辑器
  14. python读取docx中表格 图片_Python-docx 读写 Word 文档:插入图片、表格,设置表格样式,章节,页眉页脚等...
  15. 软件方法(下)分析和设计第8章连载[20210816更新]分析 之 分析类图——知识篇
  16. VBS脚本实现宽带上网加网页认证上网双验证
  17. 机器学习之PQ量化算法
  18. Expected value but found invalid token at character 1stack traceback:coroutine 0: [C]: in function
  19. 一些实用的安卓UI设计工具
  20. 谷歌PR权重劫持的原理与方法介绍

热门文章

  1. Matlab打开prn文件,打印prn文件的方法和技巧,.prn用什么软件打开?
  2. 计算机ws2_32dll丢失,电脑显示计算机中丢失ws2-32.dll,怎么办
  3. AB.RSLogix500软件 下载分享
  4. masm5.0与masm32
  5. 怎么查看c语言库文件,C语言函数库和文件
  6. isight2019安装教程_DS SIMULIA Suite 2019 (Abaqus/Isight/Fe-safe/Tosca) Win/Linux x64
  7. 黑马程序员—怎么去黑马?吃住问题解答
  8. C# 反编译-Reflector 反混淆-De4Dot 修改dll/exe代码-reflexil
  9. 哔哩哔哩用户需求分析报告
  10. CSDN账号绑定github(极简办法)