在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CW32L010安全運行庫保護的實現

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2025-05-12 14:51 ? 次閱讀

前言

CW32L010的FLASH存儲器支持安全運行庫功能,方案商可將核心算法存儲于安全運行庫區域以供客戶二次開發時調用。使能安全運行庫保護功能后,用戶代碼可正常調用運行安全運行庫區域內的函數,但無法通過任何方式(CPU、SWD、ISP)讀出安全運行庫區域的內容,只有提供正確的密碼時才能通過ISP協議禁止安全運行庫保護功能,同 時清空安全運行庫存儲空間的數據。

一、工作原理

通過將要保護的算法指定存放到FLASH對應的頁面page(0

二、設置安全運行庫的具體步驟

2.1.將算法函數指定到目標頁面

只需要使用__attribute__((section(".ARM.__at_address")))就可以將變量、數組、函數指定到FLASH的任意地址。

wKgZPGggaqeAacjeAAAs0mtrR3o682.jpg

常見的函數類型指定地址方法如下:

@font-face{
font-family:"Times New Roman";
}
@font-face{
font-family:"宋體";
}
@font-face{
font-family:"Calibri";
}
p.MsoNormal{
mso-style-name:正文;
mso-style-parent:"";
margin:0pt;
margin-bottom:.0001pt;
mso-pagination:none;
text-align:justify;
text-justify:inter-ideograph;
font-family:Calibri;
mso-fareast-font-family:宋體;
mso-bidi-font-family:'Times New Roman';
font-size:10.5000pt;
mso-font-kerning:1.0000pt;
}
p.MsoFooter{
mso-style-name:頁腳;
mso-style-noshow:yes;
margin:0pt;
margin-bottom:.0001pt;
tab-stops:center blank 207.6500pt right blank 415.3000pt ;
layout-grid-mode:char;
mso-pagination:none;
text-align:left;
font-family:Calibri;
mso-fareast-font-family:宋體;
mso-bidi-font-family:'Times New Roman';
font-size:9.0000pt;
mso-font-kerning:1.0000pt;
}
span.msoIns{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
text-underline:single;
color:blue;
}
span.msoDel{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:line-through;
color:red;
}
@page{mso-page-border-surround-header:no;
	mso-page-border-surround-footer:no;}@page Section0{
}
div.Section0{page:Section0;}
void func1 (void); 
void func1 (void) __attribute__((section(".ARM.__at_0x0000FE00")));
//指定func函數的地址為0x0000FE00,所在頁面為127頁
 
void func2 (uint8_t CNT);void func2 (uint8_t) __attribute__((section(".ARM.__at_0x0000FE50")));//指定func函數的地址為0x0000FE50,所在頁面為127頁
 
uint8_t func3 (uint8_t CNT1,uint8_t* p);
uint8_t func3 (uint8_t, uint8_t*) __attribute__(( section(".ARM.__at_0x0000FEA4" )));
//指定func函數的地址為0x0000FEA4,所在頁面為127頁

多個函數指定地址儲存時,在指定地址前,需先在KEIL的map文件中找到各個函數的大小,免得指定地址時內存沖突。map文件如下:

wKgZO2ggaqiAQoN4AALl8rjUp84557.jpg

由此可以得到func1、func2、func3的字節大小分別是0x50、0x54、0x58,接下來就可以指定函數的存儲地址了。

注意指定地址時,因為32位變量需要4字節對齊,也就是地址的最低位得是0、4、8、C才行,所以地址不能出現,如:0x0000FE01、0x0000FE02、0x0000FE03、0x0000FE05、0x0000FE06、0x0000FE07、0x0000FE09、0x0000FE0A、0x0000FE0B、0x0000FE0D、0x0000FE0E、0x0000FE0F

接著就可以指定func1的地址為0x0000FE00,func2的地址為0x0000FE00+0x50,func3的地址為0x0000FE00+0x50+0x54,如想指定其它地址,依次類推。

2.2.開啟相應頁面的安全運行庫

使能安全運行庫保護功能的方法為:在地址0xFFF0~ 0xFFFF 寫入特定控制字,如下表所示:

wKgZPGggaqmAP5yGAAECAGD6p0o349.jpgwKgZO2ggaqmAJC5nAABz1keOiRc549.jpg

2.3.參考代碼

文章及視頻中使用到的例程源碼文件:

通過網盤分享的文件:CW32L010 FLASH PROTECT.zip

鏈接: https://pan.baidu.com/s/1d5tj_zz-b1bQGkJkuAgbdQ?pwd=CW32

提取碼: CW32

@font-face{
font-family:"Times New Roman";
}
@font-face{
font-family:"宋體";
}
@font-face{
font-family:"Calibri";
}
p.MsoNormal{
mso-style-name:正文;
mso-style-parent:"";
margin:0pt;
margin-bottom:.0001pt;
mso-pagination:none;
text-align:justify;
text-justify:inter-ideograph;
font-family:Calibri;
mso-fareast-font-family:宋體;
mso-bidi-font-family:'Times New Roman';
font-size:10.5000pt;
mso-font-kerning:1.0000pt;
}
p.MsoFooter{
mso-style-name:頁腳;
mso-style-noshow:yes;
margin:0pt;
margin-bottom:.0001pt;
tab-stops:center blank 207.6500pt right blank 415.3000pt ;
layout-grid-mode:char;
mso-pagination:none;
text-align:left;
font-family:Calibri;
mso-fareast-font-family:宋體;
mso-bidi-font-family:'Times New Roman';
font-size:9.0000pt;
mso-font-kerning:1.0000pt;
}
span.msoIns{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
text-underline:single;
color:blue;
}
span.msoDel{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:line-through;
color:red;
}
@page{mso-page-border-surround-header:no;
	mso-page-border-surround-footer:no;}@page Section0{
}
div.Section0{page:Section0;}
void func1 (void) __attribute__((section(".ARM.__at_0x0000FE00")));//指定func函數的地址為0x0000FE00,所在頁面為127頁
void func2 (uint8_t ) __attribute__((section(".ARM.__at_0x0000FE50")));//指定func函數的地址為0x0000FE50,所在頁面為127頁
uint8_t func3 (uint8_t ,uint8_t* ) __attribute__((section(".ARM.__at_0x0000FEA4")));//指定func函數的地址為0x0000FEA4,所在頁面為127頁
 
void func1 (void) 
{
 //PB03---LED1 推挽輸出
    CW_GPIOB->DIR_f.PIN3 = 0;
    CW_GPIOB->ANALOG_f.PIN3 = 0;

 uint8_t cnt = 10;

    while(cnt--)
 {
  CW_GPIOB->TOG_f.PIN3 = 1;
  uint32_t thisCnt = 0X9FFFF;
  while( thisCnt-- )
  {
   ;
  }
 }
}
 
void func2 (uint8_t CNT) 
{
 //PB03---LED1 推挽輸出
    CW_GPIOB->DIR_f.PIN3 = 0;
    CW_GPIOB->ANALOG_f.PIN3 = 0;

 uint8_t cnt = CNT;

    while(cnt--)
 {
  CW_GPIOB->TOG_f.PIN3 = 1;
  uint32_t thisCnt = 0X9FFFF;
  while( thisCnt-- )
  {
   ;
  }
 }
}
 
uint8_t func3 (uint8_t CNT1,uint8_t* p) 
{
 //PB03---LED1 推挽輸出
    CW_GPIOB->DIR_f.PIN3 = 0;
    CW_GPIOB->ANALOG_f.PIN3 = 0;

 uint8_t cnt = CNT1 + *p;

    while(cnt--)
 {
  CW_GPIOB->TOG_f.PIN3 = 1;
  uint32_t thisCnt = 0X9FFFF;
  while( thisCnt-- )
  {
   ;
  }
 }
 return 0;
}
 
int32_t main(void)
{        
    uint8_t ret,temp;
    
    __SYSCTRL_FLASH_CLK_ENABLE();
    __SYSCTRL_CRC_CLK_ENABLE();
 __SYSCTRL_GPIOB_CLK_ENABLE();

    ret = FLASH_SafetyLibraryEnable(SlibKey, 0x7F, 0x7F);
    
    if (ret)
    {
        // 開啟安全區失敗
        while(1);
    }    

 func1();

 func2(10);

 temp = 5;
 ret = func3(5,&temp);
    
    //結束
    while(1)
    {
        
    }
}

2.4.函數調用

函數調用時需要在指定的地址上加1,因為對于cortex M核的芯片,任何跳轉相關地址的最低位,即BIT0都應是1。該位表示將用到的的指令集為Thumb指令。具體調用方法如下:

@font-face{
font-family:"Times New Roman";
}
@font-face{
font-family:"宋體";
}
@font-face{
font-family:"Calibri";
}
p.MsoNormal{
mso-style-name:正文;
mso-style-parent:"";
margin:0pt;
margin-bottom:.0001pt;
mso-pagination:none;
text-align:justify;
text-justify:inter-ideograph;
font-family:Calibri;
mso-fareast-font-family:宋體;
mso-bidi-font-family:'Times New Roman';
font-size:10.5000pt;
mso-font-kerning:1.0000pt;
}
p.MsoFooter{
mso-style-name:頁腳;
mso-style-noshow:yes;
margin:0pt;
margin-bottom:.0001pt;
tab-stops:center blank 207.6500pt right blank 415.3000pt ;
layout-grid-mode:char;
mso-pagination:none;
text-align:left;
font-family:Calibri;
mso-fareast-font-family:宋體;
mso-bidi-font-family:'Times New Roman';
font-size:9.0000pt;
mso-font-kerning:1.0000pt;
}
span.msoIns{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
text-underline:single;
color:blue;
}
span.msoDel{
mso-style-type:export-only;
mso-style-name:"";
text-decoration:line-through;
color:red;
}
@page{mso-page-border-surround-header:no;
	mso-page-border-surround-footer:no;}@page Section0{
}
div.Section0{page:Section0;}
#define  Slib_Led_Blink1     ((void (*)())(0x0000FE00UL + 1))
#define  Slib_Led_Blink2     ((void (*)(uint8_t))(0x0000FE50UL + 1))
#define  Slib_Led_Blink3     ((uint8_t (*)(uint8_t,uint8_t*))(0x0000FEA4UL + 1))
 
int32_t main(void)
{
    SYSCTRL_HSI_Enable(SYSCTRL_HSIOSC_DIV12);
 __SYSCTRL_GPIOB_CLK_ENABLE();

 Slib_Led_Blink1();//方法一:宏調用
 ((void (*)())(0x0000FE00UL + 1))();//方法二:直接調用
 void (*ppp1) ();//方法三;函數指針調用
 ppp1 = (void (*) ())(0xFE00 + 1);
 ppp1();

 Slib_Led_Blink2(10);//方法一:宏調用
 ((void (*)(uint8_t))(0x0000FE50UL + 1))(10);//方法二:直接調用
 void (*ppp2)(uint8_t);//方法三;函數指針調用
 ppp2 = ((void (*)(uint8_t))(0x0000FE50UL + 1));
 ppp2(10);

 uint8_t xx = 5;
 uint8_t temp = Slib_Led_Blink3(5,&xx);//方法一:宏調用
 ((uint8_t (*)(uint8_t,uint8_t*))(0x0000FEA4UL + 1))(5,&xx);//方法二:直接調用
 uint8_t (*ppp3)(uint8_t,uint8_t*);//方法三;函數指針調用
 ppp3 = (uint8_t (*)(uint8_t,uint8_t*))(0x0000FEA4+1);
 ppp3(5,&xx);

    while (1)
    {

    }
}

2.5.擦除安全運行庫

禁止安全運行庫保護功能共有兩種方法:

(1).通過ISP協議執行片擦操作:芯片接收到片擦指令及正確的安全運行庫密碼時,將自動擦除本芯片的所有數據并禁止安全運行庫保護功能;。

需要用到上位機CW-Programmmer,具體連線請按上位機提示進行連接,上位機配置需按下圖配置:

wKgZPGggaqqAaPjYAAB01jsbjCA934.jpg

填寫SDK區域密碼時,需按16進制來填寫密碼,如:十進制1,0xF,'_','!','@','*','A','1',填寫時為它們對應ascii值的16進制,分別是0x01、0x0F、0x5F、0x21、0x40、0x2A、0x41、0x31,所以密碼應該填寫010F5F21402A4131。

填寫完密碼后,點擊在線編程,即可擦除安全運行庫。

(2).在RAM中對芯片執行片擦操作:配置編譯器參數,使片擦操作從RAM中執行。片擦操作完成后,本芯片的所有數據均被擦除并禁止安全運行庫保護功能。

2.6.注意事項

(1).指定算法函數的地址不要太靠前,否則會與下載的代碼起沖突,建議選擇FLASH靠后的頁面。

(2).儲存在安全運行庫頁面里的函數,不可調用安全區外的函數。

(3).安全運行庫代碼下載到MCU后,要進行上電復位才能生效。

三、現象演示

將安全運行庫的代碼下載到CW32L010F8P6 StartKit REV01板子中后,斷電后重新上電,DEBUG頁面的memory中,127頁顯示不可讀,全0,表示127頁已經受到保護了。

wKgZO2ggaquARyW3AAFMKuxTQ_k875.jpg

用戶可以在其它工程中調用儲存在安全運行庫頁面的函數,具體調用方法詳情見2.4函數調用章節。

四、視頻講解

CW32L010黑客區安全運行庫保護的實現 :1.FLASH及安全庫區域原理_嗶哩嗶哩_bilibili

CW32L010黑客區安全運行庫保護的實現 :2.算法編程調用及注意事項_嗶哩嗶哩_bilibili

CW32L010黑客區安全運行庫保護的實現 :3. 實例代碼運行講解及FLASH讀取驗證_嗶哩嗶哩_bilibili

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1391

    瀏覽量

    116802
  • 算法
    +關注

    關注

    23

    文章

    4699

    瀏覽量

    94748
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    武漢芯源半導體CW32L010在兩輪車儀表的應用介紹

    CW32L010憑借其優異的性能、豐富的外設資源和超低功耗特性,為兩輪車儀表盤應用提供了高性價比的解決方案。其寬電壓工作范圍和工業級溫度特性,特別適合車輛電子應用的嚴苛環境。對于想采用CW32L010進行兩輪車儀表盤開發的客戶,武漢芯源半導體可提供全面的技術支持,助力客戶
    的頭像 發表于 05-13 14:07 ?128次閱讀
    武漢芯源半導體<b class='flag-5'>CW32L010</b>在兩輪車儀表的應用介紹

    武漢芯源半導體CW32L010在兩輪車儀表的應用介紹

    隨著兩輪電動車的智能化發展,儀表盤作為人機交互的重要界面,其功能需求日益復雜。武漢芯源半導體的安全低功耗單片機CW32L010憑借其優異的性能和豐富的外設資源,成為兩輪車儀表盤應用的理想選擇。 本文
    發表于 05-13 14:06

    CW32L010 Motor Control Driver無刷電機驅動板上手體驗

    CW32L010無刷電機驅動開發板上手體驗
    的頭像 發表于 12-26 09:26 ?928次閱讀
    <b class='flag-5'>CW32L010</b> Motor Control Driver無刷電機驅動板上手體驗

    方案介紹|CW32L010安全低功耗MCU:驅動高速風筒新力量

    芯源半導體CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速風筒方案,以滿足市場對高效、安全、智能的高速風筒需求。 本文將介紹武漢芯源半導體CW32L010系列單片機在高速風筒
    發表于 12-10 09:57

    【產品方案】基于CW32L010的低成本USB充電檢測儀產品方案

    實物展示 LCD版 數碼管版 模塊正面 模塊反面 一、引言 在當今智能設備時代,USB充電技術普及,高效的USB充電檢測儀對設備運行和壽命至關重要。本文介紹一款基于CW32L010F8U6芯片
    的頭像 發表于 11-28 17:23 ?1801次閱讀
    【產品方案】基于<b class='flag-5'>CW32L010</b>的低成本USB充電檢測儀產品方案

    【產品方案】CW32L010低成本工業儀表(方案組成框圖、硬件原理圖)

    一、引言 先看看L010家族產品功能: TSSOP20的封裝可以產品PCB面積極大縮小。 以下幾個特性讓CW32L010在工業儀表上應用更有優勢: 1.集成了主頻高達 48MHz 的 ARM
    的頭像 發表于 11-28 16:17 ?1082次閱讀
    【產品方案】<b class='flag-5'>CW32L010</b>低成本工業儀表(方案組成框圖、硬件原理圖)

    【產品方案】基于CW32L010低成本電動工具方案

    本方案采用武漢芯源的CW32L010F8P6作為主控實現低成本電動工具方案,通過PWM方波控制算法進行電機轉速控制,內部高精度AD轉換實現電機電壓、反電動勢、電流等信號的采樣,并實時進行故障停機
    的頭像 發表于 11-28 11:10 ?1625次閱讀
    【產品方案】基于<b class='flag-5'>CW32L010</b>低成本電動工具方案

    CW32L010低成本工業儀表介紹

    一?引言 先看看L010家族產品功能: TSSOP20的封裝可以產品PCB面積極大縮小。 以下幾個特性讓CW32L010在工業儀表上應用更有優勢: 1.集成了主頻高達 48MHz 的 ARM
    的頭像 發表于 11-28 10:56 ?753次閱讀
    <b class='flag-5'>CW32L010</b>低成本工業儀表介紹

    CW32L010 Mini Board 測評】簡介、點燈

    Sleep 和 DeepSleep 工作模式。 存儲容量 64K 字節 FLASH,數據保持 25 年 @-40℃ ~ +85℃,支持擦寫保護、讀保護安全運行庫
    發表于 11-17 06:39

    CW32L010學習筆記

    記錄CW32L010學習過程
    的頭像 發表于 11-15 17:40 ?2986次閱讀
    <b class='flag-5'>CW32L010</b>學習筆記

    CW32L010 新品初體驗

    ,本次體驗的核心板為CW32L010的TSSOP20pin的封裝版本,它集成了完整的最小系統,所有輸入輸出接口(GPIO口)均已引出,便于用戶進行各類開發與測試。核心板上不僅設有SWD下載接口,還配備了LED指示燈PB0口,通過Type-CUSB接口即可實現便捷供電,為用
    的頭像 發表于 11-14 17:45 ?851次閱讀
    <b class='flag-5'>CW32L010</b> 新品初體驗

    基于CW32L010單片機的低成本電動工具方案

    本方案采用武漢芯源的CW32L010F8P6作為主控實現低成本電動工具方案,通過PWM方波控制算法進行電機轉速控制,內部高精度AD轉換實現電機電壓、反電動勢、電流等信號的采樣,并實時進行故障停機
    的頭像 發表于 10-30 16:04 ?1675次閱讀
    基于<b class='flag-5'>CW32L010</b>單片機的低成本電動工具方案

    CW32L0100核心板的使用體驗

    最近我們迎來了CW32L010新品的正式發布,標志著嵌入式技術領域的又一次創新突破。今日,我們有幸進行該新品的首次使用體驗,以一塊L010核心板為例,體驗一下這顆芯片。
    的頭像 發表于 10-30 15:29 ?605次閱讀
    <b class='flag-5'>CW32L</b>0100核心板的使用體驗

    CW32L010安全低功耗MCU,樹立M0+產品行業新標桿!

    2024年9月26日,武漢芯源半導體CW32L010系列產品正式官方發布。這款產品以其卓越的產品性能,迅速在業界引起了廣泛關注,并成功樹立M0+產品行業的新標桿。CW32L010系列產品
    的頭像 發表于 10-09 10:12 ?954次閱讀
    <b class='flag-5'>CW32L010</b><b class='flag-5'>安全</b>低功耗MCU,樹立M0+產品行業新標桿!

    CW32L010安全低功耗MCU,樹立M0+產品行業新標桿!

    10,000次,符合標桿要求,確保了產品的長期穩定運行。 2、黑客級代碼安全防護 在微控制器(MCU)領域,保護用戶的代碼和知識產權至關重要。CW32L010系列MCU,以其創新的
    發表于 10-09 10:08
    主站蜘蛛池模板: 欧美freesex10一13 | 久草6| 日本不卡视频免费 | 放荡的俄罗斯美女bd | 亚洲最大色网站 | 男人免费看片 | 国产视频第一页 | 手机在线免费观看视频 | 久久久黄色片 | 啪啪免费小视频 | 六月色播 | 亚洲网站一区 | 黄色工厂在线播放 | 三级网站免费看 | 一区二区三区福利 | 精品成人在线观看 | 国产一区二区三区夜色 | 天天久久影视色香综合网 | a成人| 国产一级特黄老妇女大片免费 | 看全色黄大色大片免费久久怂 | 黄 色 片免费观看 | 久久久伊香蕉网站 | 爱逼综合 | 免费伦费一区二区三区四区 | 丁香九月婷婷 | 好吊色7777sao在线视频观看 | 黄色a网站 | 寡妇一级a毛片免费播放 | 亚洲综合图片人成综合网 | 97九色| 亚洲韩国日本欧美一区二区三区 | 日本人色道 | aa视频免费看| 四虎影院在线免费观看视频 | 久久精品久久久久 | 欧美性白人极品1819hd高清 | 久久综合九色综合97_ 久久久 | 一级毛片一级毛片一级级毛片 | 艹久久 | 日本黄色高清视频 |