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

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

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

GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第19章 程序加密

嵌入式大雜燴 ? 來(lái)源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-05-20 09:10 ? 次閱讀

開發(fā)環(huán)境:

MDK:Keil 5.30

開發(fā)板:GD32F207I-EVAL

MCU:GD32F207IK

1 程序加密工作原理

GD32通過(guò)讀取芯片唯一ID號(hào)來(lái)實(shí)現(xiàn)程序的保護(hù),防止被抄襲。96位的產(chǎn)品唯一身份標(biāo)識(shí)所提供的參考號(hào)碼對(duì)任意一個(gè)GD32微控制器,在任何情況下都是唯一的。用戶在何種情況下,都不能修改這個(gè)身份標(biāo)識(shí)。按照用戶不同的用法,可以以字節(jié)(8位)為單位讀取,也可以以半字(16位)或者全字(32位)讀取。在這里要提醒讀者, 要注意大端小端模式 。

2 程序加密具體代碼實(shí)現(xiàn)

其實(shí)讀取ID很簡(jiǎn)單,如果存儲(chǔ)ID的變量為8位。則需要讀取12次,如下所示。

uint8_t 	Sys_ID[12],i;
for(i=0;i<12;i++)
{
    Sys_ID[i]=*( uint8_t*)(0x1FFFF7E8+i);
    printf(" %0.2X",Sys_ID[i]);
}

如果存儲(chǔ)ID的變量為32位。則需要讀取3次。

u32 Sys_ID[3];
Sys_ID[2] = *(__IO u32*)(0X1FFFF7E8); // 低字節(jié)
Sys_ID[1] = *(__IO u32 *)(0X1FFFF7EC); //
Sys_ID[0] = *(__IO u32 *)(0X1FFFF7F0); // 高字節(jié)

STM32單片機(jī)的存儲(chǔ)方式為小端模式。

【注】大小端

地址從小到大,先放低字節(jié),再放高字節(jié):小端模式

地址從小到大,先放高字節(jié),再放低字節(jié):大端模式

主函數(shù)代碼如下:

/*
    brief      main function
    param[in]  none
    param[out] none
    retval     none
*/
int main(void)
{
    uint8_t	Sys_ID[12],i;

    //systick init
    sysTick_init();

    //usart init 115200 8-N-1
    com_init(COM1, 115200, 0, 1);
    for(i=0;i<12;i++)
    {
        Sys_ID[i]=*(uint8_t*)(0x1FFFF7E8+i);
        printf(" %0.2X",Sys_ID[i]);
    }
    //ID 48 1D 35 54 33 34 34 08 33 31 35 36
    if(Sys_ID[0]==0x48 && Sys_ID[1]==0x1D && Sys_ID[2]==0x35 &&
     Sys_ID[3]==0x54 && Sys_ID[4]==0x33 && Sys_ID[5]==0x34 &&
     Sys_ID[6]==0x34 && Sys_ID[7]==0x08 && Sys_ID[8]==0x33 &&
     Sys_ID[9]==0x31 && Sys_ID[10]==0x35 && Sys_ID[11]==0x36)
    {
        printf("\\r\\nPass\\r\\n");
    }
    else
    {
        printf("\\r\\nFail\\r\\n");
    }
    while(1)
    {
        delay_ms(1000);
    }
}

3 實(shí)驗(yàn)現(xiàn)象

將程序編譯完成后下載到板子中,可以看到打印出來(lái)的唯一ID,該程序是通過(guò)現(xiàn)讀取ID在通過(guò)ID判斷,才會(huì)打印出ID后面的“通過(guò)”字樣。

1684499601688xjzva5bru7

當(dāng)然啦,每個(gè)芯片的ID是不一樣。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)注

    48

    文章

    7395

    瀏覽量

    150633
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    227

    瀏覽量

    29690
  • STM32單片機(jī)
    +關(guān)注

    關(guān)注

    58

    文章

    549

    瀏覽量

    58558
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24050
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 1 開發(fā)環(huán)境搭建

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK 1 GD32F207I-EVAL
    的頭像 發(fā)表于 05-07 23:35 ?1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>1<b class='flag-5'>章</b> <b class='flag-5'>開發(fā)</b>環(huán)境搭建

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 4 GD32啟動(dòng)流程詳解(Keil版)

    對(duì)于我們常用的桌面操作系統(tǒng)而言,我們?cè)?b class='flag-5'>開發(fā)應(yīng)用時(shí),并不關(guān)心系統(tǒng)的初始化,絕大多數(shù)應(yīng)用程序是在操作系統(tǒng)運(yùn)行后才開始運(yùn)行的,操作系統(tǒng)已經(jīng)提供了一個(gè)合適的運(yùn)行環(huán)境,然而對(duì)于嵌入式設(shè)備而言,在設(shè)備上電后
    的頭像 發(fā)表于 05-10 09:00 ?1.6w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>4<b class='flag-5'>章</b> <b class='flag-5'>GD32</b>啟動(dòng)流程詳解(Keil版)

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 7 定時(shí)器

    系統(tǒng)滴答定時(shí)器一般用來(lái)提供“心跳”作用,而GD32定時(shí)器最基本功能也是定時(shí),可以設(shè)置不同時(shí)間長(zhǎng)度的定時(shí)。定時(shí)器除了最基本的定時(shí)功能外,定時(shí)器與GPIO有掛鉤使得它可以發(fā)揮強(qiáng)大的作用,比如可以輸出
    的頭像 發(fā)表于 05-11 09:00 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>7<b class='flag-5'>章</b> 定時(shí)器

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 8 定時(shí)器

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK 1 PWM輸出的工作原理 脈沖寬度調(diào)制(PWM) ,是英文“Pulse Wi
    的頭像 發(fā)表于 05-12 22:14 ?7687次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>8<b class='flag-5'>章</b> 定時(shí)器

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 11 CPU的高級(jí)代理-DMA

    或者存儲(chǔ)器和存儲(chǔ)器之間的高速數(shù)據(jù)傳輸,因而被廣泛地使用。早在 8086 的應(yīng)用中就已經(jīng)有 Intel 的 8237 這種典型的 DMA 控制器,而 GD32的 DMA 則是以類似外設(shè)的形式添加到 Cortex 內(nèi)核之外的。可以說(shuō),DMA就是CPU的高級(jí)代理,DMA大大減輕了CPU的負(fù)擔(dān)。
    的頭像 發(fā)表于 05-16 08:59 ?3765次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>11<b class='flag-5'>章</b> CPU的高級(jí)代理-DMA

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 12 ADC

    GD32F2系列有 3 個(gè)逐次逼近型的ADC,精度為 12 位,有18個(gè)多路復(fù)用通道,可以轉(zhuǎn)換來(lái)自16個(gè)外部通道和2個(gè)內(nèi)部通道的模擬信號(hào)。其中ADC0 和 ADC1都有 16 個(gè)外部通道, ADC2
    的頭像 發(fā)表于 05-16 09:03 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>12<b class='flag-5'>章</b> ADC

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 14 內(nèi)部溫度傳感器

    GD32 有一個(gè)內(nèi)部的溫度傳感器,可以用來(lái)測(cè)量 CPU 及周圍的溫度(TA)。該溫度傳感器在內(nèi)部和 ADCx_IN16 輸入通道相連接,此通道把傳感器輸出的電壓轉(zhuǎn)換成數(shù)字值。溫度傳感器模擬輸入
    的頭像 發(fā)表于 05-17 08:58 ?5075次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>14<b class='flag-5'>章</b> 內(nèi)部溫度傳感器

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 15 低功耗

    GD32的工作電壓(VDD)為2.0~3.6V。通過(guò)內(nèi)置的電壓調(diào)節(jié)器提供所需的1.8V電源。當(dāng)主電源VDD掉電后,通過(guò)VBAT腳為實(shí)時(shí)時(shí)鐘(RTC)和備份寄存器提供電源。
    的頭像 發(fā)表于 05-17 08:59 ?7872次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>15<b class='flag-5'>章</b> 低功耗

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 16 RTC

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK 1 RTC工作原理 1.1 RTC簡(jiǎn)介
    的頭像 發(fā)表于 05-18 22:14 ?6897次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>16<b class='flag-5'>章</b> RTC

    GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)) 17 看門狗

    開發(fā)環(huán)境: MDK:Keil 5.30 開發(fā)板:GD32F207I-EVAL MCU:GD32F207IK GD32 有兩個(gè)看門狗, 一個(gè)是
    的頭像 發(fā)表于 06-03 16:00 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>指南</b>(基礎(chǔ)<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>17<b class='flag-5'>章</b> 看門狗

    【圖書分享】《STM32庫(kù)開發(fā)實(shí)戰(zhàn)指南

    GPIO入門之流水燈 4 深入分析流水燈例程 5 調(diào)試程序第二部分 庫(kù)開發(fā)中級(jí)
    發(fā)表于 03-13 17:01

    Arduino開發(fā)實(shí)戰(zhàn)指南 AVR

    第一基礎(chǔ)1初識(shí)Arduino2編寫Arduino
    發(fā)表于 08-03 16:14

    GD32 MCU原理及固件庫(kù)開發(fā)指南》 + 初讀感悟

    庫(kù)開發(fā)能夠避免每次操作寄存器時(shí)去查芯片的應(yīng)用手冊(cè),這樣能很好地提高開發(fā)效率。GD32 MCU原理固件庫(kù)開發(fā)指南這本書它詳細(xì)描述了基本所有外設(shè)的底層驅(qū)動(dòng)
    發(fā)表于 03-31 22:11

    GD32 MCU原理及固件庫(kù)開發(fā)指南》+讀后感

    2介紹GD32 MCU快速入門與開發(fā)平臺(tái)搭建的方法,包括對(duì)軟硬件開發(fā)平臺(tái)、調(diào)試工具、GD32
    發(fā)表于 06-06 21:52

    gd32和stm32程序可以互用嗎?

    gd32和stm32程序可以互用嗎? GD32和STM32是兩種不同的芯片系列,相同點(diǎn)是都屬于ARM Cortex-M系列芯片。雖然它們有相似的架構(gòu)和指令集,但是由于它們來(lái)自不同的廠商,所以它們之間
    的頭像 發(fā)表于 08-16 11:32 ?3674次閱讀