日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SEGGER J-Flash烧写SN号(serial number)的两种方式

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。