开发环境:
MDK:Keil 5.30
开发板:GD32F207I-EVAL
MCU:GD32F207IK

19.1程序加密工作原理

GD32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭。96位的产品唯一身份标识所提供的参考号码对任意一个GD32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。在这里要提醒读者,要注意大端小端模式。

19.2程序加密具体代码实现

其实读取ID很简单,如果存储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]);
}

如果存储ID的变量为32位。则需要读取3次。

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

STM32单片机的存储方式为小端模式。

【注】大小端
地址从小到大,先放低字节,再放高字节:小端模式
地址从小到大,先放高字节,再放低字节:大端模式

主函数代码如下:

/*brief      main functionparam[in]  noneparam[out] noneretval     none
*/
int main(void)
{uint8_t    Sys_ID[12],i;//systick initsysTick_init();//usart init 115200 8-N-1com_init(COM1);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 36if(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);}
}

19.3实验现象

将程序编译完成后下载到板子中,可以看到打印出来的唯一ID,该程序是通过现读取ID在通过ID判断,才会打印出ID后面的“通过”字样。

当然啦,每个芯片的ID是不一样。


欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎


资源获取方式

1.关注公众号[嵌入式实验楼]
2.在公众号回复关键词[GD32开发实战指南]获取资料提取码

《嵌入式 – GD32开发实战指南》第19章 程序加密相关推荐

  1. 《嵌入式 – GD32开发实战指南》第12章 ADC

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 12.1 ADC工作原理 GD32F2系列有 3 个逐次逼近型的ADC,精度为 12 位,有 ...

  2. 《嵌入式 – GD32开发实战指南》第3章 GPIO流水灯的前世今生

    开发环境: MDK:Keil 5.30 MCU:GD32F207IK 上一章通过控制GPIO的高低电平实现了流水灯,但只是告诉了大家怎么做,如何实现流水灯,本文将深入剖析的GPIO流水灯的前生今世,深 ...

  3. 《嵌入式 – GD32开发实战指南》第18章 CRC

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 18.1 CRC的校验原理 循环冗余校验(CRC)计算单元是根据固定的生成多项式得到任一32 ...

  4. 《嵌入式 – GD32开发实战指南》第17章 看门狗

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK GD32 有两个看门狗,一个是独立看门狗,另外一个是窗口看门狗,独立看门狗号称宠物狗,窗口看 ...

  5. 《嵌入式 – GD32开发实战指南》第6章 按键

    开发环境: MDK:Keil 5.30 MCU:GD32F207IK 6.1普通方式 6.1.1普通方式工作原理 按键 GPIO 端口有两个方案可以选择,一是采用上拉输入模式,因为按键在没按下的时候, ...

  6. 《嵌入式 – GD32开发实战指南》第14章 内部温度传感器

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 14.1内部温度传感器工作原理 GD32 有一个内部的温度传感器,可以用来测量 CPU 及周 ...

  7. 《嵌入式 – GD32开发实战指南》第2章 初识GPIO流水灯

    开发环境: MDK:Keil 5.30 MCU:GD32F207IK 2.1 GPIO工作原理 熟悉单片机的朋友都知道,学习的第一个例程就是流水灯,要想实现流水灯,首先必须了解GPIO的工作原理.GP ...

  8. 《嵌入式 – GD32开发实战指南》第20章 GD32的存储结构

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 20.1 GD32存储结构的工作原理 20.1.1 Cortex-M内核的存储器映射 存储器 ...

  9. 《嵌入式 – GD32开发实战指南》第21章 I2C

    开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 21.1 I2C工作原理 21.1.1 I2C串行总线概述 I2C总线是PHLIPS公司推出 ...

最新文章

  1. Python3 websocket server与client
  2. 【个人总结】知识晶体的前中后台
  3. maven(三)最详细的profile的使用
  4. 实现根据id查询房源数据的GraphQL服务
  5. 几何级数 函数 matlab,matlab 实验05数据的统计分析
  6. IDEA写sql语句的时候没有提示信息的处理办法
  7. (47)VHDL实现8位奇偶校验电路(for loop语句)
  8. 共享代码库,为何总被程序员弃用?
  9. 查询SQL最近一次启动时间
  10. 招聘PHP聚合系统,Thinkphp5开发OA办公系统之招聘申请
  11. 原型工具Axure:常用效果制作(选中、淘宝网导航、轮播图、toast效果、呼出键盘、省市二级联动、步进器、订单详情案例、中继器)
  12. JAVA里面一加到一百等于多少_从1加到100等于多少 【求和算法汇总】
  13. 从表征到行动---意向性的自然主义进路(续五)
  14. 【突发】Telsa致命车祸细节报告:人为设定超速15%(下载)
  15. 什么是视频内容推荐引擎?
  16. linux防火墙之firewalld
  17. 基于CAN的网络管理NM(network management)
  18. 编译问题追踪 :高通驱动移植 <utils/Log.h>问题
  19. [转] 心中永远是晴天
  20. linux 删除卸载软件

热门文章

  1. coco人体姿态估计标注软件
  2. 教你“强人锁男”——java并发编程的常用锁类型
  3. 秦时明月--动漫人物介绍
  4. 矩阵中的entries是什么
  5. android tv 实现弹出通知
  6. 2019丘成桐中学科学奖计算机,2019年丘成桐中学科学奖总决赛获奖名单
  7. mongoose 更新保存数据的时候自动插入__v
  8. 机器学习在信息安全领域的应用现状和畅想
  9. 阿里巴巴编码规范认证
  10. 英特尔 11 代酷睿桌面酷睿 i9-11900K登场