物联网

恩智浦智能网关平台完成对亚马逊AWS Greengrass集成 为边缘计算和物联网云平台提供安全高效支持

恩智浦半导体(纳斯达克代码:NXPI,以下简称“恩智浦”)今日宣布与亚马逊AWS开展合作,在其设计研发的Layerscape智能网关平台上成功完成对亚马逊AWS Greengrass的集成。亚马逊Greengrass软件程序能将AWS云服务扩展至本地设备,以便收集并分析更靠近信息源的数据,同时使得在本地网络中与其他设备间的安全通讯成为可能。

这一融合为边缘计算和物联网云平台的互动提供了高效的安全支持,实现了业务的敏捷交付,进而为家庭、企业和其他商业环境的用户提供国际水平的安全的物联网服务。未来,双方还将围绕边缘计算和云平台共同开展产品研发、业务开拓和市场推广工作方面的合作,通过协同创新旨在保证物联网时代的数据安全。

恩智浦提供的智能网关平台采用其自主研发的QorIQ® Layerscape架构处理器。该处理器系列不仅具有卓越的边缘计算能力和安全性能,而且还可将 AWS云服务 无缝扩展至设备端,以便在本地实时处理物联网设备采集的数据同时,仍可将数据在云端进行管理、分析和持久存储。Layerscape系列处理器采用了业界领先的64位ARMv8架构,具有体积小、功耗低、性能高的特点。产品线从单核、双核、四核到八核SoC一应俱全。该系列处理器还集成了强大的网络、安全、存储和TSN等硬件加速引擎和可编程的应用接口,借助恩智浦精湛的安全连接软硬件技术,为边缘端提供强大有效的计算、安全、虚拟化、存储和实时响应能力。凭借其高性能与低功耗完美结合的优势,Layerscape处理器已成为SDN/NFV边缘计算节点、企业级、工业级及家用级智能网关设备的首选平台。

恩智浦半导体数字网络事业部亚太区市场总监曲大健表示:“恩智浦致力于通过创新与合作驱动物联网行业的发展。恩智浦Layerscape与亚马逊AWS的集成融合不仅有效提升了边缘计算与云平台的运营效率,还消除了物联网迅速发展下的安全隐忧。能够与亚马逊合作,恩智浦感到十分欣喜,我们期待双方携手共促物联网生态的健康发展,助力构建智能互联世界。”

亚马逊Greengrass 能够帮助客户轻松构建并实现软件功能在边缘与AWS云端之间的无缝转换,以最少的成本帮助客户获得较低的延迟和更好的体验。恩智浦不仅在工业物联网和互联网领域拥有丰富的行业经验和广泛的客户基础,在智能硬件系统领域也拥有多年的研发投入与经验积累,成为亚马逊AWS在边缘计算、云服务和安全连结领域的首选合作伙伴。

在当今及未来的物联网网络架构中,网关设备发挥着越来越重要的作用。它既提供传统网络协议的基本服务,还承担对下连设备的智能化管理,本地化计算存储,端到端的网络安全连接,为各种业务提供低成本、高效率、高质量的交付管理等功能。作为全球领先的安全连接及基础设施解决方案提供商,恩智浦设计的Layerscape智能网关能广泛应用于智能家居、智慧城市、工业物联网和人工智能领域。未来,恩智浦将携手更多物联网产业链的合作伙伴,协力推动中国物联网的落地与加速普及。

围观 152

来源:单片机与嵌入式系统应用

引言

物联网市场呈现飞速增长的发展,在这些领域蓬勃发展的背后,MCU作为物联网的核心器件,要满足怎样的条件才能符合用户产品的需要?更多联网产品的出现,使得MCU的功耗是否要越来越低?MCU是否要同FPGA和无线模块高度整合在一起,更加集成化地服务于上述技术领域?究竟什么样的MCU才能抓住机遇,登上物联网市场高速增长的列车?

业界声音

连接能力、能量模式和集成功能是MCU必备的素质

Silicon Labs32位微控制器 产品高级营销经理 ivind Loe

(1) 连接能力是物联网的必备条件

无论现在还是未来,连接能力都是物联网(IoT)连接设备中的微控制器的关键特性之一。强大的无线连接能力不仅对许多物联网应用而言是必需的,而且这些应用也需要更先进的特性,例如对多协议无线的支持,可用来处理诸如多种网络的调试和共存这样的问题。能够使通信信道安全对于保护物联网系统免受入侵也是至关重要的。安全性应该通过硬件加速来最大化效率、响应时间和电池续航能力,因为数量众多的物联网设备都是由电池供电的,或者拥有有限的能源。

此外,高效的传感器接口、灵活计时外设和高集成度通信外设也是关键的构件,这些外设必须都能够在深能级模式中自主工作,以最小化能量损耗。

物联网开发人员需要能帮助自己去实现能效最大化、调试问题和优化网络的开发工具。强大的软件构件也是非常关键的,它可以使开发人员致力于实现产品的差异化,同时无须为每个设计项目进行重复性的工作。

(2) MCU必须要有精心设计的能量模式

一些物联网应用,如智能抄表和智能信用卡,可能会有极低功耗的要求;而诸如智能手表等其他应用,可能对MCU本身的低功耗要求并没有那么严格,因为手表中其他的元器件可能占据了电流消耗的主要部分。

为了适合各种不同的应用,MCU必须拥有精心设计的能量模式,支持MCU去实现电流消耗与响应时间和功能之间的平衡。举例来说,诸如智能信用卡这种需要睡眠模式下电流消耗低于50 nA的应用,可以使用Silicon Labs的EFM32 Gecko MCU和Wireless Gecko SoC的EM4模式。EM4模式拥有最低的电流消耗,但同时只提供少量的外设且唤醒时间更长。而智能水表应用则宁愿使用Gecko MCU和无线MCU的EM2模式,因为EM2模式允许低于1 μA的电流消耗,同时允许复杂的传感器接口自主运行,以便水表处于休眠模式时仍可测量水流量。

(3) 集成功能对于MCU的众多好处

将各种功能集成到MCU中有许多益处,包括更低的解决方案成本、更小的占板面积和更高的功能集成度,进而可产生更高的性能和更低的能耗。我们也看到了对于验证无线模块的高度需求,该无线模块包含一个无线MCU,同时集成了包括天线在内的所有外部无线元件,从而使产品开发人员可以极其容易地将无线功能集成到自己的产品中。

安全防护是MCU急需解决的问题

新唐科技股份有限公司
单片机应用事业群技术经理 凌立民

物联网已开始席卷全球应用领域,成为市场关注焦点,根据高德纳 (Gartner) 物联网预测报告显示,2017年全球物联网装置数量将会达到84亿个,市场份额可达到1 700亿美元,而到2020年装置将成长至204亿个,份额达2 936亿,可见物联网市场为未来之新兴成长动能,台面上各家厂商亦已经积极展开布局。

进一步分析物联网应用范围,其应用范围相当广泛,包含智能医疗、智能家庭与城市、智能工厂、智能交通、环境监控与安控等;其中物联网终端设备为能支持各类型平台,串连网络传输与应用,因此必须具备高效能的运算能力,笔者相信高效能已经成为厂商竞逐的杀戮市场;但除了效能外,物联网终端设备更重要的是设备必须时刻无线连结上网,无时无刻不存在安全隐患,设想一个家庭的电、水与瓦斯等设备装设了可受远端管理的连网装置,如果能轻易被黑客窃取控制权,轻则导致能源供应中断,重则可能引起人身安全或重大公安意外。因此,作为物联网核心器件的单片机,除了效能外,更该考虑的是如何顺应日益严峻的连网安全需求。

目前物联网终端节点,大部分只配备了基础资源进行简单的感测与资料传输工作,但伴随着云计算与大数据的兴起,许多关键性的资料存储与运算都至云端进行,资料到达云端前会经过连接层、路由器层、通信协定连线层及网际网络层等,资料透过不同的装置传送,传递过程皆有可能出现安全风险;参考OWASP (Open Web Application Security Project) 组织所整理的物联网最可能引起信息安全与实体安全防护问题的疑虑之前十项为:

不安全的网络界面;认证/授权不足;不安全的网络服务;传输加密机制的缺乏;隐私权防护不足;不安全的云接口;不安全的移动设备接口;安全配置不足;不安全的软件/韧体;不安全的硬件设备。

不难发现,除信息安全外,实体安全防护仍是物联网最需要解决的问题。ARM公司在2016年10月发布了过去仅在CortexA系列才配备的TrustZone技术的CortexM23和CortexM33处理器,这两款处理器都是基于ARMv8-M架构的新型CPU;TrustZone技术可视为将软件运行在不同的处理器区域上,如安全区 (Secure Zone) 和非安全区 (NonSecure Zone) ,彼此互动将受到严格管制,我们可以想象如同在安全区开了一份白名单,唯有符合白名单条件才能通行,两种软件方能进行互动,因此TrustZone让通用型单片机借由白名单规则来防范恶意程序,满足物联网设备所需的实体安全防护需求。

当然安全防护有不同等级,以ARM 公司官方的分类来看,嵌入式系统 (Embedded System) 安全等级的考虑分为四类,安全性从低至高为应用级防护 (Application Level Security)、进阶型防护 (Privilege Level Security)、TrustZone防护 (TrustZone防护)、防窜改防护 (Antitampering Security)。

应用级防护本质上为软件所提供的安全机制,几乎所有市场上的处理器 (CPU、MPU、MCU等) 皆可以支持此等级的安全需求;进阶型防护在执行时将系统程序分类成Privileged和Unprivileged 状态,类似开了一份黑名单给管理单元来预防破坏的恶意程序,以警告或强制停止系统运行等方式进行保护,由特定等级的MCU才能做到;TrustZone防护仅少数MCU可以做到,如CortexA 系列或CortexM23和CortexM33系列;防窜改防护等级是针对特定用途所设计的芯片,考虑的是MCU本身对实体攻击 (Physical Attack) 的防护,如MCU线路布局设计、引脚信号不可侦测性、整体软件运行速度调整防止比对等进行防护。

上述四类的安全防护等级与投入的资源相关,设计者可思考自己的MCU应用系统需要提供的安全防护等级;一般应用级防护适用于所有处理器,故其出货量成长最为快速;进阶型防护可利用此类MCU内建的MPU (Memory Protection Unit)来设定专属记忆体保护区块,以运用于进阶资安需求的应用,例如一些未连网的装置或对连网安全不是那么有迫切需求的电子产品,TrustZone防护可适用于更高安全层级软件资产安全保障需求的生物办识领域(如指纹辨识应用、智慧连网装置如电子锁应用与门禁系统等),更可在MCU应用系统领域里实现由TrustZone所支持的更加安全的二次开发 (Collaborative Secure Software Development),同时兼顾连网装置在设计功能上多样性需求的弹性,非常适合用于打造安全之物联网环境,其成长力道不容小觑;至于防窜改防护MCU,例如金融行业的相关卡类应用可以说是对芯片安全防护要求等级最高的,可采用防窜改防护等级,保护机密资料不易被入侵。

物联网将持续发酵与带动半导体产业新兴应用发展,IC Insights预估,IC市场从2015年至2020年成长动能除车用市场外,以物联网市场成长最为快速,年复合增长率为12.8%。相信各家厂商要决战全球物联网市场,除了必须善用原有竞争优势,发展关键技术以外,安全相关的技术亦扮演举足轻重的角色,唯有确保了安全性,才能在此波商机中,抢得一席之地。

飞腾公司FT2000/64芯片性能追平Intel

2016年8月,飞腾公司发布了FT2000/64芯片,其通过集成高效处理器核心、基于数据的大规模一致性存储架构、层次式二维Mesh互连网络以及自定义扩展接口,搭配独立的存储扩展芯片(CMC),提供业界领先的计算性能、访存带宽和I/O扩展能力。

物联网的建设离不开海量服务器的支持,虽然ARM叫嚣着进服务器市场叫了不少年,但是到目前为止,产品并不多。所以,能有一款逼近了Intel的性能和性能功耗比的芯片,对整个ARM架构占领服务器市场来说都是意义重大的。

编辑视角

随着物联网时代的复杂化,海量数据需要被物联网硬件采集,大型的服务器同时要对海量数据进行处理、分析,对于64位MCU会有大规模的需求,将刺激64位MCU的大幅增长;而如何在低功耗的前提下又能实现较高的运算能力,成为摆在MCU厂商面前的一道难题,超低功耗MCU是物联网时代的必备条件;物联网环境下,要通过传感器感知外界信息,通过处理器进行数据运算,通过无线通信模块发送/接收数据,因此采用集成传感器+MCU+无线模块的方案才是MCU要抓住的机遇。

随着MCU技术的成熟、芯片设计技术的普及,以及对市场的充分了解,物联网时代不断涌现的巨型企业,必然会走专用MCU的创新之路。近年来许多大用户直接发展自己的专用MCU,如科大开发用于超级计算机、服务器的MCU、华为开发手机专用MCU,最近小米的松果芯片也面向市场,种种市场现象都表明,实现个性化的MCU创新定制才能抓住机遇,登上物联网市场高速增长的列车。

围观 319

来源:SiliconLabs微信公众号

在上一节中,您了解了一些软件开发的基本实践和提示。我们在本节继续讨论这些主题,包括内联函数,读取和写入闪存(包括用户页面闪存),以及如何避免缓冲区溢出。我们将讨论类型转换的潜在问题,以及如何在出现问题时用配置锁解决问题。

根据下列重点步骤写好代码,一切都会更好!――续
(本系列1到8部分请参加往期文章:
http://community.silabs.com/t5/Official-Blog-of-Silicon-Labs/Essential-B...

九 内联函数的影响与限制

如果您在函数的前面定义关键字“inline”,则告诉编译器您希望将该函数复制到代码中,就像是直接输入代码而不是作为函数。作为程序员,你希望这可以加快代码执行速度。每当在C中调用函数时,输入参数的内容,在函数完成时,代码应该与返回地址一起被放置到栈上,然后代码跳转以执行函数。通过内联函数,您打算绕过该将数据移入和移出堆栈的时间。然而,C编译器或多或少地会用到这一技巧,因为小的函数将由编译器自动内联。编译器将忽略对大型函数的这种内联建议,编译器已经确定这些函数不会从加速中获益。
内联函数不能包含本地静态变量。由于函数内容要在代码中替换,因此对函数作用域私有的静态变量没有意义。内联函数没有作用域。

十 读写闪存的区别

在EFM32中从闪存的任何区域读取数据非常简单。可以使用指向内存地址的指针访问闪存,如:
volatile uint8_t* address = 0x1000;
uint8_t my_value =*address;

通过在地址变量前面放置星号,您可以解除引用指针,这将提供系统地址0x1000的字节大小的内容。从闪存检索的字节数将根据my_value的变量类型而有所不同。例如,定义为uint64_t的my_value将从地址0x1000到0x1007同时获取8个字节。因此,执行my_value ++作为64位无符号整数指向0x1008。

写入闪存是一个更复杂的业务。所有闪存将存储器组织成“页面”,其将可写入单元组合在一起,成为只能作为一组擦除的chuck。因此,如果要写入单个字节的非易失性存储器,则必须先擦除整个页面。对于程序员来说,这意味着你必须首先读取整个页面的内存,将它存储在RAM中,擦除页面,然后将修改的字节写回整个页面,你在操作的中间不能失去电源,否则你将永远失去了那个页面的数据。通常也有时间含义,因为擦除和写入页面比读取值需要更多的时间。当一页闪存被擦除时,该页的所有内容被复位为1,或在字节大小的存储器查看器中为0xFF。因此,当你写一个字节到内存,你只是清除那些不是1的位。
要写入EFM32闪存,另一个要求是,写入闪存的功能必须驻留在RAM中,而不是在正常执行代码所在的闪存中,在那里相同的代码正被执行。这要求任何意图写入闪存的函数也将被执行的RAMFUNC声明,就像在ramfunc.h库实用程序文件中定义的那样。

十一 将持久数据存储在Flash用户页面闪存中

主闪存从地址0开始,并根据EFM32模型有着不同的容量上限。有关特定芯片的主闪存结束的位置,请查看参考手册。除了内置闪存,还有一个内存区域,用于外部闪存扩展,其位于内部主存储器之外,最高可达24 MB。上一节中所述的任何读取或写入主闪存的操作都可用于访问主闪存。但是,每次对芯片编程时,或者如果器件被擦除,存储在程序使用的区域中的数据将被新的代码覆盖。因此,当执行闪存更新过程时,例如,在引导加载器中,通常使用对主闪存的读取或写入。您当然可以随意使用位于程序大小以上的闪存,只要您意识到如果芯片通过器件擦除操作或JTAG编程序列擦除,它将被擦除。

EFM32提供了一个单独的闪存存储器页,它不会被器件擦除操作或JTAG编程操作擦除。闪存的这个区域称为用户页,并从地址0x0FE00000开始。可用的内存量是单页,并且闪存页面的大小根据EFM32芯片的型号而变化。有关闪存页面的大小,请查看数据手册或参考手册。您可以将此页面用于从设备擦除操作(例如设备序列号,设备校准数据或每个设备特定的任何数据)开始,从引导到引导的设备上保留的任何内容。

十二 避免缓冲区溢出和可能造成的破坏

当使用计算机开发代码时,您很幸运能在具有操作系统,内置文件系统和显示屏幕的系统上开发。当你的软件遇到麻烦,操作系统开始采取行动,帮助你,并通知你,你试图访问超出程序范围内的内存,或者你造成了一些故障。在开发嵌入式代码时,你没有这些帮助。没有操作系统来监视事情,以确保你的程序保持在一个很好定义的边界。如果你的代码决定写数据到地址零或一百万,MCU将尝试做它被告知的任何事情。它不能告诉你,你不知道你在做什么,因为没有限制你的程序可以做什么。你种情况有好坏两个方面。

嵌入式开发人员面临的一个大问题是缓冲区溢出。在嵌入式中工作意味着对存储器地址的大量直接操作。如果你的程序开始表现不规律,或者你看到一个看起来改变其值而不设置的变量,缓冲区溢出可能是罪魁祸首。

首先要注意的事是显而易见的。如果定义一个长x个字节的数组,请不要写超出x-1。如果在名为foo的数组中有x个项目,则只能将foo [0]映射到foo [x-1]。坏事是,如果你寻址foo [x],foo [x + 1],等等,你的代码仍然有效。 MCU将满意地写入任何其他变量恰好超出foo [x-1]的位置。然后你的项目开始出现问题。

当你调整指针,而将指针转换为不同的类型时,这也可以失去控制。例如:

void some_function()
{
// Array of just 4 bytes
uint8_t my_array[4];

// Pointer to group of 4 bytes
uint32_t * my_ptr =(uint32_t *) my_array;
// foo is assigned all 4 bytes of my_array,
int foo =*my_ptr;

// then my_ptr is incremented by one
// which to my_ptr's type means 4 bytes
// So my_ptr is now sitting out of bounds
my_ptr++;
}

以上演示了为什么使用在创建时是单向键入的结构,但稍后由不同类型的指针使用需要小心的原因。你可以做类型转换,但并不意味着你应该做。

另一种可以遇到缓冲区溢出问题的方法是忘记局部范围的限制。在C中,函数完成的大部分工作都是在传递给函数的指针上执行的。C函数的返回值通常被限制为“状态”字节,因为简单的值很容易从堆栈中的C函数返回,而其他结构很难返回。例如,一个简单的数组是局部的一个函数:

// This function will generate a compiler warning:
// warning: function returns address of local variable
int* some_function()
{
int my_array[4];
return my_array;
}
// This function has no warning!
int* some_other_function()
{
int my_array[4];
int* foo = my_array;
return foo;
}

一旦函数返回,分配给my_array的内存将被系统回收并分配给需要内存的下一个东西。如果从C函数返回一个指向本地数组的指针,编译器不会警告你,MCU会做你所要做的事情。如果在函数返回之后没有新的内存分配,代码有时会工作。你的解决方案将是间歇性的!

// This is a better way, pass pre-allocated pointers intothe function
// “int my_array[]” and “int * my_array” are identicalfor function parameters
void some_new_function(int my_array[])
{
my_array[0]= 1;
}

十三 精通类型转换

当你在嵌入式开发中“触及核心”时,你会经常使用小量的信息,所以你最终经常使用有限的可变大小(例如8位寄存器)寄存器,从一种类型转换到另一种类型。本节的一些例子展示了在uint8_t类型和uint32_t类型上增加指针时,你必须注意对地址的影响。此外,还必须了解C编译器如何解释和转换类型。

将类型从一种类型转换到另一种类型实际上不执行任何转换。它不是一个函数,而只是一种告诉编译器如何解释数据的方法。当你分配不同类型的变量,C编译器应该警告你,但编译器并不总是警告你这一点。例如,考虑将有符号整数转换为无符号整数的情况,如下所示:
int8_t a = 0; // Range is -128 to +127
uint8_t b = 0; // Range is 0 to 255
long c = 0; // Range is huge, both positive and negative
a =-64; // a can be negative
b = 64; // b can only be positive
c = a + b; // c is 0
a = b; // Converting a signed to unsigned is OK, in this case
c = a - b; // c is again 0
b = 128; // b is now bigger than a can represent
a = b; // a is now converted to -128
c = a - b; // c = -128 - 128 = -256!

这个例子显示了当你的变量变大时会遇到的麻烦。事情工作正常一段时间,但然后当你的变量超过范围,他们开始失败。确保在转换类型时知道您想要什么。大小为8的uint不能容纳超过0到255范围的任何内容,8位的int不能容纳超出-128到+127的任何内容。简单地把一个大的uint8_t作为一个int8_t不能将你的int8_t变为一个更大的int。它仍然限制在+127。如果你想增加它的范围,你必须使用更大的类型,如int16_t。

十四 使用配置锁来缓解故障代码的问题

有时候,当嵌入式工程师对指针进行数学运算时,我们会使用我们的软件来影响硬件。一种保护你的代码不因缓冲区溢出和其他糟糕的指针算法而造成严重错误的方法是使用配置锁。许多EFM32外设上可用的配置锁需要一个特殊值写入配置锁寄存器,以允许更改外设配置。这防止错误行为代码改变设备的整体配置。

编码成功的关键

从现有示例开始,然后使用命名良好的变量和大量注释记录您的更改。进一步了解C语言,并了解在何处以及如何声明变量和函数。不要尝试写入尚未擦除的闪存或超出变量可访问范围的内存。

在下一节中,我们将学习如何在SimplicityStudio IDE中更好地控制软件构建。

围观 302

随着物联网智能化的提升和不断迭代,FPGA将发挥更多的数据预处理、桥接、I/O扩展等作用。

电子企业的成长一般都会呈现“S型”曲线,与产业的走势休戚与共。要与之对抗,需应对技术和商业模式的双重挑战。英特尔PSG(可编程解决方案事业部)产品营销与策划副总裁Alex Grbic认为,未来万物皆互联的时代,技术层面要解决互操作性,满足相关标准协议,或某应用层面的协议,以及如何在大量数据的收集和处理的同时提升性能和降低功耗。商业层面涉及系统的灵活性和可扩展性,此外价格是重要考量。因而,对于IC的革新至关重要。

单打独斗拿不下物联网?MCU需要FPGA助攻

01FPGA适应智能化和I/O扩展需求

在物联网的方案中,MCU扮演核“芯”角色。但随着应用的更新迭代,MCU+的趋势也愈来愈明显,特别是MCU+FPGA应用广泛,以满足性能、可扩展以及集成的要求。

Alex Grbic举例说,以汽车业为例,随着智能化的提升,汽车传感器会越来越多。此外在显示方面,不仅LCD显示屏的数量会翻番,而且分辨率要求也越来越高,需要芯片进行更高速的处理、支持更高的带宽。在工业和嵌入式视觉领域,也需要不断满足智能、视频图像和传感器等的升级需求,处理更多的数据,支持更高的I/O带宽。

这时“单打独斗”的MCU或难以“招架”,需要协处理器来做一些数据预处理,或I/O扩展。相较而言,低端FPGA因其配置和可编程,不失为协处理器最佳选择。

“比如在视频监控中,FPGA可作为视频信息预处理后,再交付给MCU运算。或者在汽车智能应用中用于后视摄像头和传感器融合,进行多传感器数据的高速处理,再传给MCU进一步处理。针对把成本和功耗作为设计决策关键要素的应用,则可做芯片之间的桥接、I/O扩展等。此外,在某些应用场景中,FPGA亦可单独做主芯片。”Alex Grbic表示。

虽然低端FPGA作用显著,但对其也提出了支持高速收发器和硬浮点运算的新要求,需要与时俱进。英特尔PSG最新发布的低端Cyclone 10 FPGA可谓有备而来。

02新FPGA的“和而不同”

虽然FPGA玩家屈指可数,但低端FPGA基本是个个涉足,竞争激烈。但Cyclone 10 FPGA与其他低端FPGA不同的是,其GX型号是业界首款集成10G收发器和硬浮点数字信号处理(DSP)的低功耗FPGA,处理速度高达134 GLOP,性能相对前一代Cyclone V有两倍的提升至1.4G,但功耗却与其相当。而LP型号则更强调的是低功耗和低成本,功耗仅为前一代的60%。

因而,在高I/O效能及对速度有关键性需求的应用,包括汽车、工业和嵌入式视觉领域,GX完全胜任;这些应用涉及的芯片之间的桥接、I/O扩展等,LP亦可发挥作用。

单打独斗拿不下物联网?MCU需要FPGA助攻

对于成本和功耗的双重优化,Alex Grbic英特尔PSG的诀窍在于:一是采用台积电成熟的20纳米工艺;二是架构的创新和软件工具的优化,如针对FPGA的应用场景会定制或者筛选匹配的软件工具。架构创新。三是测试和封装的一些流程的优化。

值得注意的是,Cyclone 10 FPGA集成了可定制的软核(Nios II处理器),实现可编程和可配置,但是不支持ARM,是否英特尔的FPGA策略会有所改变?Alex Grbic回应说,英特尔现有的Cyclone V和中端Arria 10和Arria V均支持ARM,上一代的Cyclone V可平移到Arria 10和Arria V。未来的产品规划也都会将集成ARM的SoC纳入其中,这不会改变。

03成英特尔IoT大战略重要一环

值得注意的是,英特尔PSG开发的 Cyclone 10,锁定汽车、工业、嵌入式视觉等应用,与英特尔物联网部门的战略相当一致。

近些年英特尔在全力开发更开放、安全及可扩充的IoT解决方案,构建IoT生态圈。将Altera纳入囊中后,FPGA也成为其大生态良性循环的重要棋点。

Alex Grbic也着重指出,Cyclone 10与英特尔IoT的战略相符。英特尔的FPGA可涵盖从万物到云端的所有领域。Cyclone 10主要应用场景集中在万物和管道端,其中价值在于进行智能化数据处理,或预处理完再上到云端,减轻云端负荷。针对更高端的云端应用,则可采用英特尔中端和高端的FPGA。

单打独斗拿不下物联网?MCU需要FPGA助攻

如今,中高端FPGA在云端+CPU或+GPU之势正兴,英特尔推低端Cyclone 10,或意图进一步加强在万物和网络端的实力。而有着英特尔的大生态规划及先进的工艺节点“护航”。Cyclone 10的市场表现亦值得期待。

来源:智慧产品圈

围观 279

在前一节中,你了解了一些帮助你进行硬件原型设计的重要原则。在本节中,我们将分享在软件开发方面的经验教训。关键词extern,static和volatile都是什么?你应该在你的代码中使用递归还是malloc()?

根据下列重点步骤写好代码,一切都会更好!

一 查找硬件设备的现有软件示例

开发任何嵌入式解决方案的第一步是找到可以使您的任务更简单的示例。您在自定义解决方案中找到的特定部分的软件示例将帮助您以另一种方式“查看”设备,并帮助您重新解释设备规格,即使这些示例是针对其他计算机架构或软件语言的。

二 编译器的代码

没有完美的计算机软件语言。所有语言都有自己的优势和弱点。用于EFM32家族的Simplicity Studio中使用的软件语言是C. C语言有着很长的历史,它被广泛信任,并且在嵌入式设计上表现良好,但是其语法及特性很难掌握。当你在C中编码时,你实际上是为编译器和其他构建工具编写指令。记住这一点。C语言是“接近金属”的语言,因为您的代码在人类可读格式下编写的代码,汇编代码和二进制映像的构建过程的结果之间仅有几个步骤。

C代码具有严格的类型,要求某些变量匹配得足够好以执行安全赋值。这是为了保护你不要做愚蠢的事情,比如变量(即指针)的地址和变量的内容。但是经常在嵌入式开发中,您需要能够将纯数字转换为地址,以便指定寄存器地址。这需要你熟悉类型转换,以告诉编译器你真的知道你在做什么。

三 使用描述性变量和函数名称

你可以做的最好的事情是确保你的代码设计得很好,使用描述性的变量和函数名。在C代码中没有与长名称关联的运行性能损失。当构建工具将C代码转换为二进制机器码时,将删除所有标识符。请考虑在FAT文件系统(FF)库中找到的以下代码段:

res= dir_sdi(dj, 0);
if (res == FR_OK) {
do{ /* Find a blank entry for the SFN */
res= move_window(dj->fs, dj->sect);
if(res != FR_OK) break;
c= *dj->dir;
if(c == DDE || c == 0) break; /*Is it a blank entry? */
res= dir_next(dj, 1); /*Next entry with table stretch */
} while (res == FR_OK);
}

上面的代码有一些注释,这当然有帮助,是一件非常好的事情,但是很难通过查看变量,函数,枚举和预处理符号知道这个代码的确切原因。考虑使用以下代码作为替代:

// Load the first target_directory entrywithout table stretch
result = set_directory_index(target_directory,NO_TABLE_STRETCH)
if (result == FAT_RESULT_OK)
{
//Look for a blank entry for the Short File Name over all directories
do
{
result= find_next_window_offset(target_directory->file_system_object,target_directory->current_sector);
if(result != FAT_RESULT_OK)
break;

//Window offset was OK, check the entry
short_file_name= *target_directory->short_file_name;

//Is it a blank or unused entry?
if (short_file_name[0] == DELETED_DIRECTORY_ENTRY_BYTE
||short_file_name[0] == UNUSED_DIRECTORY)
break;

//Get the next entry with table stretch
result= get_next_directory(target_directory, TABLE_STRETCH);
}
while (result == FAT_RESULT_OK);
}

是的,代码有点宽,难以键入,但SimplicityStudio提供代码完成与CTRL +空格键的快捷键,你可以随时剪切和粘贴。代码可读性会增强,需要更少的寻找变量名。我们可以通过查看第二个例子来说明,这段代码旨在查看目标目录,并在找到目标目录中的已删除(先前已填充但现在可用)或零(从未填充)短文件名条目时中断。描述性名称允许您像读一段故事似得阅读代码,在你阅读时告诉你目的。

四 严肃的对待注释

一个好的软件开发人员在几个关键的地方给代码添加了很多注释。注释,如长变量名,不影响到运行时可执行二进制文件的文件大小,只是在那里,以帮助阅读文档的代码。解决方案中每个文件的顶部应说明该文件的目的,并且在每个函数的顶部应有较长的注释,说明函数的用途以及描述输入和输出。除了这些关键的地方,应该在逐行的基础上使用注释,无论代码的意图清不清楚。使用描述性变量名称可以帮助解释代码的目的,并减少必要的注释,使得那里的注释更突出。相信我,一年后你不会记得当初写代码的目的,所以要重视注释了!

五 使用emlib库

对于EFM32程序员,emlib库是你的朋友。接入EFM32外设时,尽可能的调用这些库。这些库经过良好测试,并有额外的代码来帮助寻找问题,而不仅仅是直接调整寄存器。例如,以下代码使用emlib库:
TIMER_TopSet(TIMER3, 1000);

相同的事情可以通过预处理器定义寻址内存映射外设的寄存器来完成,定义TIMER3为0x40010C00。我们不使用这个地址,因为它很难被记住,但这是TIMER3映射在主内存中的地方。
TIMER3->TOP = 1000;

所有外设以完全相同的方式映射到内存地址,因此有时您会看到使用此指针表示法的示例,而不是emlib库函数。如果您将看到em_timer.h中的TIMER_TopSet函数定义,您将看到该函数与此示例完全相同,因此在这种情况下,库函数没有提供任何附加值。然而,使用emlib库,有时会得到比简单操作映射寄存器更多的功能。例如,CMU_ClockEnable函数在最终使用“bit band”命令确保寄存器位自动地设置之前,小心地代表您做出很多决定。尽可能频繁地使用这些库函数,以获得所有EFM32库设计师设计的便利性。

六 定义变量以避免堆栈和堆的问题

C的许多方面对于非专业的程序员来说并不明显,但在嵌入式设计中运行代码时变得很重要。对于初学者,所有本地声明的变量都在栈上。这些是您在函数或任何代码块中定义的变量。

堆栈是从“内存顶部”或物理RAM中最高可用地址开始的内存区域,然后向下计数,直到达到堆栈限制。如果您定义了太多的局部变量,或者您的代码通过使用递归或其他嵌套函数动态创建这些变量,那么您的堆栈空间会被占满。

全局变量是在模块级别的所有函数和其他代码块之外定义的变量。编译器自动为heap上的全局声明的变量分配内存,这是堆栈外的主内存池的一部分,如果您尝试分配太多的RAM,将会产生编译器错误。但是,在代码中使用malloc()命令可以动态地在运行时在堆中分配RAM。

在具有有限RAM的嵌入式处理器上使用recursion或malloc()命令是一个冒险的任务!你必须理解你的代码将需要多少递归尝试(或malloc()调用)以便解决问题,然后设计一个永远不会用尽堆栈空间的解决方案。

如果您在代码中定义所有变量并让编译器确定如何自动管理内存,您将遇到较少的超出堆栈或堆的问题。即使有这样的预防措施,如果你的代码几乎是可用的RAM大小,当你编译和构建你的代码,你将需要学习如何监视堆栈和堆的大小,这部分内容超出本节的范畴。

int foo; //Global variable, memory is on the heap

void some_function()
{
int bar; // Localvariable, memory is on the stack
}

七 全局静态变量和局部静态变量的差异

使用关键字“static”定义的变量表示不同范围的不同内容。在内部函数中,static关键字用在变量的前面,以记住它在函数调用之间的值。它具有一种“粘性”,你可以在函数的第一次调用时初始化它,然后让它保持其值,而不是每次函数执行时重新初始化非静态变量。在全局范围,所有变量都是“粘性”的,因为它们只在运行时开始时初始化一次,然后记住它们的值。但是,放置在全局变量前面的static关键字指示编译器该变量对于该模块是本地的,并且不被外部模块使用。对于同一个“static”关键字,这是一个完全不同的含义。

int foo1 = 1; // Global variable, initialized only once
static int foo2 = 2; // Global variable,initialized only once, private to this module

void some_function()
{
int bar1 = 3; // Local variable, initializedevery time the function is called,
//private to this function

staticint bar2 = 4;// Local variable, initialized only the first time thatthis function
// is called, private to this function

int foo1; // This is a bad idea. Local foo1 overrides global foo1 and makesthe
//global version unavailable inside this function
}

八 volatile和extern的含义及如何相互影响

只要变量和函数在模块中未声明为static,它们就可以在该模块外部使用,并在其他模块中使用。为了告诉编译器你打算在模块中使用相同的变量,你在一个模块中定义一个常规方法的变量,并在设计中所有其他模块的定义之前添加关键字“extern”。现在,您设计中的所有模块都可以访问同一个变量。但是,如果设计中的其他模块中的一个模块意图修改最初定义的位置之外的变量的值,则必须在该变量前面添加关键字“volatile”。这个volatile关键字告诉编译器该变量可以在模块之外更改,并阻止优化器删除似乎没有效果的语句。
// Module A
int foo; //Meant to be modified in this module only
volatile int bar; // Value can changeunexpectedly outside of this module
// Optimizer must always evaluate the value ofbar

// Module B
extern int foo; // We can read this valuedefined in Module A, but should not modify it
extern int bar; // Since declared volatilein Module A, we can read and modify this variable

此外,当使用Release版本和Debug版本时,使用volatile非常重要。当优化设置增加时,编译器将主动尝试压缩不必要的代码。这意味着您需要防止编译器这样做,通过使用volatile关键字可以改变当前范围之外的任何变量。

在下一节中,我们将继续介绍软件路径的最佳实践,了解内联函数,如何使用闪存,配置锁以及如何解决缓冲区溢出问题。

围观 425

微控制器(MCU)广泛应用在各行各业,如各式家电、工业自动化,实时控制、资料采集等领域,为因应工控所需的实时(Realtime)控制、快速回应等需求,因此MCU大多搭载RTOS(实时操作系统)运行。随著物联网的兴起,软件业也为RTOS加入物联网的成分,以提早卡位物联网的核心软件市场…

各种处理器专用之OS

在一般功能(General-purpose)的处理器市场分类中,若以功能与执行速度来说,大致分为CPU > MPU > MCU。CPU的功能最强,主要应用在计算机产品;MPU功能次之,其应用多元,主要应用在嵌入式系统与精简型计算机等多种;而MCU则是以单一应用为主,应用在各式家电、电子产品、嵌入式产品、穿戴式装置、物联网(IoT)应用产品等控制应用。

麻雀虽小 五脏俱全:MCU专用RTOS简述

麻雀虽小 五脏俱全:MCU专用RTOS简述

麻雀虽小 五脏俱全:MCU专用RTOS简述

MCU内部集成了KHz~MHz级的CPU、KB~MB级的存储器单元(RAM与ROM/EEPROM/Flash)、时脉产生器(Oscillator;Clock Generator)、与I/O扩充单元等,可视为一种速度较慢的系统单芯片(SoC)。

由于内部存储器容量小,因此大型操作系统如Windows、Linux等是不可能塞入MCU去执行的,且MCU大多被应用在实时控制的环境,因此许多容量小的RTOS(Real-Time Operating System;实时操作系统),便成为开发MCU软件的主要平台。

主打嵌入式应用的中高阶RTOS

RTOS 的种类繁多,主要设计给基于MPU或MCU的嵌入式系统所使用。例如MPU等级专用的有Integrity、QNX、VxWorks等功能强大之 RTOS;至于体积较小巧,主要支持MCU等级为主的RTOS,则有Nucleus、ThreadX、Unison OS、ucOS II/III等等。

以Green Hills Software推出的Integrity OS为例,就是一种支持MPU (甚至CPU等级)为主的RTOS。其强项在于Integrity-178版本已通过EAL 6+?(信息安全)认证与DO-178B(飞安环境) A级认证,被应用在极度重视安全和可靠性的市场,例如战斗机(如B-2、F-16、F-22、F-35)与民航机(如Airbus A380)等领域。该RTOS支持ARM、XScale、Blackfin、Freescale (已并入NXP) ColdFire、MIPS、PowerPC、AMD x86(嵌入式APU)等CPU/MPU平台。

另一个知名的QNX RTOS,采用微核心架构,是唯一成功打入商用市场的OS,其强项是多媒体的实时处理能力,适用于车(机)上娱乐装置与手机等嵌入式市场。QNX于 2010年被BlackBerry购并,并开发出BB 10操作系统。QNX支持IA32、MIPS、PowerPC、SH-4、ARM、StrongARM、XScale等CPU/MPU平台。

至于象是IntervalZero的RTX、RTX64,则是设计来与微软Windows共存共容的RTOS,搭配EtherCAT协定来做为工厂自动化的应用。其中,Windows主要负责GUI、储存、运算,RTX则负责实时工控与资料采集,让工控软件开发更容易。以上的RTOS都是MB至GB等级的 MPU等级OS,不适用于MCU的环境。

主打MCU应用的商用RTOS

中低阶 RTOS部分,主要是把软件功能极尽精简到MB甚至KB等级,使整个OS与主要应用程序,均可以塞入MCU里的ROM/EEPROM/Flash。由于 MCU应用的领域更加广泛,其软件必须力求更加精简,因此MCU专用的RTOS大多具备非常高度模块化的架构,从核心、驱动程序、档案系统、外围I/O、网络支持等,都可以量身订作,以利产品快速上市。

商用的RTOS有些会提供原始码给授权客户,而开源的RTOS则更能自由使用,让开发人员可以编译出程序码最小、最佳化的执行环境。

由于各芯片厂所推出的MCU产品/开发板,都会有其对应的OS与IDE(集成软件开发环境),但这些OS与软件开发环境可能只适用于该厂的MCU产品,因此第三方软件厂商,就开发出跨芯片/跨硬件平台的OS与IDE,让开发人员不须因为换了硬件平台,软件就必须全部改写。

目前MCU OS/IDE市场占有率最高的,大多是软件公司所推出商用RTOS(搭配各厂商的MCU产品),然随著ARM推出Cortex-M、Cortex-R等指令集架构,进军穿戴式与物联网应用市场,使得ARM架构(采开源码)的RTOS开始有提升的趋势。

Mentor Graphics旗下Accelerated Technology公司所推出的Nucleus,采Microkernel设计,号称有30亿个装置导入,优势是核心长度可以小至2KB,且开发人员不需要撰写嵌入式装置专用BSP(开发板支持软件包),因此被广泛应用到消费性电子、行动装置、车用电子、智能能源、医疗仪器、工业/工控等领域。

早期采用联发科MT6217芯片的大陆山寨、白牌、双卡2G手机,就是执行Nucleus RTOS。该RTOS支持ARM、MicroBlaze、MIPS、Nios II、Power、SuperH、XScale等嵌入式MCU架构。

Express Logic推出的ThreadX,则是一套免收权利金的RTOS,其优点是具备超快速的开机时间、反应时间,其Picokernel核心长度低于2KB,并通过安全规范,号称有21亿个装置导入使用。例如HP的旗下打印机和事务机便采用该RTOS。可广泛支持各式32位元MCU,包含ARM、Atmel、 BlackFin、CoreFire/68K、EFM32、Freescale (NXP)、FM3、H8、XMC、M-Core、MicroBlaze、MIPS、Nios II、Power、STM32、StrongARM、Synopsys ARC、TI、Win32、x86/x386、XScale等等。

Wind River公司所推出的VxWorks,主要针对嵌入式系统设计,采Monolithic (单体式)核心,优势是具备先占式多工处理核心、循环执行、岔断快速反应等特性,原生支持64位元处理器架构(x64)、可进行平行(SMP)/非平行 (AMP)处理,累积至今有超过15亿个装置导入。

新版VxWorks 7则瞄准IoT所需要的可扩充性、安全性、连结性、绘图能力、虚拟化等做强化,而全功能的VxWorks微核心长度只要20KB。

VxWorks广受科技业界的采用,登陆火星的Curiosity(好奇号)便采用VxWorks。该RTOS支持Intel x86(包含Quark SoC与x86-64)、MIPS、PowerPC、SH-4、ARM等CPU/MPU架构。

RoweBots公司的Unison OS,则是一款完全兼容于POSIX(可移植操作系统接口)的RTOS,适用于MCU、DSC、DSP、SoC、FPGA等32位元的硬件开发环境,其好处是特别针对物联网的应用,提升其系统安全性,且核心程序码在某些应用架构可以低到仅1KB。支持Microchip PIC32、Renesas R32C/SH2A、ST STM32、TI ARM Cortex-M3等32位元MCU。

Micrium的μc/OS-II (microcontroller OS version 2),主打可携、能在ROM执行、弹性、先占式多工的RTOS核心,可管理高达250个应用任务。μc/OS-III则主打无限应用任务、几近于零的岔断,并可提供原始码给客户。

其优势在于该系统原始码开放、整洁一致、注释详尽,亦通过FAA认证与DO-178B认证,适合各种嵌入式与物联网的系统开发,核心大小从5或 6KB~24KB。至于μc/OS-III HW-RTOS,则是针对ARM Cortex-M为主的MCU做硬件加速。该RTOS可支持超过100种DSP、MPU、MCU。

ARM MCU促使开源RTOS兴起

近年来由于ARM架构的处理器横扫全球智能行动装置(手机/平板)市场,除了搭配各MCU/MPU硬件平台所推出的商用RTOS/IDE之外,为进军物联网与穿戴式的MCU级应用,ARM推出Cortex-M与Cortex-R的指令集架构,搭配开源的OS/IDE来抢占MCU的应用市场。

例如ARM推出的mbed OS与相关开发环境,便着重于嵌入式装置与IoT的应用,具备连接性、高效率、安全性、生产力的OS,搭配其mbed-rtos函式库,亦可做为RTOS的应用。该mbed开发环境,可开发出智能家庭、智慧城市、穿戴式等应用产品。

此外,坊间针对ARM平台所推出的开源RTOS/IDE很多,例如FreeRTOS、uKOS-II、Atomthreads、BeRTOS社群版、 ChibiOS/RT、CoActionOS、eCos、Embox、Erika Enterprise/RT-Druid、Keil (ARM) RTX、Lepton、nOS、Nut/OS、NuttX、RIOT、RT-Thread、TI-RTOS-KERNEL(SYS/BIOS)、TNeo 等等,让开发人员有更多的选择。

其它专用MCU的非实时OS概述

此外,也有许多针对MCU设计的开源OS (非RTOS),但同样具有体积小的特性,有些是针对IoT的WSN(无线感测网络)应用,例如Contiki OS、TinyOS。而有些则具备一般桌上型图形化使用接口(GUI),例如SymbOS、Wheels OS等。

Contiki OS是一套开源的微型OS,可应用在Atmel ARM/AVR、LPC、PIC32、TI MSP430/CC2430/2538/2630/2650、STM32W等MCU做IoT应用,也可在博物馆级的8位元计算机(Apple II、Atari、Commodore等)做上网联机、甚至在骨灰级游乐器(Atari Jaguar、Game Boy/Advance、GP32、任天堂红白机、PC Engine等)上执行。

至于SymbOS,则是一套能在8位元Z80 CPU (如MSX、Amstrad)的古董计算机上执行之免费多媒体图形操作系统,赋予如Windows 95般的操作画面,让旧计算机回春。

来源:网络

围观 303

物联网(IoT)的市场究竟有多大?目前公认的说法是到2020年全球联网的设备将达到数百亿台,而更大胆的预测是未来全球的物联网设备将达到一万亿。所有这些“海量”的设备都需要一个计算和控制的核心器件,MCU当仁不让地将成为这一主角。对于IoT时代需要什么样的MCU,不同厂商站在自己的立场上会有不同的解读,不免让人有种乱花迷眼的赶脚。今天我们不妨换一个角度、找一条捷径,来窥探在IoT时代什么才是MCU产品最重要的追求?

这个“捷径”就是ARM公司。对于嵌入式开系统开发者来说,ARM可谓是“神一样的存在”——ARM开创了IP授权的模式,它自己不生产芯片,而是通过为其他芯片厂商提供基础性的处理器IP核,收取授权费和版税的方式赢利。由于成功搭上了手机市场的快车,ARM很快成为移动通信和其他便携终端的主流处理器架构。从2004年起,ARM又盯上了通用MCU市场,凭借针对性的Cortex-M处理器架构,在这一领域攻城略地。要知道,在此之前的8位和16位MCU市场,芯片厂商各有各的架构,可谓是百花齐放,ARM Cortex-M的出现彻底改变了MCU的市场格局,其凭借出众的性能和完善的生态系统,很快在32位MCU市场一统江湖,让芯片厂商纷纷放弃了自己的32位MCU的架构,转而成为Cortex-M的拥趸。所以ARM处理器架构的演进,无疑代表着MCU产品的未来趋势。

2016年底,ARM针对IoT市场推出了两个全新的处理器产品——Cortex-M23和Cortex-M33。从定位上看,Cortex-M23是原先Cortex-M0/M0+的继任者,聚焦低功耗应用,如单一传感器数据处理;Cortex-M23是Cortex-M3/M4的继任者,由于有DSP浮点运算功能,适用于更复杂的计算场景,如Sensor Hub等多传感器数据处理。当然,既然是继任者,从性能表现上这两个新产品自然也不含糊。

定义物联网时代的MCU,看ARM押宝在哪儿?

图1,Cortex-M系列处理器性能比对

但以上这些都不是重点,Cortex-M23和Cortex-M33与其它前任产品最大的差别就是采用了ARM最新的ARMv8-M架构,而之前的Cortex-M产品都是基于ARMv7-M架构。可以想见这不是一次简单的升级,所以扒一扒两个架构的不同十分必要。

从图2中可以看出,ARMv8-M与ARMv7-M最主要的区别就是多出了一个TrustZone功能,这是ARM独有的基于硬件的安全技术,其基本原理就是将系统划分为安全世界和非安全世界两部分,形成一个物理隔离,非安全的软件将被阻止访问安全世界的资源,进而进行系统的安全防护。之前,TrustZone技术已经集成在ARM高端的Cortex-A架构上,并在生物识别、移动支付等方面形成了成熟的应用,现在通过Cortex-M23和Cortex-M33“下放”到了通用MCU中,以期惠及更多的设备。根据ARM公布的资料,目前已经获得Cortex-M23或Cortex-M33授权的MCU厂商已经有ADI、Microchip、新唐科技、NXP、瑞萨电子、Silicon Labs 和意法半导体等七家。从众厂商积极的行动中你应该已经能够找到答案了吧:IoT时代MCU最重要的特性就是“安全”。

定义物联网时代的MCU,看ARM押宝在哪儿?

图2,ARM处理器架构演进图,最新的ARMv8-M架构中引入了TrustZone安全技术

ARM新产品在增强安全性方面的努力还不仅于此,Cortex-M23和Cortex-M33还有两个很重要的特性。一是将收购以色列物联网安全公司Sansa所得的Cryptocell硬件加密技术整合到了TrustZone中,有效提升了加密速度,也有利于进一步降低系统的能耗。另一个重要的特性是AMBA 5 AHB5总线,通过该总线可将安全和非安全世界的区隔扩展到处理器以外的外设和存储等资源,在整个SoC内部实现有效的安全保护。加上安全软件架构,ARM已经形成了非常完整的MCU物联网安全解决方案。联想到ARM以前的市场“通吃”的做法,其凭借“安全”牌独步物联网世界的“野心”就不难理解了。

传统的网络彼此之间是孤立的、隔离的,而在物联网时代以前的隔膜被逐渐打破,更多的资源彼此互联,但与此同时一个设备的安全问题都有可能被放大为一个现象级的安全事件。因此物联网的终端设备既需要“便宜”,还需要有足够的安全性,这就是开发者们面临的一个核心挑战,也就是MCU产品在物联网时代安身立命赖的市场“痛点”所在。

来源:安富利微信公众号

围观 416

在本系列的第一部分中,我们介绍了修订控制系统,以及它如何安全地保存您的设计文件,并帮助您找到设计文件之间的差异。在本节的第二部分教学中,您将了解如何构建自己的硬件。

这个系列文章有六个部分:

1. 使用版本控制系统
2. 在面包板上开始开发
3. 原型构建
4. 写好代码,一切都会更好
5. 像专业人士那样构建源代码
像天才一样调试问题

开始使用面包板进行开发

当在EFM32上开始一个新项目时,您可能已经参考了本书的一些例子,并认为您有了足够在定制印刷电路板(PCB)上开发自己的EFM32解决方案的能力。但不要让步子太大,可以遵循下列步骤以确保开发的成效:

1. 一步步进行测试

为了获得最佳效果,每个项目都应该从“面包板”开始,在此阶段,您可以为设计中的每个主要设备组装入门工具包和分线板。虽然您可以多次阅读设计中的设备规格,但在您尝试通过软件与设备进行交互之前,您无法真正学习如何使用设备。只是将设备连接到您的入门套件,并尝试通过电气接口与之通信,都将帮助你获得许多从阅读规范得不到的经验。虽然一些规范开始时有很大的意义,但你很快就会发现规范没有涵盖启动设备并开始使用它所需要的一切,或者至少它掩盖了一些重要的信息,如需要额外的信号线,额外的外部电路或许多其他重要的细节。

2. 为每个设备找到或制作自己的分线板

为了使用外部器件,您需要在设计中为每个器件找到一个分线板,评估或开发套件。如果你不能找到一个设备(或者如果它太贵),你通常可以按照本书第9章的说明自己构建一个。如果这是不可行的,例如你的设备有一些难以焊接的器件封装,如BGA,你有时可以找到芯片的备用封装,其具有相同的电气性能与更容易焊接的封装。

如果您的设备需要大量的支持电路来运行,例如特殊的电压调节器,那么开发您自己的评估板是完全值得的,因为开发这样的板,可以证明在你构建整个系统PCB前,你对你设备的引脚分布,footprint和支持电路是完全理解的。这些footprint文件可以在您的系统设计中重复使用,它们已经完全验证。

3. 仅针对基本功能

一旦将评估设备连接到入门套件进行测试后,重点应该是让部件基本上起作用。由于您通过跳线进行连接,因此在某些情况下,信号接口的电气要求将不能全速工作,因此要将速度保持为电气接口最低的速度,并保持EFM32 GPIO输出的最低驱动强度。在进入进一步的功能之前,编写代码来做一些简单的事情,比如读取设备ID寄存器或者做一个简单的写操作。由于可能在跳线上发生的复杂的信号完整性问题,某些频率可能是不可达到的,所以不要对面包板模型有太多期望。

该过程的要点是在设计定制PCB解决方案并将设备驱动程序集成到系统软件之前,尽可能多地了解设备的要求。这将问题隔离到单个子系统,并使您的最终开发就像是系统集成的练习。

面包板成功的关键:

对于设计的每个子系统,使用隔离面包板启动所有项目
为任何棘手的footprint或需要大量板载电路的部件开发评估板
专注于让部件“正常工作”,而不是寄希望于在面包板上实现全面性能

规划原型设计

一旦你的面包板实验完成,你已经确定了将组成您的EFM32解决方案的设备,是时候开发一个自定义PCB,以将所有这些组件一起作为一个单一的系统了。虽然此时定义外壳并且开发一个适合目标外壳的微型板也是很有诱惑力的,但是将第一个定制PCB开发为一个仅专注于测试和开发的大型测试系统是一个更好的主意。

1. 严肃地使用测试点
内置测试PCB是最终解决方案的一个版本,包括访问设计中的所有信号作为测试点。具有测试点的设计中的任何信号都可以通过万用表,示波器或逻辑分析仪进行探测。测试点可以是铜的暴露的“焊盘”,允许应用插头引脚和跳线的通孔结,或者甚至用于探针夹的金属环。将所有组件和测试点放在内置测试板的顶部也是一个好主意,这样调试更容易,因为您可以无需翻转板子。

要查看测试点的类型,只需查看您的入门套件的背面。电镀通孔测试点是我们焊接插头引脚的测试点。小金圆焊盘是表面贴装测试焊盘,适用于探测或焊接其中可以连接小探针夹的小导线。

2. 计划硬件设计spin
通过规划内置的测试版本的PCB,它将需要至少一个“spin”或重新设计生产解决方案的板。设计一个从第一次测试到生产的电路板是非常罕见的,几乎是不可能的。内置测试PCB允许您在启动期间询问系统,并轻松地研究设备之间的电气接口,而无需依靠特殊的焊接技术将探测点连接到电信号。应添加一个全功能通孔JTAG调试器连接器,以便与Simplicity Studio IDE完全交互,就像您的设计是入门套件一样。尽管可以仅使用UART编程开发生产板,但是在没有JTAG调试头的情况下将丢失调试功能,点击此处查看3M N2520-5002RB。
http://eu.mouser.com/ProductDetail/3M/N2520-5002RB/?qs=QV10cN0MjFtnDIM27...

您可以通过在电源和每个器件之间放置1欧姆左右的精密电阻,然后测量(或选择范围)精密电阻上的电压差,来研究系统中每个器件的功耗。

3. 使用比您认为在生产中需要的更大,更好的EFM32零件版本
当您开发您的第一个定制PCB版本的设计时,使用一个比你认为最终解决方案需要更多的闪存和RAM的EFM32系列的部件。有时可以保持相同的引脚数和占用空间,但通过使用比最终生产解决方案更强大的部件构建您的设计,可以获得额外的闪存和RAM。与使用优化器减少内存占用的“发布”版本相比,Simplicity Studio中的“Debug”需要更多的闪存和RAM,因此通过在原型阶段升级到更高能力的部件,您将使调试成为可能。你也可以移动到更多功能强大的,有更多引脚的产品,如果它使得调试您的解决方案的工作更容易。只要小心不要依赖升级系列的功能,当您转移到您的生产解决方案时,这些功能将消失。此处提供了一个选择器指南,其中显示了每个系列中每个器件的功能,容量和引脚数。

4. 通过JTAG连接到您自己的PCB,就像它是入门套件一样
当您拿到内置测试PCB时,要使用PCB上的JTAG调试头,您可以将IDT电缆(如此处提供的Assmann H3CCH-2018G http://www.digikey.com/product-detail/en/assmann-wsw-components/H3CCH-20...)连接到入门套件上的JTAG连接器。然后,在Simplicity Studio中的Kit Manager下(将入门套件连接到计算机之后),选择Debug Mode:Out。

您可能必须返回Simplicity Studio的主页并选择“Target Part.”。这样做,右键单击检测到的入门套件,然后选择“Select Target Part...”

在打开的“Target Selectionfor EFM32 ...”窗口中,将目标接口更改为SWD,忽略其生成的任何警告(只要您连接到EFM32部件),然后单击Detect Target按钮。对于出现的任何弹出窗口,按Yes按钮,直到零件标签显示自定义PCB上的实际设备。这将证明从入门套件到自定义PCB上的EFM32部件的JTAG连接被计算机上的Simplicity Studio检测到。

完成所有这些步骤后,无论何时在Simplicity Studio IDE中启动项目,用于项目的部分必须与目标选择中找到的部分相匹配,以便开始闪存编程和调试。这允许您调试您的自定义PCB,就像它是一个入门套件。

原型设计成功的关键
不要跳过原型构建 - 您将不会在第一个PCB上“直接生产”。
添加一个JTAG连接到您的第一个版本,以及您可以找到的最大的,功能齐全的EFM32芯片。
为您的项目配置正确的设备,并将入门套件调试模式设置为输出以调试您自己的项目,就像它是入门套件。

在下一节中,我们将进一步介绍软件开发和调试的提示。

围观 415

来源:Silicon Labs

作为有着20年经验的计算机工程师和超过两年经验的EFM32TM项目开发人员,我很有着丰富的,开发复杂计算机工程项目的经验。感谢诸如芯科科技(Silicon Labs)的Simplicity StudioTM软件,和如EFM32入门套件的硬件调试工具,类似项目对于经验的要求大大降低了。通过这些平台,任何人都可以快速,低成本地开始嵌入式开发,在拿到入门套件后很短的时间内,您可以直接完成自己的硬件支持的嵌入式解决方案。欢迎点击“阅读原文”至芯科科技(Silicon Labs)中文论坛观看完整的物联网创客指南文章。

展开EFM32的设计旅程

本系列文章的主旨,就是帮助你开始使用EFM32芯片内的所有外设。 然而,只给你一些类似让LED闪烁的例子,和让电子元件在某一个例子中开始工作,并不意味着你自己项目的成功。我多年的经验,能够指导我预先决定如何连接硬件,如何构建软件,如果出现错误,我的直觉会告诉我下一步的解决问题的调试过程。但是如果你没有多年的经验呢?你如何在缺乏经验的前提下找到成功的解决方案呢?我对这个问题的回答将会出现在这个系列的文章中,我将尝试提炼我通过无数弯路积累的经验。

您可能需要先阅读本指南几次,然后当您遇到问题时再次阅读。这可能是解决不断出现的问题的关键。其中一些提示涉及Simplicity Studio集成开发环境(IDE)的错误和细微差别,可能随着Simplicity Studio版本的升级而改进。但是本指南中的大部分提示都是通用的,应该适用于设计的所有方面。

这个系列文章有六个部分:
● 使用版本控制系统
● 在面包板上开始开发
● 原型构建
● 写好代码,一切都会更好
● 像专业人士那样构建源代码
● 像天才一样调试问题

第1部分:使用版本控制系统

在开始使用新设计之前,请为所有设计工作设置版本控制系统。这对于许多人来说可能是显而易见的,因为这些系统在软件开发中应用非常广泛。但对于嵌入式开发来说非常重要,其中源代码文件中的单个字符差异,可能导致成功的解决方案和完全失败的方案。

● 查找修订版本之间的差异
版本控制系统允许您的工作随着设计的进展保存在各种快照中,并允许您比较每个快照的文件差异。这些系统是免费提供的,可以安装在所有类型的操作系统(Windows,Mac和Linux)上。今天最流行的工具是SVN和Git。我两个系统都用,但我更喜欢Git,因为它保留完整的仓储,包括在您计算机上所有的可用的本地修订历史记录,您可以完全离线工作,然后上传到远程服务器以备以后的更改。

另一方面,SVN只保留本地计算机上的最新修订版本,并需要与服务器进行活动连接,以获取过去的修订版本和其他历史记录信息。本系列的代码示例存储在一个在线Git仓储,Github中,所以你应该开始 “克隆” 该仓储到本地硬盘驱动器并进行更改,然后尝试使用Git命令行或GUI工具以查找文件中的差异。设置和使用Git超出了本指南的范围,但有很多教程可供学习。

● (可选)在Simplicity Studio中设置Git
Simplicity Studio可以配置为在Simplicity Studio IDE中使用Git。这允许您提交更改并在IDE中查找文件间的差异。有关如何获得该设置的详细信息,请访问Silicon Labs社区。请注意,集成不需要使用版本控制,我不使用我的计算机上的集成。我只是在我的本地文件夹上运行Git的命令行版本或GUI工具,以进行提交和差异审查。

● 将所有文件存储在仓储中,而不只是源代码
每当您启动一个新项目时,设置一个新的版本控制仓储(简称为“repo”),以存储与该项目相关的所有文件。在该repo继续存储所有的规格和数据表,设计文档,电子表格,等等。你永远不知道您在线查看的文档何时可能不可用或由制造商更改。在一个安全的地方将备份与设计文件放在一起是一件好事。也不要停留在文件本身。在版本控制中也存储项目的原理图和布局文件。

● 在线保存repo的备份
最好使用在线服务,如Github,Atlassian,Google Drive,Microsoft OneDrive或任何其他在线备份服务,以保留额外的备份副本的repo。当你的硬盘驱动器崩溃或你的笔记本电脑丢失,克隆Git repo的最后一个服务器副本就会是非常快速和容易的选项,让您的设计文件回到您的计算机上。

● 尽早的,经常性的提交
一旦你的repo设置并跟踪你的文件,确保在你达到项目中的每一个重要的步骤时,“提交”你的设计文件。当你刚刚能够第一次与某些芯片通信时,提交代码,并在日志消息中指定项目的当前状态,即使源代码是一片混乱的。例如,“通过SPI读取加速度计设备ID”是一个很有用的消息,它可以让你知道提交到repo的代码的基本功能。

接下来通常发生的是,你清理代码,使其更好,更可读,以及有更好的性能,但有时该过程会破坏代码。有时,为什么代码出问题的原因是显而易见的,但有时,你做的解决问题的尝试都不起作用了,你得到了一个不再工作的解决方案。如果您在repo中有一个已提交版本的正常代码,您只需首先将新代码提交给repo,然后在本地驱动器上回到您的更改,看看原来的解决方案是否仍然有效,这让您知道至少你没有出现特别大的错误。然后,您可以使用版本控制系统的差异工具来显示从第一个版本到第二个版本的差异,并最终隔离和修复该问题。

使用版本控制隔离硬件问题
嵌入式开发和纯软件开发之间的一个关键区别是,硬件可以在嵌入式应用程序上随运行而改变。当您第一次运行解决方案时,一切正常,然后您进行一些更改,这时就可能不正常了。这可能是软件的问题,但也许是因为一根电线在某个地方松动了?通过提交对repo的更改,然后回到最后正常工作的版本,你可以确保问题不在软件上,然后找到并修复松动的电线,更新,回到最新版本的repo并继续开发。

版本控制成功的关键
将修订控制系统集成到设计的所有方面。
将仓储的副本保留在联机备份中以便保管。
提前并经常提交有关代码状态的描述性消息。

围观 366

页面

订阅 RSS - 物联网