色另类_婷婷激情四月_亚洲精品无码不卡在线播放he_欧美第七页_精品国产综合区久久久久99_青娱乐极品盛宴在线

產(chǎn)品分類

當(dāng)前位置: 首頁 > 工業(yè)控制產(chǎn)品 > 自動(dòng)化控制 > DCS系統(tǒng)

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
DCS系統(tǒng)

DCSM模塊使用說明

發(fā)布日期:2022-04-28 點(diǎn)擊率:30

Other Parts Discussed in Post: TMS320F28377S

作者:華北區(qū) EP 工程師 Brian Wang 華北區(qū) C2000 工程師 Young Hu 

一、功能描述:

CSM加密是C2000系列芯片最基礎(chǔ)的加密方式,也是在前代產(chǎn)品(如F2803x/F2806x)中廣泛采用的加密方式。在最新的28004x、2837x等芯片中增加了雙碼安全模塊(DCSM),該功能支持將芯片中的memory劃為兩個(gè)獨(dú)立區(qū)域,并設(shè)置各自獨(dú)立的的128位CSM密碼。該功能可以阻止未授權(quán)人員訪問加密內(nèi)容,進(jìn)而有效防止您的代碼被重復(fù)或逆向編譯;與此同時(shí),需要維護(hù)與升級(jí)的代碼可以存儲(chǔ)于另一個(gè)獨(dú)立區(qū)域內(nèi),并授權(quán)給相關(guān)人員使用。合理運(yùn)用此功能,可以進(jìn)一步地提高產(chǎn)品的安全性以及易用性。

 

二、功能使用:

2.1 芯片存儲(chǔ)的分區(qū)設(shè)置

下面以Control Suite中TMS320F28377S的 blinky_with_DCSM工程為例,講解DCSM模塊的用法:

首先必須明確,雖然DCSM模塊中設(shè)計(jì)了相關(guān)機(jī)制允許用戶反復(fù)設(shè)置和使用該功能,但對(duì)于DCSM模塊的不當(dāng)操作仍然可能鎖死芯片,因此建議您在工程開發(fā)的末尾階段再進(jìn)行DCSM模塊的相關(guān)設(shè)置和操作。

為了充分發(fā)揮雙碼安全模塊的作用,需要根據(jù)工程需要對(duì)MCU中的資源進(jìn)行分區(qū)配置。通過配置GRABRAMx/GRABSECTx寄存器,按需求將RAM/FLASH分別劃入不同的Zone中,從而實(shí)現(xiàn)用兩套獨(dú)立密碼對(duì)不同區(qū)域分別進(jìn)行安全管理。


圖1 GRABRAMx/GRABSECTx寄存器設(shè)置

以工程blinky_with_DCSM為例,假如我們想要將FLASH A 分配至Zone1進(jìn)行保護(hù),F(xiàn)LASH B分配至Zone2進(jìn)行保護(hù)。參考手冊(cè)中關(guān)于Zx_GRABSECTR Register及Zx_GRABSECTR Register,需要對(duì)DCSM_Zx_ZoneSelectBlock.asm進(jìn)行如下修改。將Zone 1GRABSECT中FLASH A對(duì)應(yīng)的[1:0]位改為01或10;將Zone 2 GRABSECT中FLASH B對(duì)應(yīng)的[3:2]位改為01或10;特別需要注意的是,由于.asm中一個(gè)section是按位寫入的,因此在對(duì).asm文件進(jìn)行修改時(shí),必須以section為單位進(jìn)行修改,即便有reserve的部分也需要將注釋刪掉進(jìn)行編譯,否則寫入時(shí)只會(huì)按位寫入已編譯的內(nèi)容,發(fā)生錯(cuò)位,難以修改。

  1.       .sect "dcsm_zsel_z1" 

  2.      .long 0xFFFFFFFF      ;Z1-EXEONLYRAM  

  3.      .long 0xFFFFFFFF      ;Z1-EXEONLYSECT  

  4.      .long 0xFFFFFFFF      ;Z1-GRABRAM  

  5.      .long 0xFFFFFFFE      ;Z1-GRABSECT  

 

  1.       .sect "dcsm_zsel_z2"  

  2.      .long 0xFFFFFFFF      ;Z2-EXEONLYRAM  

  3.      .long 0xFFFFFFFF      ;Z2-EXEONLYSECT  

  4.      .long 0xFFFFFFFF      ;Z2-GRABRAM  

  5.      .long 0xFFFFFFF7      ;Z2-GRABSECT  

 

2.2分區(qū)的基本設(shè)置

在完成了對(duì)要保護(hù)存儲(chǔ)的分區(qū)之后,我們需要了解如何給兩個(gè)區(qū)域設(shè)置不同的密碼。

對(duì)于兩個(gè)保護(hù)Zone,每個(gè)都有一個(gè)專屬的OTP Block,以對(duì)各Zone進(jìn)行安全設(shè)置,具體包含的資源及作用如下:

Zx-linkPOINTER1-3

配置Zx OTP中Zone Select Block的位置

Zx-PSWDLOCK

用于使能Password Lock

Zx-CRCLOCK

用于使能Safe CRC

ZoneSelectBlock(0x20-0x1F0)

Zone Select Block 預(yù)留位置

Zx-EXEONLYRAM

用于使能RAM的Execute-only 保護(hù)

Zx-EXEONLYSECT

用于使能FLASH的Execute-only 保護(hù)

Zx-GRABRAM

用于配置RAM的所在分區(qū)

Zx-GRABSECT

用于配置FLASH的所在分區(qū)

Zx-CSMPASSWORD

用于配置分區(qū)的CSM密碼

 

 為了能夠讓用戶多次使用該功能、設(shè)置不同的密碼,如圖2,28004x系列MCU在USERS OTP中設(shè)置了多個(gè)存儲(chǔ)密碼及相關(guān)信息的位置(ZoneSelect Block),用戶可以通過linkPOINTER自由選擇當(dāng)前使用哪一個(gè)Zone Select Block。

linkPOINTER與Zone Select Block 對(duì)應(yīng)關(guān)系如圖3所示。作為一種校驗(yàn)措施三個(gè)linkERPOINTER的值設(shè)為相同,若linkERPOINTER1/2/3值不相同,則linkPOINTER的值將被置為全1,系統(tǒng)將默認(rèn)選擇Zone-Select Block 1(0x20)。此外,由于Zx-linkERPOINTER位于OTP區(qū)域,因此該寄存器的各位只能由1寫成0,而不能逆向操作。因此,只有Zx-linkPOINTER的值從“全F”寫起,并在每次重新設(shè)置時(shí)按照下表順序逐位寫0,才能夠充分利用到OTP中的所有Zone-Select Block。

 

圖2 Zonex OTP Flash

圖3 Zx-linkPOINTER與Zone Select Block對(duì)應(yīng)關(guān)系

以工程blinky_with_DCSM為例,假如是第一次使用DCSM功能,為了充分利用所有Blocks,選取Zone_Select Block0作為當(dāng)前使用的Block,在DCSM_Zx_ZoneSelectBlock.asm中保證Z1-linkPOINTER值為全F,此時(shí)選取的Zone_Select Block起始地址為0x70820。

  1.   .sect "dcsm_otp_z1_linkpointer"  

  2. .long 0x1FFFFFFF     ;Z1-linkPOINTER1  

  3. .long 0xFFFFFFFF     ;Reserved  

  4. .long 0x1FFFFFFF     ;Z1-linkPOINTER2  

  5. .long 0xFFFFFFFF     ;Reserved  

  6. .long 0x1FFFFFFF     ;Z1-linkPOINTER3  

  7. .long 0xFFFFFFFF     ;Reserved  

類似地,如果后續(xù)工程需要對(duì)密碼以及分區(qū)情況進(jìn)行修改,我們可以啟用Zone_Select Block1,將linkERPOINTER的最后一位寫0,對(duì)應(yīng)的修改如下:

  1.   .sect "dcsm_otp_z1_linkpointer" 

  2. .long 0x1FFFFFFE     ;Z1-linkPOINTER1  

  3. .long 0xFFFFFFFF     ;Reserved  

  4. .long 0x1FFFFFFE     ;Z1-linkPOINTER2  

  5. .long 0xFFFFFFFF     ;Reserved  

  6. .long 0x1FFFFFFE     ;Z1-linkPOINTER3  

  7. .long 0xFFFFFFFF     ;Reserved  

此時(shí)需要注意還需要將CMD文件中對(duì)應(yīng)Zone Select Block地址的內(nèi)容進(jìn)行修改,保證寫入的Flash地址與當(dāng)前的Zone Select Block正確對(duì)應(yīng)。

  1.   

  2.   

  3. DCSM_ZSEL_Z1_P0         : origin = 0x78030, length = 0x000010  

最后在SECTIONS中將要寫入?yún)^(qū)域?qū)?yīng)處的type=DSECT 刪除,否則FLASH寫入不會(huì)進(jìn)行。

  1. SECTIONS  

  2. {  

  3.    b0_dcsm_otp_z1_linkpointer   : > B0_DCSM_OTP_Z1_linkPOINTER   PAGE = 0, type = DSECT

  4.     

特別需要注意的是:由于以上涉及到的寄存器都位于OTP(One-Time Programmable)FLASH中,不能進(jìn)行反復(fù)更改,因此建議在開發(fā)后期代碼以及內(nèi)存分配確定之后,再進(jìn)行相關(guān)的設(shè)置。

 

2.3 加密功能及其使用

在完成了對(duì)MCU中memory的分區(qū)以及Zone Select Block位置的設(shè)置后,下面來看DCSM所支持的幾種加密模功能:

1)CSM密碼加密與解密:

CSM加密是DCSM加密的基礎(chǔ),在完成對(duì)MCU 存儲(chǔ)的分區(qū)之后,需要為分區(qū)設(shè)置各自的密碼才能使能加密功能。密碼寄存器Zx-CSMPSWD0/1/2/3位于各自的OTP的Zone Select Block中,具體位置由該區(qū)域的linkPOINTER決定。對(duì)于2837x系列,當(dāng)Zx-CSMPSWD0/1/2/3的值為默認(rèn)值1,該區(qū)域處于解鎖狀態(tài)。當(dāng)寄存器值為全0,該區(qū)域會(huì)被鎖死,因此用戶不應(yīng)當(dāng)使用全0密碼。

以工程blinky_with_DCSM為例,要設(shè)置Zone1的密碼,我們需要在DCSM_Zx_ZoneSelectBlock.asm中將Zx-CSMPSWDx寄存器改為想要設(shè)置的密碼:

  1. .sect "dcsm_zsel_z1"  

  2.       .long 0xFFFFFFFF      ;Z1-EXEONLYRAM  

  3.       .long 0xFFFFFFFF      ;Z1-EXEONLYSECT  

  4.       .long 0xFFFFFFFF      ;Z1-GRABRAM  

  5.       .long 0xFFFFFFBF      ;Z1-GRABSECT  

  6.       .long 0x11223344      ;Z1-CSMPSWD0 (LSW of 128-bit password)  

  7.       .long 0x11223344      ;Z1-CSMPSWD1  

  8.       .long 0x55667788      ;Z1-CSMPSWD2  

  9.       .long 0x55667788      ;Z1-CSMPSWD3 (MSW of 128-bit password)  

同樣需要在CMD中對(duì)相應(yīng)的dcsm_zsel_zx 的sections 進(jìn)行修改,刪除type=DSECT,對(duì)FLASH的操作才能夠進(jìn)行。這樣就完成了Zonex 密碼的設(shè)置工作。

  1.      b0_dcsm_zsel_z1      : > B0_DCSM_ZSEL_Z1_P0            PAGE = 0

進(jìn)行加密后,通過仿真器讀取Zone 1 OTP Flash結(jié)果如下:

圖3 加密后的OTP區(qū)域

可以看到此時(shí)Zone 1 OTP Flash中除了 CSMPSWDx寄存器中的密碼,其它部分均進(jìn)行了加密操作。之所以采用這樣的設(shè)計(jì),是為了在開發(fā)初期開發(fā)者可以利用這一特性隨時(shí)查看CSM,避免因?yàn)槊艽a遺忘或者寫入操作造成芯片被鎖死。對(duì)于密碼區(qū)域的加密需要通過Password Lock 功能進(jìn)行,將在后文進(jìn)行進(jìn)一步描述。

此時(shí),如果試圖通過仿真器讀取加密區(qū)域Flash B,可以看到Flash區(qū)域也進(jìn)行了加密(返回全0):

圖3 未加密的Flash(左)與加密后的Flash(右)

要對(duì)CSM進(jìn)行解密,需要經(jīng)過Password match flow(PMF)流程,程序?qū)膬蓚€(gè)Zone讀取CSM PWL并與寫入CSMKEYx寄存器的密碼進(jìn)行比對(duì),若密碼完全一致,則為該區(qū)域解密,否則解密失敗。

圖4 Password Match Flow 流程圖

解密操作可以通過幾種方法進(jìn)行,首先可以在debug界面單擊tools -> on chip flash -> 在對(duì)應(yīng)位置處輸入密碼,點(diǎn)擊Unlock:

圖5在On chip flash中進(jìn)行密碼匹配

也可以在.gel文件中找到寫入csmkey寄存器的代碼段,并自行修改密碼:

  1. *(unsigned long *)0x5F010 = 0x11223344;  // Virtual password

  2. *(unsigned long *)0x5F012 = 0x55667788;  

  3. *(unsigned long *)0x5F014 = 0x11223344;  

  4. *(unsigned long *)0x5F016 = 0x55667788;  


另外,也可以通過在芯片內(nèi)部執(zhí)行一段解密程序完成解密操作,具體代碼可參照.gel文件。

以blinky_with_DCSM為例,如果把代碼段寫入FLASH A,并將FLASH A劃入Zone1設(shè)置密碼保護(hù)。在正確輸入密碼時(shí),燒錄操作可以正常進(jìn)行。

而在不輸入正確密碼時(shí),會(huì)出現(xiàn)解鎖失敗的提示,燒錄也會(huì)報(bào)錯(cuò)。

圖6 未解鎖狀態(tài)下進(jìn)行燒錄報(bào)錯(cuò)

NOTE:特別需要注意的是,在使用280049系列芯片時(shí),與傳統(tǒng)C2000系列芯片不同,其ZxOTP_CSMPSWD1寄存中寫入的默認(rèn)密碼不是全“1”。由于OTP寄存器的特殊性,只能在默認(rèn)設(shè)置的基礎(chǔ)上將1改成0,否則可能發(fā)生FLASH寫入錯(cuò)誤。

圖8 28004x CSMPWSD1默認(rèn)密碼表(部分)

2)仿真代碼保密邏輯 Emulation Code Security Logic(ECSL)

在CSM的基礎(chǔ)上,芯片利用CSM密碼的后64位設(shè)計(jì)了仿真加密邏輯。如果試圖在加密代碼中Halt就會(huì)觸發(fā)該保護(hù),斷開仿真連接。用戶需要在CSMKEY(0/1)中寫入正確的64位密碼才能啟用仿真,但此時(shí)并不會(huì)解鎖CSM保護(hù),對(duì)CSMKEY(0/1)的寫入方法可以參考上一條。

圖8 在加密代碼中Halt觸發(fā)仿真保護(hù)

特別注意,在debug一個(gè)加密MCU時(shí),仿真器需要一些時(shí)間控制CPU,但此時(shí)CPU可能已經(jīng)運(yùn)行并觸發(fā)ECSL保護(hù)導(dǎo)致斷連。要解決此問題,請(qǐng)使用Wait Boot Mode boot選項(xiàng),在此模式中,CPU會(huì)運(yùn)行在一個(gè)循環(huán)中而不進(jìn)入應(yīng)用程序,從而避免觸發(fā)保護(hù)。具體設(shè)置方法請(qǐng)參考技術(shù)手冊(cè)Boot Rom部分,Launchpad可以通過撥動(dòng)相應(yīng)的開關(guān)進(jìn)入此模式。

 

3)CPU加密邏輯 CPU Secure Logic(CPUSL)

CPU加密邏輯可以防止未授權(quán)者通過Watch Window讀取CPU寄存器,在程序指針指向保護(hù)區(qū)域時(shí),所有對(duì)于CPU寄存器的訪問都被禁止(程序指針除外)。在此情況下,最好不要對(duì)CPU寄存器進(jìn)行寫入。另外,如果CSM被解鎖,此外,CPUSL也將被關(guān)閉。

圖8 加密代碼運(yùn)行過程中CPU Registers不可見

4)僅執(zhí)行保護(hù) Execute-only Protection

對(duì)于存儲(chǔ)關(guān)鍵數(shù)據(jù)的RAM或FLASH,TI提供了Execute-only Protection。當(dāng)該邏輯啟用,任何對(duì)該區(qū)域數(shù)據(jù)的讀取都將被禁止。例如如果試圖使用另一個(gè)加密區(qū)域中的代碼對(duì)Execute-only Protection加密區(qū)域中的代碼進(jìn)行復(fù)制、讀取等操作都將被禁止。通過寫入EXEONLYSECT以及EXEONLYRAM寄存器對(duì)應(yīng)位的值,可以啟用該功能。

5)密碼鎖 Password Lock

如前文所述,若只采用CSM加密,可以通過Memory Browser發(fā)現(xiàn)此時(shí)對(duì)應(yīng)CSM密碼的位置并沒有進(jìn)行加密。在開發(fā)完成后,開發(fā)者需要通過Password Lock功能對(duì)此區(qū)域進(jìn)行加密,以防他人讀取密碼并進(jìn)行解密。啟用該保護(hù)的方法是向?qū)?yīng)區(qū)域的PSWDLOCK寄存器0:3位寫入0xF以外的值。

圖9 未開啟Password Lock時(shí)的ZSB0寄存器值

以blinky_with_DCSM為例,要設(shè)置Zonex的密碼,需要在DCSM_Zx_ZoneSelectBlock.asm中將Zx-PSWDLOCK[3:0]該為非全1,并在CMD中刪去相應(yīng)部分的.DSECT:

  1. .sect "dcsm_otp_z1_pswdlock"  

  2. .long 0xFFFFFFFE     ;Z1-PSWDLOCK  

  3. .long 0xFFFFFFFF     ;Reserved  

圖10開啟Password Lock時(shí)的ZSB0寄存器值

至此,我們就完成了DCSM中各種安全功能的介紹和設(shè)置,特別注意,由于PSWDLOCK等寄存器并不位于Zone Select Block當(dāng)中,因此只能進(jìn)行一次寫入,不能進(jìn)行更改,因此應(yīng)該在程序開發(fā)后期再加此類保護(hù)。

 

三、小結(jié)

DCSM加密相較于傳統(tǒng)的CSM加密具有更完善的保密措施和更靈活的使用方法。雙密碼的引入允許用戶用不同密碼管理不同部分的代碼,為產(chǎn)品的代碼安全以及后期的升級(jí)維護(hù)都帶來了極大的便利。本實(shí)例以2837x系列芯片為對(duì)象,描述了DCSM模塊常見的使用方法。28004x系列芯片僅在DCSM OTP區(qū)域的數(shù)量和使用方法上與2837x略有不用,也可參照此說明進(jìn)行相應(yīng)操作。

另外部分C2000芯片也可以使用Unique ID作為種子進(jìn)行進(jìn)一步的加密,具體方法不在此展開。

下一篇: PLC、DCS、FCS三大控

上一篇: EV/HEV功能安全系統(tǒng)中

推薦產(chǎn)品

更多
主站蜘蛛池模板: 91综合网 | 水中色av综合 | 日日夜夜爱| 日本欧美一区二区三区不卡视频 | 国产一级视频 | 一区二区三区欧美大片 | 久久不卡 | 激情五月色综合色婷婷 | 亚洲入口 | 一区国产精品 | 视频一区二区久久 | 国产精品黄网站免费进入 | 久草精品视频在线观看 | 色哟哟国产成人精品 | 日韩亚洲一区二区三区 | 亚洲综人网 | 色妞妞视频| 国产成人aa免费视频 | 国产精品一区av | 欧美在线成人影院 | 亚洲狠狠婷婷综合久久蜜桃 | 欧美视频国产 | 91精品久久 | 日韩欧美在线中文字幕 | 欧美激情视频一区二区三区在线播放 | 我把寡妇日出水好爽视频 | 麻豆网站在线 | 日韩精品免费在线视频 | 国产精品视频第一区二区三区 | 大学生a级毛片免费视频 | 国产男女免费完整版视频 | 成人性爱视频在线观看 | 天天视频在线播放观看视频 | 日韩在线播放网址 | 久九精品| 性69式视频在线观看免费 | 国产精品久久久久无码人妻精品 | 久久99国产精一区二区三区 | av成人免费| 久久精品免视看国产成人2021 | 久久精品国产亚洲一区二区 |