单片机

单片机(Microcontroller, MCU)是一种集成了计算机功能的微型计算机,通常由一个微处理器(CPU)、存储器(ROM、RAM)、输入/输出接口、定时器/计数器等功能模块集成在同一芯片上。单片机是一种常用于嵌入式系统中的控制器,它被广泛应用于家电、汽车、工业自动化、医疗设备、消费电子、物联网(IoT)设备等多个领域。

新型加密单片机、定制固件和配置服务支持平台在运行之前检测和终止恶意程序

随着包括新型蜂窝基础架构在内的5G技术飞速发展,越来越多的网络和数据中心支持云计算功能的扩展,开发人员开始寻找能保障操作系统安全的新方法。Microchip Technology Inc.(美国微芯科技公司)今日发布新型加密单片机CEC1712。这款由加密技术支持的单片机配备Soteria-G2定制固件,可终止通过外部串行外设接口(SPI)闪存启动的系统中的Rootkit和Bootkit等恶意程序。

Microchip的Soteria-G2定制固件基于功能全面的CEC1712 Arm® Cortex®-M4处理器,以预启动模式,凭借硬件信任根保护为通过外部SPI闪存启动的操作系统提供安全启动功能。此外,在系统的使用期限内,这款单片机还提供密钥撤销和代码回卷保护功能,可实施现场安全更新。这款单片机符合NIST800-193指南的规定,可防范、检测、修复损害,保障系统平台固件的整体可靠性。安全启动功能和硬件信任根对系统防范威胁,防止威胁因素载入系统过程中至关重要,它们只允许系统使用制造商信任的软件进行启动。

Soteria-G2固件与CEC1712 单片机结合使用,可简化代码开发工作,减少风险,帮助设计人员更快速地采用和实现安全启动功能。Soteria-G2固件将只读内存(ROM)中实现的CEC1712不可变安全自举程序作为系统信任根。

Microchip计算产品部副总裁Ian Harris表示:“Rootkit是一种非常隐蔽的恶意程序,它在操作系统启动之前加载,可以躲开常规的反恶意程序软件,而且很难检测。防范Rootkit的一种方法是使用安全启动功能。CEC1712单片机和Soteria-G2固件旨在防范威胁,防止威胁因素载入系统。”

CEC1712安全自举程序可加载、解密和验证通过外部SPI闪存在CEC1712单片机上运行的固件。之后,经验证的CEC1712代码对首个应用处理器的SPI闪存中存储的固件进行验证。CEC1712单片机最多支持两个应用处理器,每个应用处理器配备两个闪存组件。Microchip或Arrow Electronics提供客户专用数据预配置选项。该选项是一种安全的制造解决方案,有助于防范过度创建和伪造行为。除了可将开发时间缩短几个月之外,该选项还能大幅简化配置逻辑,让客户可以方便地保障设备安全并管理设备,且不会产生第三方配置服务费用、认证费用等间接费用。

Arrow Electronics物联网副总裁Aiden Mitchell表示:“为Microchip某些旗舰产品提供安全配置服务是我们产品的重要组成部分。Soteria-G2固件和CEC1712单片机用于保护系统。随着我们进入5G时代并接触越来越多的联网解决方案和自动机器,客户对此类产品的需求将越来越大。”

除了在5G和数据中心操作系统预启动期间防范恶意程序之外,CEC1712单片机和Soteria-G2固件还能帮助互联自动驾驶汽车的操作系统、车用高级驾驶辅助系统(ADAS)及其他通过外部SPI闪存启动的系统提升安全性。

开发工具

CEC1712单片机和Soteria-G2套件提供多种软硬件支持选项。软件支持包括Microchip的 MPLAB® X IDE、MPLAB Xpress和MPLAB XC32编译器。硬件支持功能包含在编程器和调试器中(包括MPLAB ICD 4 和PICkit™ 4编程器/调试器)。

供货与定价

CEC1712H-S2-I/SX单片机(含Soteria-G2固件)已实现量产,10,000枚起售,单价为4.02美元。如需了解更多信息,请联系Microchip销售代表、全球授权分销商或访问Microchip网站。如需了解配置服务的定价,请通过secure.provisioning@arrow.com联系Arrow Electronics。如需购买文中提到的产品,访问Microchip直销网站

资源

可通过Flickr或联系编辑获取高分辨率图片(可免费发布):
应用图:www.flickr.com/photos/microchiptechnology/49548114798/

Microchip Technology Inc. 简介

Microchip Technology Inc.是致力于智能、互联和安全的嵌入式控制解决方案的领先供应商。 其易于使用的开发工具和丰富的产品组合让客户能够创建最佳设计,从而在降低风险的同时减少系统总成本,缩短上市时间。Microchip的解决方案为工业、汽车、消费、航天和国防、通信以及计算市场中12万多家客户提供服务。Microchip总部位于美国亚利桑那州Chandler市,提供出色的技术支持、可靠的产品交付和卓越的质量。详情请访问公司网站 www.microchip.com

围观 35

单片机的一个主要作用就是数据信息的处理,而在处理数据的过程中,需要一些“容器”来存放这些数据。这就好比烧饭要用到锅碗瓢盆一样。在这里,我们称这些“容器”为“存储器”。

存储器的物理实质是一组(或多组)具备数据输入/输出和数据存储功能的集成电路,用于充当设备缓存或保存同定的程序及数据。存储器按存储信息功能的不同,可分为只读存储器ROM和随机存储器RAM

ROM即只读存储器。ROM中的信息一次写入后只能被读出,而不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。

不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。

当然,“只读”这个“传统”的概念有时是可以被一些新特性的器件颠的。下面介绍的这两种类型的ROM就可以使用适当的方法进行擦除或改写。

1.EPROM

EPROM 与一般的ROM的不同点在于,它可以用特殊的装置擦除或重写其中的内容。

2.闪存FLASH

闪速存储器,又称PEROM, 它是完全非易失的,可以在线写入,并且可以按页连续字节写入,读出速度快。

RAM即随机存储器。这就是我们平常所说的内存,主要用来存放各种现场的输入/输出数据、中间计算结果,以及与外部存储器交换信息,或是作堆桟用。它的存储单元根据具体需要可以读出或改写。

RAM只能用于暂时存放程序和数据。一旦电源关闭或发生断电,RAM中的数据就会丢失。而ROM中的数据在电源关闭或断电后仍然会保留下来。这也许就是二者最大的区别吧。

本文转自:畅学电子,转载此文目的在于传递更多信息,版权归原作者所有。

围观 64

单片机应用系统中,常有用单片机的I/O口来实现自关机(彻底关机)的功能。一般用单片机的一个I/O口控制一个电子开关来实现,因单片机关电后,失去电源,所以在关机时,实现关机的IO口的电平必须用低电平。

但在这里有一个矛盾,就是在电子开关关闭电源时,因有电源滤波电容的存在,单片机系统的电压不是立即变为0,而是慢慢变低,当电压低到一定电压时,单片机 将进入复位状态、或程序跑飞状态、或不确定状态,此时单片机控制关电的I/O口也可能变回高电平,将使电子开关重新开通。

解决方法:

一般单片机最低工作电压要比正常工作的电压低一些,我们就用这个差别来设计关机电路,就是让电子开关的开通电压必须大于单片机的最低工作压,这样在单片机正常工作时,此控制电压较高,能维持电子开关的正常导通,而当单片机在关电过程中因低压而产生的I/O口的高电平,因电压较低,不足以维持电子开关的导通, 从而实现彻底的关电。


在关机状态时:

S1按下,Q2导通,单片机工作后,POWER输出高电平,Q1导通,维持Q2的导通实现开机。

在开机状态时:

1、软件关机:MCU的POWER引脚输出低电平,Q1截止,Q2关断,关机。(一般用于延时关机,象数字万用表即是)

2、S1按下,低电平通过D3使MCU的输入脚ON-OFF电平为低,MCU检测到后,通过软件关机(如1所述)

D3用于隔离,不然关机状态时MCU的ON-OFF脚为低电平,Q2将导通。

POWER 是单片机输出开关电源的,低电平是0,高电平等于单片机的供电电压(近似)

ON-OFF是单片机的输入脚,用于单片机检测S1的状态,如果不用S1关机ON-OFF脚可以不用。

来源:电子发烧友网,转载此文目的在于传递更多信息,版权归原作者所有。

围观 55

一些单片机内置硬件SPI功能,如STC15F2K60S2和昇泉MPC82G516,本文以后者为例,记述了用单片机SPI硬件功能向4位数码显示模块发送串行显示数据的应用过程。重点介绍了硬件SPI的结构功能、发送时序和应用要点,并专门介绍了SPI主机的时钟极性和相位极性,及如何根据从机硬件特点来确定主机参数。

一、 SPI协议简介

SPI是英语Serial Peripheral interface的缩写,中文是串行外围设备接口。主要应用在MPU与 EEPROM、FLASH、实时时钟、AD转换器等外设之间传输串行数据。

SPI总线占用四根线,分别是时钟线SPICLK、数据线MISO和MOSI、以及从机选择线/SS,如下图。主机是发起传输的设备,也即产生时钟脉冲的设备,从机在脉冲的作用下被动的接收或发送数据。SPI是双向传输协议,主机和从机在脉冲同步下是互为收发数据的。如果数据仅从主机向从机单向传送,则可省略MISO线。


总线上至少配置一主一从,也可以挂接多个主机或从机。主机多由MPU担任。总线可配置为:
1. 一主一从:可直接将从机SS端接低电平,可节省MPU一个IO口。
2. 二个主机: 2个MPU都配置成主机时,两机SS端直连。发起传输的主机拉低SS线,能把对方强制改为从机。
3. 一主多从:主机用不同I/O口接各从机SS端来实现片选。

二、 硬件介绍

1. 本应用采用一主一从配置。主机是单片机,从机是4位数码管显示模块。该模块不具备完整SPI功能,但能接收SPI串行数据。另外,模块需要占用单片机一个I/O来锁存输出信号。

2. 单片机MPU采用昇泉MPC82G516,内置硬件SPI功能,各引脚功能是:P1.7为脉冲SPICLK,P1.5为数据MOSI。P1.4为片选SS,P1.6为数据MISO。芯片属于51系列,与STC15系列大同小异。但其独特之处在于内置OCD接口(即片上调试功能,On-Chip Debug),可以实现不占用片上资源的在系统调试,能真正实现单步仿真。

3. 4位数码显示模块,采用2片595驱动,分别用于输出数码管的段码和位码。模块有5根针脚,除了电源VCC和GND,3根数据线分别是时钟线CLK、数据线DIO和锁存RCK。如果需要,用2个模块级联可实现8位显示。


三、 发送流程

1. SPI功能由单片机内置硬件实现,每次可发送一个字节。发送指令很简单,只要向SPI数据寄存器SPIDAT写入一个字节即可。单片机执行到该指令后,硬件会自动按照初始化配置,输出脉冲和数据。

2. SPI收发由硬件自动控制进行,发送一个字节的时间,根据SPI时钟频率的设置,约占15-450个机器周期。SPI硬件发完一个字节会置位SPIF标志,并申请中断(如果中断允许)。因此不能连续写SPI,当前一字节未发完时写入数据时,就会造成冲突。发生冲突后,SPI硬件置位冲突标志位WCOL,丢弃新写入的数据,继续完成原字节的发放。

3. SPIF与WCOL是SPI状态寄存器SPISTAT的2个标志位,编程时要注意其特点是“置1清0”。

SPSTAT (地址=84H, SPI状态寄存器, 复位值=00xx,xxxxB)

7.SPIF( 传输完成标志)

6.WCOL (写冲突标志)

4. SPI硬件单次只发送一个字节。连续发送多个字节,需要用户编程实现,方法一是写指令后,将SPIF置1清0,再循环判断SPIF,等SPIF为1后再发下一字节;方法二是使用SPI中断,在中断服务程序清SPIF,再发下一字节。

四、 SPI参数配置

参数配置通过控制寄存器SPICTL来实现,各控制位的定义如下表及说明。

SPCTL (地址=85H, SPI控制寄存器, 复位值=0000,0100B)


1. 单片机作主机,因此SSIG=1,MSTR=1。

2. 脉冲和相位极性CPOL和CPHA根据从机接收特性来确定。595芯片在“时钟CLK上升沿时采样移入数据”,假设使用正脉冲,则上升沿是其前沿,因此参数取00。如果采用负脉冲,则上升沿为后沿,参数取11。

3. 其他参数比较容易确定:SPEN=1启用SPI功能。DORD根据从机电路确定。SPR1、SPR0取00、01、10、11时,SPI时钟频率为3M、750K、187.5K和93.75K,而595芯片时钟频率可达25M。

五、 数据寄存器的读写

数据寄存器SPIDAT,地址=86H, 复位值=0000,0000B。因其内部SPI硬件实际有3个寄存器,如下图,两个缓冲器共享同一地址,但读写时操作的是不同的寄存器。

发送方向是单缓冲,只有一个发送缓冲器,因此写指令SPIDAT=X执行时,X写入的是该缓冲器,同时启动发送,数据逐位移出到MOSI线上。

接收方向是双缓冲,数据先移入接收移位寄存器,然后传输到并行读数缓冲器中。计时执行读指令X=SPIDAT,读到的X就是该缓冲器的值。该缓冲器在下一字节接收到后被刷新,因此必须及时读取。双缓冲的设计让用户不用担心读到正在移位的中间值。


六、 实际传输时序图解

模块采用了动态扫描驱动方式,每隔1ms刷新显示1位数码管,下图就是用逻辑分析仪采集的一次刷新时序,可见主机发送了2个字节,前一字节是段码,后一字节是位码。图中标示了一个字节发送的各个步骤。


第1行信号为SPI时钟,时钟极性设置为CPOL=0,表示待机时为低电平,脉冲为高电平。时钟相位设置为CPHA=0,表示脉冲前沿为上升沿(从机采样读取数据)、脉冲后沿为下降沿(主机放数据)。第2行信号为SPI数据,在逻辑分析仪软件中指定SPI协议后,软件能识别出数据内容并用蓝色条标示。第3、4两行与SPI协议无关,用于观察写指令及进出中断的时间。第5行是595芯片的锁存信号,上升沿时锁存并输出。
该传输采用了较慢的时钟频率,可以看出传输占时较长。如果MPU任务繁重,应采用中断方式来处理连续发送。

七、 SPI的脉冲、相位极性

SPI协议允许用户定义脉冲和相位极性,共有4种组合。使用哪种输出,取决于从机。下面列出了4种组合发送时序。根据595“上升沿采样”的特性,组合 00、11都符合要求,实测组合10也能正常驱动显示模块,但组合01无效。


脉冲1相位0组合:负脉冲(待机高电平),前沿(下降沿)采样。此时,主机是下降沿采样,但模块的595总是在上升沿时采样,之所以这种方式模块也能识别出正确数据,是因为主机的数据是在脉冲后沿(上升沿)后变更的,此时从机已完成采样。


八、 调试中问题记录及分析

1. 逻辑分析仪采集“锁存RCK信号”时出现干扰(出现少量随机低电平脉冲)

用逻辑分析仪测量,RCK路多出现干扰,但显示模块工作正常。说明SPI硬件发送及显示模块的595芯片接收、识别RCK信号都正常,只是逻辑分析仪采集时识别错误。于是从硬件、软件多处查找问题:

1) 开必板:更换不同晶振、更换开发板、改用MPU其他IO口
2) 分析仪:切换不同输入端、采集点从MPU引脚改到显示模块上、重启分析仪、设置不同采样频率
3) 线路:将RCK采集线远离时钟线等
4) 软件:设置不同的SPI时钟、加大RCK锁存脉冲宽度

但问题依旧。查逻辑分析仪资料,得知:逻辑分析仪有三个重要参数:阈值电压、采样率和采样深度。其中阈值电压是分析区分高低电平的重要参数。逻辑分析仪和单片机都是数字电路,它在读取外部信号的时候,多高电压识别成高电平,多高电压识别成低电平是有一定限制的。比如一款逻辑分析仪,阈值电压是:0.7~1.4V,那么当它采集外部的数字电路信号的时候,高于1.4V识别为高电平,低于0.7V识别为低电平。

RCK信号平时高电平,工作脉冲为低电平。干扰为随机低电平脉冲,说明输出高电平电压时可能偏低,有可能是供电不足所致。而开发板与仿真器都由调试仿真器的USB线供电,实际调试时也可见数码管显示暗淡。当给开发板单独供电后,逻辑分析仪采集信号正常!

2. 中断入口编号问题

写SPI中断服务程序时,从单片机数据手册查到中断号为9#。但调试程序时,始终无法进入中断,后来想到手机中断编号从#1到#14,而C语言可能是从#0到#13,将中断入口号修改为8,程序正常。

九、 代码(查询方式)

给出查询方式的代码,程序执行效果是4位数码管显示按秒加法计数值。

//本程序用SPI功能驱动4位数码管显示模块。使用SPI接口线:
// P1.7 SPICLK 脉冲 与模块上SCLK相连
// P1.5 MOSI 数据线 与模块上DIO相连
// 另外使用P1.3输出595的锁存信号,与模拟上的RCLK相连
// 595使用要点:脉冲SCK上升沿时采集移入数据,锁存RCK上升沿时锁存输出
// SPI主机传送模式,时钟和相位极性设置为00或11时均可

#include
unsigned char code LedChar[] = { //数码管段码字符转换表
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
unsigned char code segbit[]={ //8位数码管位码表,本例根据电路仅用4位
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char LedBuff[4]={0,0,0,0}; //数码管显示缓冲区

sbit RCK=P1^3; //锁存信号,上升沿有效
sbit LED=P1^0; //标记1,用于调试
sbit LED_P11=P1^1; //标记2,用于调试
sbit LED_P12=P1^2; //标记3,用于调试

unsigned char i = 0; //动态扫描的索引
unsigned int cnt = 0; //记录 T0 中断次数
unsigned long sec = 0; //记录经过的秒数

void LED_OUT(unsigned char X)
{
LED_P11=!LED_P11; //
SPIDAT = X; //写一个字节到SPI发送缓冲区
while(!(SPISTAT & 0x80)); //查询SPIF标志位,为0时循环等待,为1时退出往下
LED_P11=!LED_P11;
SPISTAT = 0x80; //对SPIF标志位 写1置0
}

void Timer0_isr(void) interrupt 1 using 1
{
TH0 = 0xFC; //T0初值,定时 1ms
TL0 = 0x18;
cnt++; //计数值自加 1
//以下代码动态扫描刷新1位数码管显示
i++; //i从0到3循环,每次刷新1位显示
if (i == 0)
{ LED_OUT(LedBuff[0]);LED_OUT(0x01); } //发送段码、位码
else if (i == 1)
{ LED_OUT(LedBuff[1]);LED_OUT(0x02); }
else if (i == 2)
{ LED_OUT(LedBuff[2]);LED_OUT(0x04); }
else if (i == 3)
{ LED_OUT(LedBuff[3]);LED_OUT(0x08);i=0xFF; } ; //修改循环变量i
RCK=0; //向595芯片发锁存脉冲信号
RCK=1;
}

void main()
{
TMOD = 0x01; //设置T0为模式1:16位定时器,脉冲默认12T模式
TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms
TL0 = 0x18;
//设置SPI控制寄存器:
SPICTL=0xD0; //高4位1101:SSIG:内控模式,1:由MSTR决定主从模式。
// SPEN:SPI功能开关,1:打开
// DORD:SPI数据顺序,1:LSB,0:MSB
// MSTR:主从机模式,1:主机
//低4位0000:CPOL时钟极性,0待机低电平,前沿上升沿,后沿下降沿
// CPHA:时钟相位,当SSIG=1时,CPHA必须为0
// SPR1/SPR0:时钟速度分别为4/16/64/1 28分频
//AUXIE |= 0x01; //开启SPI中断,APUXIE.0位为ESPI
//AUXIP |= 0x01; //SPI中断优先级为1级
//AUXIPH |= 0x01; //SPI中断优先级提为3级
//IP &= 0xFD; //T0中断优先级为0级
//IPH &= 0xFD; //T0中断优先级为0级

EA=1; //开总中断
ET0=1; //开T0中断
TR0 = 1; //启动 T0
i=0; //初始化三个全局变量
cnt=0;
sec=0;
LedBuff[0] = 0xC0; //初始化4个显示缓存
LedBuff[1] = 0xC0;
LedBuff[2] = 0xC0;
LedBuff[3] = 0xC0;
while (1)
{
if (cnt >= 1000) //T0溢出1000次为1秒
{
cnt = 0; //计数值复位
sec++; //秒计数自加 1
LED=~LED; //指示灯反相(P1.0如果接有LED可观察到闪烁)
//秒值转换为4位十进数,再查表得到段码送缓存
LedBuff[0] = LedChar[sec];
LedBuff[1] = LedChar[sec/10];
LedBuff[2] = LedChar[sec/100];
LedBuff[3] = LedChar[sec/1000];
}
}
}

来源:http://blog.sina.com.cn/s/blog_57ad1bd20102x8zy.html
转载此文目的在于传递更多信息,版权归原作者所有。

围观 1450

许多小伙伴在学完C语言后想入门单片机,但学着学着发现明明都是C语言,为什么单片机C语言和我当初学的C语言有差异呢?今天小编就来梳理我们平时所学的C语言与单片机C语言的有什么样的不同。

单片机c语言比起普通C语言增加了一些基本的指令,变量的赋值是16进制,当然单片机c语言只牵涉到普通c语言的基础部分。

具体体现在:

1.单片机中C的语法一般都对 ANSI C有些扩展,及一些特殊写法 如C51扩展的 data xdata bit sbit 一类的,还有一些中断程序写法 void int() interrput 1 一类的。

2.C是一门语言,由对应平台的编译器编译成对应平台汇编的程序,各平台的汇编不一样,当然编译器也不一样 DOS上的TC2 TC3 WINDOWS上的VC 8051的C51都有自已的编译器 。具体区别是由编译器决的,只能参考对应的编译手册,即使同种平台不同的编译器对C的扩展也有不同。

3.单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短、运行速度高、存储空间小、符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用。

C51本质就是C,是为在单片机上使用C而出来的,如果C不牢固,还是多掌握一点C再学C51,不过新增的知识也不少,而且基本上跟C无关。

4.C只是一种高级语言。它除具有一般高级语言的功能特性外,它可以很好的操作底层的硬件接口。在C语言的基础上,如果你把一些单片机的端口或特殊功能寄存器加于定义,使之方便于在 写语句的时候,直接直观的编写。这样就差不多是单片机C语言。

结语:C语言是我们入门编程所学习的一门语言,也是IOS开发、单片机开发等应用上具有重要应用的一门语言,虽然C语言与单片机C语言、C++、C#等有或小或大的差异,但他们的编译机理、表达形式都是一样的!

来源:https://segmentfault.com/a/1190000020185943

围观 106

单片机应用中,常常会遇到这种情况,在用单片机制作电子钟或要求根据时钟启控的控制系统时,会突然发现当初校准了的电子时钟的时间竟然变快或是变慢了。

于是,尝试用各种方法来调整它的走时精度,但是最终的效果还是不尽人意,只好每过一段时间手动调整一次。那么,是否可使时钟走时更精确些呢?现探讨如下:

一、误差原因分析

1.单片机电子时钟的计时脉冲基准,是由外部晶振的频率经过12分频后提供的,采用内部的定时,计数器来实现计时功能。所以,外接晶振频率的精确度直接影响电子钟计时的准确性。

2.单片机电子时钟利用内部定时,计数器溢出产生中断(12MHz晶振一般为50ms)再乘以相应的倍率,来实现秒、分、时的转换。大家都知道,从定时,计数器产生中断请求到响应中断,需要3_8个机器周期。定时中断子程序中的数据人栈和重装定时,计数器的初值还需要占用数个机器周期。此外。从中断人口转到中断子程序也要占用一定的机器周期。例如:


从上述程序可以看出,从中断人口到定时/计数器初值的低8位装入需要占用2+2+2=6个机器周期。所以,在编程时一般会把这6个机器周期加入定时/计数器的初值中。但是,从定时,计数器溢出中断请求到执行中断需要几个机器周期(3~8个机器周期)。就很难确定准确值,正是这一原因导致了电子时钟计时的不准。

二、解决方法

1、采用高精度晶振方案

虽然采用高精度的晶振可以稍微提高电子钟计时的精确度,但是晶振并不是导致电子钟计时不准的主要因素,而且高精度的晶振价格较高,所以不必采用此方案。

2、动态同步修正方案
从程序人手,采用动态同步修正方法给定时,计数器赋初值。动态同步修正方法如下:由于定时,计数器溢出后,又会从O开始自动加数,故在给定时/计数器再次赋值前,先将定时,计数器低位(TLO)中的值和初始值相加,然后送人定时,计数器中,此时定时,计数器中的值即为动态同步修正后的准确值。具体程序如下:


采用此种方法后,相信制作的电子时钟的精度已有提高了。

3、自动调整方案

采用同步修正方案后,电子时钟的精度虽然提高了很多,但是由于晶振频率的偏差和一些其他未知因素的影响(同一块电路板、同样的程序换了一片单片机后,走时误差不一样,不知是何原因),时间长了仍然会有积累误差。为此,可采用自动调整方案。实际上是一种容错技术。其自动调整原理为:实测出误差Is所需的时间,然后每隔这样一段时间后就对秒进行加“1”或减“1”调整。例如:电子钟每过50小时就慢1秒,其自动调整程序如下:


以下是一个完整实例:



结语

使用此方法调整较费时间,但效果非常好。经实验,一次调整可/以将月误差控制在Is左右,如按此方法再次测出误差Is所需的天数并进行二次调整,其精度会更高。

来源:网络

围观 86

单片机(Microcontroller)一般都有内部ROM/EEPROM/FLASH供用户存放程序。为了防止未经授权访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就是所谓拷贝保护或者说锁定功能。

事实上,这样的保护措施很脆弱,很容易被破解。单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序。因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。

单片机攻击技术

目前,攻击单片机主要有四种技术,分别是:

(1)软件攻击

该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。软件攻击取得成功的一个典型事例是对早期ATMELAT89C 系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。

(2)电子探测攻击

该技术通常以高时间分辨率来监控处理器在正常操作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。这样通过使用特殊的电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。

(3)过错产生技术

该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用最广泛的过错产生攻击手段包括电压冲击和时钟冲击。低电压和高电压攻击可用来禁止保护电路工作或强制处理器执行错误操作。时钟瞬态跳变也许会复位保护电路而不会破坏受保护信息。电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。

(4)探针技术

该技术是直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。为了方便起见,人们将以上四种攻击技术分成两类,一类是侵入型攻击(物理攻击),这类攻击需要破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成。所有的微探针技术都属于侵入型攻击。另外三种方法属于非侵入型攻击,被攻击的单片机不会被物理损坏。在某些场合非侵入型攻击是特别危险的,这是因为非侵入型攻击所需设备通常可以自制和升级,因此非常廉价。大部分非侵入型攻击需要攻击者具备良好的处理器知识和软件知识。与之相反,侵入型的探针攻击则不需要太多的初始知识,而且通常可用一整套相似的技术对付宽范围的产品。因此,对单片机的攻击往往从侵入型的反向工程开始,积累的经验有助于开发更加廉价和快速的非侵入型攻击技术。

侵入型攻击的一般过程

侵入型攻击的第一步是揭去芯片封装。有两种方法可以达到这一目的:第一种是完全溶解掉芯片封装,暴露金属连线。第二种是只移掉硅核上面的塑料封装。第一种方法需要将芯片绑定到测试夹具上,借助绑定台来操作。第二种方法除了需要具备攻击者一定的知识和必要的技能外,还需要个人的智慧和耐心,但操作起来相对比较方便。芯片上面的塑料可以用小刀揭开,芯片周围的环氧树脂可以用浓硝酸腐蚀掉。热的浓硝酸会溶解掉芯片封装而不会影响芯片及连线。该过程一般在非常干燥的条件下进行,因为水的存在可能会侵蚀已暴露的铝线连接。接着在超声池里先用丙酮清洗该芯片以除去残余硝酸,然后用清水清洗以除去盐分并干燥。没有超声池,一般就跳过这一步。

这种情况下,芯片表面会有点脏,但是不太影响紫外光对芯片的操作效果。最后一步是寻找保护熔丝的位置并将保护熔丝暴露在紫外光下。一般用一台放大倍数至少100倍的显微镜,从编程电压输入脚的连线跟踪进去,来寻找保护熔丝。若没有显微镜,则采用将芯片的不同部分暴露到紫外光下并观察结果的方式进行简单的搜索。操作时应用不透明的纸片覆盖芯片以保护程序存储器不被紫外光擦除。将保护熔丝暴露在紫外光下5~10分钟就能破坏掉保护位的保护作用,之后,使用简单的编程器就可直接读出程序存储器的内容。

对于使用了防护层来保护EEPROM单元的单片机来说,使用紫外光复位保护电路是不可行的。对于这种类型的单片机,一般使用微探针技术来读取存储器内容。在芯片封装打开后,将芯片置于显微镜下就能够很容易的找到从存储器连到电路其它部分的数据总线。

由于某种原因,芯片锁定位在编程模式下并不锁定对存储器的访问。利用这一缺陷将探针放在数据线的上面就能读到所有想要的数据。在编程模式下,重启读过程并连接探针到另外的数据线上就可以读出程序和数据存储器中的所有信息。

还有一种可能的攻击手段是借助显微镜和激光切割机等设备来寻找保护熔丝,从而寻查和这部分电路相联系的所有信号线。由于设计有缺陷,因此,只要切断从保护熔丝到其它电路的某一根信号线,就能禁止整个保护功能。由于某种原因,这根线离其它的线非常远,所以使用激光切割机完全可以切断这根线而不影响临近线。这样,使用简单的编程器就能直接读出程序存储器的内容。

虽然大多数普通单片机都具有熔丝烧断保护单片机内代码的功能,但由于通用低档的单片机并非定位于制作安全类产品,因此,它们往往没有提供有针对性的防范措施且安全级别较低。加上单片机应用场合广泛,销售量大,厂商间委托加工与技术转让频繁,大量技术资料外泻,使得利用该类芯片的设计漏洞和厂商的测试接口,并通过修改熔丝保护位等侵入型攻击或非侵入型攻击手段来读取单片机的内部程序变得比较容易。

应对单片机破解的几点建议

任何一款单片机,从理论上讲,攻击者均可利用足够的投资和时间使用以上方法来攻破。所以,在用单片机做加密认证或设计系统时,应尽量加大攻击者的攻击成本和所耗费的时间。这是系统设计者应该始终牢记的基本原则。除此之外,还应注意以下几点:

(1)在选定加密芯片前,要充分调研,了解单片机破解技术的新进展,包括哪些单片机是已经确认可以破解的。尽量不选用已可破解或同系列、同型号的芯片。
(2)尽量不要选用MCS51系列单片机,因为该单片机在国内的普及程度最高,被研究得也最透。
(3)产品的原创者,一般具有产量大的特点,所以可选用比较生僻、偏冷门的单片机来加大仿冒者采购的难度。
(4)选择采用新工艺、新结构、上市时间较短的单片机,如ATMELAVR系列单片机等。
(5)在设计成本许可的条件下,应选用具有硬件自毁功能的智能卡芯片,以有效对付物理攻击。
(6)如果条件许可,可采用两片不同型号单片机互为备份,相互验证,从而增加破解成本。
(7)打磨掉芯片型号等信息或者重新印上其它的型号,以假乱真。当然,要想从根本上防止单片机被解密,程序被盗版等侵权行为发生,只能依靠法律手段来保障。

来源:网络

围观 36

页面

订阅 RSS - 单片机