0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32芯片UID話題

茶話MCU ? 來(lái)源:ST MCU 信息交流 ? 2020-06-15 10:00 ? 次閱讀

絕大多數(shù)STM32系列的芯片都在固定的地方放置了長(zhǎng)度為96位的唯一身份識(shí)別碼,簡(jiǎn)稱UID,只有極少數(shù)STM32系列芯片內(nèi)部沒(méi)有該UID,比方超值型STM32F0x0系列,STM32F100系列。具體到哪顆芯片到底有沒(méi)有UID,在芯片數(shù)據(jù)手冊(cè)的首頁(yè)都有明確的說(shuō)明,無(wú)需猜測(cè)。如下圖所以:

芯片所對(duì)應(yīng)的參考手冊(cè)里,有對(duì)該UID存放地址的詳細(xì)介紹。地址因不同系列或子序列而不同。

關(guān)于這個(gè)UID常有人有些疑問(wèn),有幾個(gè)問(wèn)題在這里稍微總結(jié)下:

1、有無(wú)問(wèn)題。上面說(shuō)了絕大部分STM32都內(nèi)置UID,具體以查看數(shù)據(jù)手冊(cè)為準(zhǔn)。

2、唯一性問(wèn)題。該UID的唯一性是靠96位這個(gè)整體來(lái)保證其唯一性,你若截取部分就不保證了。

3、內(nèi)容問(wèn)題。有人對(duì)這個(gè)UID內(nèi)容似乎很好奇,這點(diǎn)在STM32參考手冊(cè)里并無(wú)詳細(xì)描述,但這并不影響使用?!疽?yàn)?a target="_blank">STM8有些芯片也有96位UID,那里有較為詳細(xì)的介紹,涉及芯片WAFER生產(chǎn)加工工程中的一些各種坐標(biāo)信息、wafer編號(hào)信息、產(chǎn)品批號(hào)信息等】

4、地址問(wèn)題。芯片UID的存放地址要到芯片對(duì)應(yīng)的參考手冊(cè)里去查對(duì)。特別要提醒的是,并非所有STM32系列的UID信息存放在某個(gè)起始地址開(kāi)始的連續(xù)空間內(nèi)。

5、怎么用的問(wèn)題。說(shuō)實(shí)在的,這個(gè)就很難說(shuō)了,反正STM32有這個(gè)特性在,肯定沒(méi)有固定不變的用法。具體怎么用就看你自己了。對(duì)于該UID,STM32參考手冊(cè)給了些大致應(yīng)用方向的介紹:

簡(jiǎn)單點(diǎn)說(shuō),該UID可以做特定序列號(hào);做FLASH編程的安全密鑰;激活安全啟動(dòng)流程。據(jù)我所知,曾有人拿這個(gè)UID碼作為唯一發(fā)射碼。中間按個(gè)做密鑰配合加密技術(shù)的應(yīng)用涉及到很專業(yè)的內(nèi)容, ST官方也有不少這方面的培訓(xùn)材料,有興趣的可以找相關(guān)資料進(jìn)一步了解學(xué)習(xí)。

相對(duì)用的比較多的就是基于該UID設(shè)計(jì)用戶程序的安全啟動(dòng)。其大致原理就是,用戶程序第一次運(yùn)行時(shí)將預(yù)定的未被改寫(xiě)過(guò)FLASH地址寫(xiě)入本芯片UID數(shù)據(jù),之后每次啟動(dòng)都會(huì)重讀UID數(shù)據(jù)并與特定FLASH地址的內(nèi)容進(jìn)行比對(duì),若比對(duì)成功則正常運(yùn)行,否則進(jìn)入異常處理,不予正常運(yùn)行程序。一般來(lái)講,編寫(xiě)UID那一步在產(chǎn)品出廠前就完成了。

這里所說(shuō)的第一次運(yùn)行,就是指程序運(yùn)行后,到預(yù)定的FLASH地址去讀取內(nèi)容,發(fā)現(xiàn)該處是被擦除過(guò)且未被改寫(xiě)的數(shù)據(jù)狀態(tài)[一般為全1狀態(tài)],并將UID數(shù)據(jù)寫(xiě)入相應(yīng)的FLASH區(qū)域,這次運(yùn)行視為第一次運(yùn)行。

下面使用STM32L4芯片就上面應(yīng)用做個(gè)簡(jiǎn)單的代碼實(shí)現(xiàn)示范,僅供參考。注意,不同STM32芯片在FLASH編程這個(gè)地方并不完全一樣。

先做些基本的準(zhǔn)備工作。

我們根據(jù)實(shí)際應(yīng)用程序情況預(yù)留出一塊地址空間,我在下面示例中將STM32L476RG內(nèi)部FLASH中間位置抽出1頁(yè)來(lái)存放UID【注:很多STM32系列都具備OTP空間,也可以將UID寫(xiě)在這個(gè)區(qū)域】。STM32L4的FLASH編程采用雙字編程,在給定FLASH編程地址時(shí),注意8字節(jié)對(duì)齊。到相應(yīng)的參考手冊(cè)查找UID的地址及存放情況【即是連續(xù)存放還是分散存放】。

準(zhǔn)備工作差不多了,就可以嘗試組織程序代碼了。

程序流程很簡(jiǎn)單。先判斷指定FLASH地址是否為全1,如果是讀取當(dāng)前芯片UID并填寫(xiě)到相應(yīng)地址;如果不是全1,則讀取指定FLASH地址空間內(nèi)容跟當(dāng)前芯片UID數(shù)據(jù)比較,若正確,正常運(yùn)行程序,若二者不符,則進(jìn)入異常處理,不正常運(yùn)行功能代碼。

【下面是監(jiān)測(cè)到指定flash地址未被改寫(xiě)過(guò),進(jìn)入U(xiǎn)ID內(nèi)容填充的FLASH編程代碼】

【下面是監(jiān)測(cè)到指定flash地址已被改寫(xiě)過(guò),進(jìn)入比較判斷及相應(yīng)處理的代碼】

上面代碼是基于STM32L476芯片和STM32L4Cube庫(kù)而編寫(xiě)的,主要介紹下大致實(shí)現(xiàn)過(guò)程,簡(jiǎn)單直觀,無(wú)須過(guò)多解釋。

不過(guò),在實(shí)際應(yīng)用過(guò)程中,這段功能代碼就不要如此直白明了。這里給幾點(diǎn)參考建議:

1、代碼編寫(xiě)過(guò)程中,F(xiàn)LASH地址盡量不要一次性直接給出,最好幾經(jīng)變換后得出;

2、被存放的UID在不破壞唯一性的情況下可以適當(dāng)做些變換后存放;

3、將這部分代碼拆分成幾個(gè)相互獨(dú)立而有一定關(guān)聯(lián)的不同函數(shù)塊來(lái)處理??梢钥紤]將有的功能塊放在用戶主程序里,有的夾在正常的中斷程序里,包括嵌套的中斷程序里。

4、用來(lái)存放UID的flash地址盡量不要連續(xù),最好在不同功能塊訪問(wèn)相應(yīng)的地址;

5、如果可能,考慮使用兩套完全獨(dú)立的UID改寫(xiě)、比對(duì)處理代碼。即使用兩套FLASH存儲(chǔ)區(qū)域和比對(duì)代碼,只有兩套都比對(duì)成功后才正常運(yùn)行程序,否則任何一套比對(duì)失敗都進(jìn)入保護(hù)狀態(tài)。

因?yàn)閯偤米罱腥苏勂疬@方面的話題,就順便聊聊上面這些,權(quán)作參考。另外,還應(yīng)該充分利用芯片的讀寫(xiě)保護(hù)機(jī)制以及某些系列已經(jīng)具有的信息安全保護(hù)機(jī)制,如PCROP、TrustZone等。還有,我們可以根據(jù)自身產(chǎn)品特點(diǎn)設(shè)計(jì)出一些結(jié)合硬件線路、機(jī)械組裝的特定自檢流程,讓盜版者在生產(chǎn)加工環(huán)節(jié)遇到麻煩。這些地方都留給每個(gè)設(shè)計(jì)者大量的發(fā)揮空間,來(lái)保護(hù)自己的知識(shí)產(chǎn)權(quán)。

總之,關(guān)于產(chǎn)品的產(chǎn)權(quán)保護(hù),應(yīng)該從產(chǎn)品規(guī)劃之初就著手考慮應(yīng)對(duì)方案了,從最早的芯片選型開(kāi)始,最好回避選用市面上使用過(guò)于普遍且老舊的芯片系列。相信芯片商在推陳出新的過(guò)程中也有安全性這方面的考量,使得芯片在這方面的性能越來(lái)完善和強(qiáng)大。

最后順便提醒下,當(dāng)我們的程序監(jiān)測(cè)到發(fā)生侵權(quán)進(jìn)入保護(hù)狀態(tài)時(shí),目的是保護(hù)自己的產(chǎn)權(quán)不受侵害。這個(gè)過(guò)程中我們可能會(huì)對(duì)代碼采取些行動(dòng),阻止其正常運(yùn)行,但注意不要因此而給第三方帶來(lái)人身傷害。打個(gè)比方,假設(shè)你設(shè)計(jì)的產(chǎn)品是馬達(dá)控制類交通工具,當(dāng)發(fā)現(xiàn)有人盜版時(shí),如果你在代碼里只是簡(jiǎn)單粗暴地對(duì)代碼進(jìn)行破壞而完全不顧破壞后的異常代碼可能導(dǎo)致什么后果,那就不妙了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49631

    瀏覽量

    417135
  • 身份識(shí)別
    +關(guān)注

    關(guān)注

    1

    文章

    40

    瀏覽量

    12617
  • STM32芯片
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    4341

原文標(biāo)題:STM32芯片UID話題

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何讀取多張卡的UID,有償

    應(yīng)用場(chǎng)景是在一摞卡片,需要通過(guò)循環(huán)讀取卡片的UID,來(lái)獲取所有卡片的UID。但是普通MFRC522模組的磁場(chǎng)強(qiáng)度無(wú)法給多張卡供電,想咨詢?nèi)绾谓o一摞卡供電,當(dāng)然模組可以移動(dòng),或許只需要給部分卡片供電即可。紅包200元,財(cái)力有限,請(qǐng)見(jiàn)諒。
    發(fā)表于 08-17 21:50

    STM32F10xx芯片資料

    電子發(fā)燒友網(wǎng)站提供《STM32F10xx芯片資料.pdf》資料免費(fèi)下載
    發(fā)表于 07-08 14:56 ?1次下載

    求助,用戶可以獲取ESP32芯片UID嗎?

    如題,想要使用芯片本身的UID作為設(shè)備的唯一標(biāo)識(shí)碼,但是沒(méi)找到UID的獲取方法。 請(qǐng)問(wèn)用戶是否可以獲取芯片UID呢?如果可以的話,應(yīng)該如何
    發(fā)表于 06-20 07:19

    怎樣從STM32F407的UID碼中提取生產(chǎn)年份和月份信息?

    請(qǐng)問(wèn)怎樣從STM32F407的UID碼中提取生產(chǎn)年份和月份信息?
    發(fā)表于 06-03 06:28

    請(qǐng)問(wèn)STM8L051是不是沒(méi)有UID的?

    STM8L051是不是沒(méi)有UID的?在手冊(cè)找了很久也沒(méi)有見(jiàn)到,希望知道的大神說(shuō)一說(shuō)。
    發(fā)表于 05-15 06:50

    如何通過(guò)STVP programming toolkit讀取芯片UID

    問(wèn)題一、無(wú)法通過(guò)GetProtectionList獲取芯片的保護(hù)級(jí)別列表 在調(diào)用GetProtectionList的時(shí),發(fā)現(xiàn)無(wú)法獲取芯片(STM32F405RG為例子)支持的保護(hù)級(jí)別列表,通過(guò)調(diào)用
    發(fā)表于 05-11 08:11

    同樣的代碼,stm32l072cbt6改用stm32l053c8t6就出出現(xiàn)了HardFault_Handler的原因?

    我之前使用的是stm32l072cbt6芯片,現(xiàn)在改用stm32l053c8t6,結(jié)果在調(diào)取芯片uid時(shí)出現(xiàn)了同樣的代碼,卻產(chǎn)生了錯(cuò)誤
    發(fā)表于 03-11 08:31

    m451系列mcu的96位UID怎么讀?。?/a>

    m451系列mcu的96位UID怎么讀取
    發(fā)表于 01-16 07:35

    M451的96位UID具體的意思是什么?

    M451的96位UID具體的意思是什么?
    發(fā)表于 01-16 06:53

    話題通信接口的定義和運(yùn)行效果

    話題接口的定義與使用 話題通信接口的定義也是類似的,繼續(xù)從之前的機(jī)器視覺(jué)案例中來(lái)衍生,我們想把服務(wù)換成話題,周期發(fā)布目標(biāo)識(shí)別的位置,不管有沒(méi)有人需要。 運(yùn)行效果 現(xiàn)在我們會(huì)運(yùn)行三個(gè)節(jié)點(diǎn): 第一個(gè)節(jié)點(diǎn)
    的頭像 發(fā)表于 12-01 15:32 ?313次閱讀
    <b class='flag-5'>話題</b>通信接口的定義和運(yùn)行效果

    神秘又有趣的話題——芯片引腳順序!

    親愛(ài)的“芯”朋友,你們有沒(méi)有發(fā)現(xiàn),每顆芯片上都布滿了密密麻麻的引腳,猶如一座迷宮,讓人無(wú)從下手?今天,我們一起來(lái)揭開(kāi)這個(gè)迷宮的神秘面紗,探索一下這個(gè)既神秘又有趣的話題——芯片引腳順序!芯片
    的頭像 發(fā)表于 11-28 09:33 ?1.2w次閱讀
    神秘又有趣的<b class='flag-5'>話題</b>——<b class='flag-5'>芯片</b>引腳順序!

    HASH算法加密芯片的工作原理及其在STM32 MCU上的應(yīng)用

    本文主要研究了HASH算法加密芯片的工作原理及其在STM32 MCU上的應(yīng)用,實(shí)現(xiàn)了外部加密芯片對(duì)STM32 MCU的程序保護(hù),目前的技術(shù)手段無(wú)法對(duì)其進(jìn)行破解,其安全性優(yōu)于其它加密方式
    的頭像 發(fā)表于 10-24 15:01 ?3130次閱讀
    HASH算法加密<b class='flag-5'>芯片</b>的工作原理及其在<b class='flag-5'>STM32</b> MCU上的應(yīng)用

    UID縮短到32bit解決方法

    UID(AT32 唯一編碼)共有 96bit,如何將其縮短到 32bit 做為唯一識(shí)別碼?
    發(fā)表于 10-20 07:49

    基于STM32芯片設(shè)計(jì)的工控板

    為了獲得一款極高性價(jià)比、尺寸極為緊湊的嵌入式控制模塊,提出來(lái)了一種基于STM32芯片設(shè)計(jì)的工控板,并完成系統(tǒng)的軟硬件設(shè)計(jì)。在一張比名片還小的板子上實(shí)現(xiàn)了幾乎所有的工業(yè)計(jì)算機(jī)所需要的功能。
    發(fā)表于 10-19 14:25 ?0次下載
    基于<b class='flag-5'>STM32</b><b class='flag-5'>芯片</b>設(shè)計(jì)的工控板

    為什么有些STM32中斷沒(méi)有子優(yōu)先級(jí)?

    看到一個(gè)交流群在討論關(guān)于【關(guān)于STM32中斷優(yōu)先級(jí)的話題】,其中就有小伙伴提到:為什么有些STM32中斷沒(méi)有【子優(yōu)先級(jí)】?
    的頭像 發(fā)表于 10-17 15:50 ?695次閱讀
    為什么有些<b class='flag-5'>STM32</b>中斷沒(méi)有子優(yōu)先級(jí)?