0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > EFM32系列MCU芯片加密详解

EFM32系列MCU芯片加密详解

来源: Silicon Labs
2018-05-02
类别:工业控制
eye 253
文章创建人 拍明

       相关元器件:

       型号:EFM32    品牌:Silicon Labs

  EFM32™ 32-bit Microcontrollers (MCUs)

  The energy-friendly EFM32 MCUs are ideal for ultra-low power applications. Based on ARM® Cortex® -M0+, Cortex-M3 and Cortex-M4 cores, EFM32 MCUs also include the most energy-friendly peripherals and energy modes to enable design of highly functional low power systems.

  在电子类市场中,各种山寨产品层出不穷,自主研发的产品面市如果销量火爆,那么也许不出一个月,山寨产品接踵而来,抢占市场。所以如何对核心技术进行保密设计,是自主研发产品的必修课题。本文主要介绍以EFM32系列MCU为核心的方案打造加密系统。

  EFM32单片机是由Silicon Labs公司采用ARM Cortex-M3内核设计而来的高性能低功耗32位微控制器。基于EFM32系列MCU的加密方式分为两种:

  1.生产烧录时加密

  这种加密方式设计方便,但是在生产的时候,需要注意是否有漏加密的芯片

  2.软件加密

  直接在软件代码中加密,烧录时候不用担心芯片没有被加密。

  下面详细介绍两种加密方式,在生产时加密操作步骤如下:

  1)选择下载工具

EFM32系列MCU芯片加密详解

  图 1

  2)选择需要烧录的文件,关掉DEBUG接口

EFM32系列MCU芯片加密详解

  图2

  3)烧录加密成功。

  软件加密

  软件加密即在代码内部加密。首先,我们需要了解芯片加密的DEBUG LOCK BITS地址,此地址可以在数据手册中找到,如图3:

EFM32系列MCU芯片加密详解

  图3

  LOCK Bits的起始地址为0X0FE0400。

  在Lock Bits页面中,DLW的Bit0控制Debug功能,当Bit0=1时,Debug是禁止的;当Bit0=1时,Debug是禁止的。需注意的是DLW占用4个字节。

EFM32系列MCU芯片加密详解

  图4

  了解了这些信息之后,我们加入如下代码就可以加密成功了。

  uint32_t *addr = (uint32_t *)0x0FE041fc;

  uint32_t data[] = { 0x00000001 };

  MSC_Init();

  // MSC_ErasePage(addr);

  MSC_WriteWord(addr, data, sizeof(data));

  MSC_Deinit();

  以上便是实现EFM32系列MCU加密的两种方式,希望能为自主研发产品提供一个更机密的技术保护,杜绝山寨从"芯"开始。

  微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手臂的控制等,都可见到MCU的身影。

  MCU同温度传感器之间通过I2C总线连接。I2C总线占用2条MCU输入输出口线,二者之间的通信完全依靠软件完成。温度传感器的地址可以通过2根地址引脚设定,这使得一根I2C总线上可以同时连接8个这样的传感器。本方案中,传感器的7位地址已经设定为1001000。MCU需要访问传感器时,先要发出一个8位的寄存器指针,然后再发出传感器的地址(7位地址,低位是WR信号)。传感器中有3个寄存器可供MCU使用,8位寄存器指针就是用来确定MCU究竟要使用哪个寄存器的。本方案中,主程序会不断更新传感器的配置寄存器,这会使传感器工作于单步模式,每更新一次就会测量一次温度。

  要读取传感器测量值寄存器的内容,MCU必须首先发送传感器地址和寄存器指针。MCU发出一个启动信号,接着发出传感器地址,然后将RD/WR管脚设为高电平,就可以读取测量值寄存器。

  为了读出传感器测量值寄存器中的16位数据,MCU必须与传感器进行两次8位数据通信。当传感器上电工作时,默认的测量精度为9位,分辨力为0.5 C/LSB(量程为-128.5 C至128.5 C)。本方案采用默认测量精度,根据需要,可以重新设置传感器,将测量精度提高到12位。如果只要求作一般的温度指示,比如自动调温器,那么分辨力达到1 C就可以满足要求了。这种情况下,传感器的低8位数据可以忽略,只用高8位数据就可以达到分辨力1 C的设计要求。由于读取寄存器时是按先高8位后低8位的顺序,所以低8位数据既可以读,也可以不读。只读取高8位数据的好处有二,第一是可以缩短MCU和传感器的工作时间,降低功耗;第二是不影响分辨力指标。

  MCU读取传感器的测量值后,接下来就要进行换算并将结果显示在LCD上。整个处理过程包括:判断显示结果的正负号,进行二进制码到BCD码的转换,将数据传到LCD的相关寄存器中。

  数据处理完毕并显示结果之后,MCU会向传感器发出一个单步指令。单步指令会让传感器启动一次温度测试,然后自动进入等待模式,直到模数转换完毕。MCU发出单步指令后,就进入LPM3模式,这时MCU系统时钟继续工作,产生定时中断唤醒CPU。定时的长短可以通过编程调整,以便适应具体应用的需要。


责任编辑:Davia

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

标签: MCU 芯片

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案