单片机
新型加密单片机、定制固件和配置服务支持平台在运行之前检测和终止恶意程序
随着包括新型蜂窝基础架构在内的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 。
简析单片机中的高阻态
demi 在 提交
单片机与晶振两者存在联系吗?
demi 在 提交
单片机的一个主要作用就是数据信息的处理,而在处理数据的过程中,需要一些“容器”来存放这些数据。这就好比烧饭要用到锅碗瓢盆一样。在这里,我们称这些“容器”为“存储器”。
存储器的物理实质是一组(或多组)具备数据输入/输出和数据存储功能的集成电路,用于充当设备缓存或保存同定的程序及数据。存储器按存储信息功能的不同,可分为只读存储器ROM和随机存储器RAM
ROM即只读存储器。ROM中的信息一次写入后只能被读出,而不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。
不能被操作者修改或删除。一般用于存放固定的程序或数据表格等。
当然,“只读”这个“传统”的概念有时是可以被一些新特性的器件颠的。下面介绍的这两种类型的ROM就可以使用适当的方法进行擦除或改写。
1.EPROM
EPROM 与一般的ROM的不同点在于,它可以用特殊的装置擦除或重写其中的内容。
2.闪存FLASH
闪速存储器,又称PEROM, 它是完全非易失的,可以在线写入,并且可以按页连续字节写入,读出速度快。
RAM即随机存储器。这就是我们平常所说的内存,主要用来存放各种现场的输入/输出数据、中间计算结果,以及与外部存储器交换信息,或是作堆桟用。它的存储单元根据具体需要可以读出或改写。
RAM只能用于暂时存放程序和数据。一旦电源关闭或发生断电,RAM中的数据就会丢失。而ROM中的数据在电源关闭或断电后仍然会保留下来。这也许就是二者最大的区别吧。
本文转自:畅学电子,转载此文目的在于传递更多信息,版权归原作者所有。
单片机应用系统中,常有用单片机的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脚可以不用。
来源:电子发烧友网,转载此文目的在于传递更多信息,版权归原作者所有。
一些单片机内置硬件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
转载此文目的在于传递更多信息,版权归原作者所有。