• 跳至主要导航
  • 跳到主要内容
  • 跳到主要侧边栏
  • 跳到页脚

单片机技巧

微控制器工程资源,微控制器新产品和电子工程新闻

  • 产品展示
    • 8-bit
    • 16-bit
    • 32-bit
    • 64-bit
  • 应用领域
    • 汽车行业
    • 连接性
    • 消费类电子产品
    • 产业
    • 医疗类
    • 安全
  • EE论坛
    • EDABoard.com
    • 在线电子技术.com
  • 影片
    • TI单片机视频
  • EE资源
    • 快速设计
    • 电子书/技术提示
    • 常见问题
    • LEAP奖
    • 播客
    • 网络研讨会
    • 白皮书
  • EE学习中心

嵌入式的

开发混合安全关键
IIoT机械臂

2017年3月13日 通过 李·特施勒 1条评论

可以手动操纵车身的机器人装有多个安全防护装置,以保护工人。已经开发出新的软件体系结构,以使这些系统可靠且易于管理。

穆罕默德·沙菲克 | 导师图形•嵌入式系统部门。

 机械臂 工业自动化行业正在迅速利用当今的异构多核片上系统(SoC)架构。这些多核环境通过组合由单独的处理器处理的功能并将它们放在单个多功能SoC(片上系统)中,从而帮助降低了运营和维护成本。

但是,当以这种方式在SoC上组合功能时,可能会出现问题:每个功能都可能有竞争的要求-以安全认证,实时响应,丰富的UI / HMI和网络连接功能(仅举几例)的形式稀缺资源。但是,有多种方法可以使用虚拟机监控程序,ARM 信任区 或多核框架等技术在单个硅片上隔离离散功能。要了解这些方法,研究示例可能会有所帮助。因此,请考虑在IIoT(工业物联网)工厂环境中使用由自动化机械臂组成的混合安全关键应用程序的情况。

传统的嵌入式控制系统在设计时仅考虑了一个处理器和一个功能。如今,嵌入式系统通常包含多个离散处理器。以工业机械手为例。除了机械臂本身之外,它还包括一个电子控制单元和HMI(人机界面)显示器。 HMI通过编写一系列无需人工干预即可进行的移动(脚本)来实现手动操作或移动。

The robotic arm controller handles the HMI and process control and also implements safety inputs/interlocks. These interlocks can be used to shut down the arm in an emergency and are programmed to take inputs from various types of sensors, for example, proximity 开关, pressure sensors, and safety beam. The IIoT connection means the robot connects with an external network. So an additional processor might be incorporated to perform network communications and handle the firewall and various other associated activities.

请务必注意,每个机械手臂功能都有不同的处理需求。因此,它需要不同类型的处理器。让我们确定和/或解释这些需求:

•HMI /操作员控制台:处理器应该是具有丰富图形支持的高端应用处理器,例如带有GPU的ARM Cortex-A。

•流程控制器:这是具有用例特定功能的相对高端的处理器。例如,如果主要功能涉及像在图像处理中那样处理大量数据,则可以是DSP。该控制器可以是ARM Cortex-A,Cortex-R或DSP内核。

•安全控制器:需要相对低端的处理器,因为其唯一目的是执行安全互锁。这可能是ARM Cortex-R或Cortex-M。在此处理器上运行的软件通常需要通过安全认证,例如IEC 61508。

•网络控制器:处理器可能具有一些其他网络通信功能,例如,用于与其他物联网节点通信的无线电或通信接口。这可以是ARM Cortex-A或Cortex-M设备。

这是一个工业机器人的相当简单的视图。该设计将需要多处理器PCB或多块PCB,定义处理器之间的通信体系结构,并在硬件和软件级别进行集成测试。

嵌入式多核

在过去的几年中,多核SoC激增了。但是,嵌入式空间中的多核并不完全与计算性能有关。在某些明显的情况下,嵌入式系统可以使用更多的计算能力,例如网络吞吐量或丰富的图形。但是,在大多数情况下,嵌入式系统的设计都擅长于其他因素,例如可靠性,响应能力,实时行为,安全性,安全性,功耗,低成本和低维护成本。

因此,可以说嵌入式多核技术的主要驱动因素是功能的融合。这里的融合意味着将技术的不同形式/组成部分组合为一个实体。在机器人示例中,如果单个多核处理器可以处理上面概述的四个功能,则可以节省大量成本。

融合的另一个好处是简单的软件体系结构,其中各种功能可以使用处理器间通信(IPC)机制相互通信。与在分立处理器之间实现复杂的通信协议相比,这要简单得多。与多个分立处理器相比,单个多核处理器还需要更少的功率,并且支持电路也更少。而且,不需要时可以关闭各个内核。

多核融合的关键挑战是保持每个离散功能的个性。例如,当查看机械臂场景时,用作安全控制器的处理器不需要太多的计算能力。最重要的要求是可靠地从安全传感器读取数据,并在需要时驱动相关的执行器。执行安全功能的代码通常要遵循合规性要求(工业标准为IEC 61508,汽车标准为ISO 26262)。另一方面,HMI /操作员控制台需要具有更高计算能力的环境,以支持丰富的图形框架或多媒体功能,而没有安全要求。

如果要使用一个多核处理器来实现安全控制器和HMI /操作员控制台功能,则需要强大的分隔或可以创建不同执行上下文的分区机制。安全控制器的一个高优先级上下文和HMI的另一个优先级上下文(不太重要)。确保运行HMI的非关键代码绝不会干扰或阻止安全控制器的任何功能,这一点很重要。

各种技术选项可以实现这种分隔。

嵌入式管理程序
使用管理程序的嵌入式虚拟化技术的框图。

嵌入式管理程序:A 管理程序 是一个软件组件,可以在硬件之上创建抽象,并允许多个来宾操作系统同时并行运行。虚拟化技术或虚拟机管理程序的使用已经成为桌面和服务器域的融合促成因素。虚拟化扩展可在多核SoC上使用,因此当然可以考虑使用它。

框架框图
导师图形创建的多核框架的框图。

多核框架:可以为运行在非对称多处理(AMP)配置中的处理核分配单独的功能。多核框架有助于生命周期管理,并有助于促进各个参与的核之间的通信,这可能是有用的。

臂 信任区 : 信任区 是一项基于硬件的功能,正常运行的软件被阻止直接访问安全的世界资源。带有TrustZone的ARM处理器可以从单个内核或多个内核同时运行安全操作系统(安全世界)和正常操作系统(正常世界),从而实现一种分区。

嵌入式虚拟化
使用管理程序和ARM的TrustZone技术的嵌入式虚拟化技术框图,展示了分区化。

这些组件会使设计看起来有些复杂和压倒性。但是好消息是,有嵌入式软件供应商可以提供帮助。半导体供应商的多核SoC和Mentor Graphics等公司的嵌入式软件平台提供了支持融合的软件技术组件,这些组件经过了预先测试,加固,认证,并提供长期支持和维护选项。通常,这些平台还打包有必需的工具,以使所有这些工作正常进行。

为了说明使用嵌入式软件平台的嵌入式多核支持和融合,让我们继续以自动化机械手为例。

在机械臂移动时,应远离人类,以防止发生危险情况。因此,工业机器人经常使用安全光束互锁装置,其中激光束会束缚机器人工作区域的入口。任何人进入该区域都会阻挡安全光束,使机械臂停下来并将其锁定到安全位置。此外,系统还会在HMI /操作员控制台上生成警报,以便操作员可以采取纠正措施。

机器人应用
该机器人应用程序利用ARM 信任区 硬件扩展在单个SoC上实现混合关键环境,其中实时安全功能与HMI上下文隔离。在这种环境下,安全功能可通过IEC61508 SIL3认证。

在这种情况下,三个主要组件是机械手臂操作(过程),HMI /操作员控制台和安全横梁。构建该系统的传统方法是使用一个离散处理器来驱动HMI /操作员控制台,一个处理器来控制机械臂,一个处理器来实现安全域。但是,让我们采用多核方法。

首先,我们选择NXP i.MX6同质四核处理器来实现该系统。在此设计中,每个TrustZone分隔的分区都运行Nucleus实时操作系统(RTOS)的独立实例。 Nucleus使用ARM 信任区 技术和基于OpenAMP的多核框架进行生命周期管理,并实现安全世界与正常世界之间的通信。

世界安全Nucleus应用程序负责运行安全光束并在HMI /操作员控制台上渲染安全图形。这称为安全域,由附近图中的红色虚线和阴影框表示。因此,每当安全世界Nucleus检测到安全光束障碍时,它都会向机器人发送命令以停止移动并进入警报状态。安全光束的实时状态和警报状态在HMI /操作员控制台上显示为动画。

普通的世界Nucleus应用程序用于用户界面来驱动机器人并控制其运动。该应用程序还提供有关机器人运动的信息。

需要注意的有趣一点是,安全的和普通的Nucleus应用程序都写入单个显示单元(HMI /操作员控制台)。此实现使用分层的图形体系结构,其中安全图形覆盖在非安全图形之上。由于ARM 信任区 安全世界比普通世界具有更高的优先级,因此即使非安全或正常世界发生故障或损坏,安全功能也始终可用。

因此,实际上,我们只有一个i.MX6 SoC,可以同时实现丰富的图形,实时控制和安全功能,而不会损害任何这些离散功能(例如,充当安全控制器和HMI /操作员控制台)。

当今有许多可用的多核同类和异构SoC,它们可以融合并结合嵌入式软件功能。融合的软件架构带来了显着的优势并节省了成本。虚拟机管理程序,多核框架和ARM 信任区 等技术组件可帮助维护组合的离散功能的个性,并提供所需的隔离。为了缩短产品上市时间并简化维护,值得一看的是从可信赖的软件供应商那里预购多核嵌入式软件平台,以补充当今更为复杂的SoC。

参考文献

导师图形,嵌入式系统部

提起下: 应用领域 , 嵌入式的 , 精选 , 产业 , 物联网 标签: 嵌入式的 , 导师图形, 多核 , 机器人技术 , 虚拟化

在嵌入式Linux演示中使用输入设备:英特尔爱迪生上的USB鼠标

一月23,2016 通过 艾米·卡尔诺斯卡斯(Aimee Kalnoskas) 2条留言

塔希米德

我最近一直在康奈尔机器人项目团队(该项目的联合主持人)使用英特尔爱迪生 美国英特尔康奈尔杯比赛)。基于我以前对嵌入式系统的了解,我开始学习在Linux上使用和编程的知识。使用的发行版是Yocto(有关所有信息,请参见 英特尔爱迪生网站 )。
Tahmid_Linux_embedded A

我们工作的原型之一是使用无线Playstation 4控制器移动用户界面。在Linux上使用输入设备的概念并不复杂,但是对于刚接触Linux编程的人来说,这可能是艰巨的任务。我决定写这篇文章,给出在嵌入式Linux平台上使用输入设备的示例。我正在演示的演示应用程序使用USB鼠标作为连接到Intel Edison的输入设备。

先决条件
我假设您有一块闪动的Intel Edison主板,知道如何(通过USB COM端口或SSH)访问该终端,并已安装Eclipse IDE并可以对其进行编程。当然如果你不这样做’没有IDE,您可以通过终端编译代码,而我’最后告诉您如何做。如果您使用的平台不是Edison,则细节可能会有所变化,但总体思路是相似的。此外,假定您对C编程有基本的了解。

连接USB鼠标时,首先要注意的是,必须将板上的开关(标为SW1)从面向microUSB端口的默认位置朝USB-A连接器切换。

的Linux 中的设备驱动程序抽象化了与输入设备的接口的底层细节,并通过可与文件接口的文件描述符显示输入。如前所述,可以在Linux环境中查看和读取输入设备,就像文件一样。输入设备出现在/ dev / input目录中。最初,在插入鼠标之前,您可以看到有一个event0和一个event1文件。连接鼠标后,您可以看到一个event2文件。

图1:未连接鼠标的输入设备文件
图2:已连接鼠标的输入设备文件

通过读取event2文件,可以读取鼠标数据。要从文件中转储数据,可以使用od命令(手册页:http://man7.org/linux/man-pages/man1/od.1.html)

例如,以十六进制格式查看输出转储:

Tahmid_embedded_Linux代码1
左右移动鼠标,按按钮,滚动滚轮,然后’会看到数据出现在控制台上:
Tahmid_Linux_embedded图3
图3:使用od命令进行文件event2数据转储

当您按Ctrl + C’re satisfied you’我已经看到足够的垃圾场了。

现在要理解此输入,对其进行解密并有意义地使用它,我编写了一个简单的C应用程序。一世’在提供代码之前,将带您逐步完成开发过程。

首先要做的是将这些参考作为内核文档的一部分:
//www.kernel.org/doc/Documenta…vent-codes.txt
//www.kernel.org/doc/Documenta…nput/input.txt

另外,您应该浏览linux / input.h头文件。您可以在这里找到副本:
http://lxr.free-electrons.com/source…put.h?v=2.6.38

您也可以将其键入Eclipse,在键盘上按Ctrl,然后在标题文件名上单击鼠标左键以查看文件本身。

从内核文档和input.h文件中,您应该发现发生了数据输出,因此每次事件发生时,都可以“fit”转换为以下结构(在linux / input.h中定义):

Tahmid_Linux_embedded代码2
您会发现它的总长度为16个字节。您可以浏览不同的数据类型,并使用Eclipse中的函数大小进行添加和确认:
Tahmid_Linux_embedded代码3

每个事件都有一个时间戳,类型,代码和值,您可以从输入结构中猜测出来。此外,事件由只是标记的EV_SYN类型事件分隔。 EV_SYN定义为0。

您可以在C程序中读取文件,然后仅打印出输入事件结构中作为字段分隔的值,以确认该值并在与鼠标交互时观察不同类型的数据。您可以在与鼠标交互时限制事件的类型。要了解收到的数字的含义,请仔细阅读上面链接的linux / input.h文件和内核文档。您将看到描述事件的部分:

Tahmid_Linux_embedded代码4
您还可以找到描述键盘,游戏手柄,鼠标等不同键/按钮的部分。描述鼠标的部分为:
Tahmid_Linux_embedded代码5
Tahmid_Linux_embedded代码6

您可以将它们与看到的值进行比较,看它们是否有意义(它们应该!)。然后,您可以进行模制以读取基于这些的不同代码,类型和值。这是我在演示应用程序中所做的,应该对此进行足够的评论,以使您理解。 (很显然,如果您有任何疑问,请在评论部分告诉我!)

我没有的最后一件事’还没有介绍(但是您可能已经知道)如何读取文件。我已经使用低级文件IO函数打开并阅读:

开启档案
Tahmid_Linux_embdedd代码7
读取文件
Tahmid_Linux_embedded代码8

该演示应用程序将打印出描述鼠标运动,滚轮运动以及左,中(滚轮)和右按钮按下的消息。参见下面的图4。

典型输出如下所示:

图4:演示应用程序的输出
图4:演示应用程序的输出

不使用Eclipse IDE进行编程
 正如我之前提到的,即使您不’如果没有Eclipse IDE(您应该得到),您仍然可以对Edison进行编程。您可以通过几种方法进行操作。

Firstly, you can copy-paste the code from a text editor to the terminal (using PuTTY, mouse right-click is paste), or even write the code on the terminal. Additionally, you can use a program such as WinSCP to transfer a C file. Be careful with Windows files since lines end in a newline and a carriage 返回 character, whereas on 的Linux , they end with only a newline character. The carriage 返回 character will be displayed as ^M if you open the file with the text editor. Once the file is on the Edison file system somewhere, cd into that folder and compile it:

海湾合作委员会<output name> <source file name>
eg: 海湾合作委员会mouse mouse.c

然后,您可以运行它:
例如:./ mouse

我试图使代码不言自明,并在此处提供足够的背景细节,以使您理解’继续。通过更改代码和类型检查,您可以将其扩展到其他设备。希望你’会发现这很有用!让我知道你的想法!

关于作者
Tahmid是一位专门从事微控制器和电力电子学的工程师。他是以下组织的积极成员 EDAboard.com 论坛已超过八年,并撰写了几篇有关嵌入式系统,电源系统和模拟电路的文章。您可以从Tahmid找到更多文章 这里 .

 

提起下: 嵌入式的 , 的Linux 标签: EDAboard.com , 嵌入式的 , 的Linux

减少实时嵌入式系统中的抢占开销

2016年1月19日 通过 艾米·卡尔诺斯卡斯(Aimee Kalnoskas) 1条评论

约翰·卡本(John A.Carbone)

实时嵌入式系统有望以可预测的实时响应性能运行。但是在某些情况下,启用响应能力的功能实际上会使系统blo肿,并挑战其按需执行的能力。通过抢占阈值调度,开发人员可以减少抢占开销,同时仍使应用程序能够满足实时截止时间。

线程的重要性
在解决抢占阈值调度之前,必须了解一些基本的RTOS功能。 实时操作系统 是一种系统软件,可提供服务并管理处理器资源,例如处理器周期,内存,外设和应用程序中断。 实时操作系统 通过将软件划分为多个部分(通常称为任务或线程),并创建一个运行时环境,为每个线程提供自己的虚拟微处理器(“多线程”),从而在应用程序必须执行的各种职责之间分配处理时间。这些虚拟微处理器中的每一个都由一组虚拟的微处理器资源组成,例如,寄存器集,程序计数器,堆栈存储器区域和堆栈指针。只有执行线程会使用物理微处理器资源,但是每个线程都像在操纵自己的私有资源一样运行(线程的“上下文”)。

为了获得实时响应,RTOS控制线程执行。设计人员为每个线程分配了一个优先级,以控制在准备好多个线程且未阻塞的情况下哪个线程应该运行。当需要执行更高优先级的线程(与运行中的线程相比)时,RTOS会将当前正在运行的线程的上下文保存到内存中,并还原新的高优先级线程的上下文。交换线程执行的过程通常称为上下文切换。

将控制权转移到另一个线程是RTOS的基本优势。它不是在应用程序软件中嵌入处理器分配逻辑,而是由RTOS在外部完成。这种安排隔离了处理器分配逻辑,并使预测和调整嵌入式设备的运行时行为变得更加容易。

为了提供实时响应,RTOS必须提供抢占,这使应用程序可以立即透明地切换到较高优先级的线程,而不必等待较低优先级的线程的完成。 (不支持抢占的操作环境实际上是在简单,未连接的设备中发现的传统轮询循环技术的另一种变体。)线程的抢占式调度可确保关键线程立即得到关注,以便它们可以满足其实时期限。但是抢先式调度在某些情况下会导致大量的上下文切换开销,这浪费了处理器周期并挑战了实时响应能力。

上下文切换的影响
线程可以具有多种状态:

  1. READY –线程已准备好运行,但当前未执行指令
  2. RUNNING –线程正在执行指令
  3. 已暂停-线程正在等待诸如队列中的消息,信号量,计时器到期之类的东西。
  4. 终止-线程已完成其处理,无法运行

为线程分配了优先级,这些优先级指示了它们的相对重要性以及如果它们都已准备好运行,它们将获得访问CPU的顺序。通常,优先级是0到N的整数值,可以是0高或0低。每个线程都分配了一个优先级,并且可以动态更改优先级。可以为多个线程分配相同的优先级,也可以为每个线程分配唯一的优先级。

When one thread is executing and a different thread of higher priority becomes READY to run, the 实时操作系统 preempts the running thread and replaces it with the higher-priority thread using a context switch. In a context switch, the 实时操作系统 saves the context of the executing thread on its stack, retrieves the context of the new thread, and loads it into the 中央处理器 寄存器 and program counter, switching the executing thread’s context from one to the other. (See Table 1.)

Fig1
表1.上下文切换可能需要50到500个周期,具体取决于RTOS和处理器。

上下文切换操作相当复杂,根据RTOS和处理器的不同,可能需要50到500个周期。这就是为什么必须注意优化上下文切换操作并最小化对这些操作的需求的原因。这是抢占阈值调度的目标。

调度和循环 
不使用RTOS但包含多个操作或功能(本质上是任务或线程)的应用程序必须提供一种机制,用于运行需要运行的任何功能。可以使用一个简单的顺序循环,也可以使用更复杂的循环来检查状态,以确定某个功能是否有工作要做,跳过那些没有做的工作,然后运行那些有工作的工作。这些循环是调度程序的形式,但是它们往往效率低下且无响应,尤其是随着线程或函数数量的增加。相反,RTOS调度程序会跟踪在任何时间点运行的活动。

通常,实时调度程序是抢占式的-这意味着它们确保准备运行的最高优先级线程是他们让其运行的线程,而其他线程则等待。 实时操作系统 调度程序还可以执行循环调度,这类似于Big Loop(循环),这是循环机制的一种更复杂的形式,在该循环中,单个线程被分配了一定百分比的CPU时间,而不是被允许运行到完成或自愿挂起。 实时操作系统 调度程序在需要时执行上下文切换,并使线程可以休眠,放弃其CPU使用,或者终止并保留线程池以等待CPU。有关TraceX分析工具中所示的Express Logic的ThreadX 实时操作系统 中的线程抢占的示例,请参见图1。

EL_Fig1_截屏
图1.阴影区域显示了一个中断,该中断导致优先级为1的线程首先被抢占,然后是优先级4和在运行中的优先级16线程之上的优先级8线程。

多线程是一个术语,表示CPU被多个线程共享。在这些系统中,当一个线程到达障碍时,它将CPU分配给其他没有等待任何东西的线程,而不是继续检查继续能力。这样可以更有效地利用原本浪费的CPU周期。一个示例是具有两个线程的简单系统:thread_a和thread_b。如果thread_a正在运行并启动可能需要数百个周期才能完成的I / O操作,而不仅仅是在轮询循环中等待,则可以暂停thread_a,直到I / O完成,并且可以允许thread_b使用CPU直到那个时候。这涉及上下文切换。 I / O完成后,将恢复thread_a。与Big-Loop和其他非抢先式调度方法相比,多线程可更有效地利用CPU资源。

抢占挑战 
抢占是停止正在运行的线程以便另一个进程可以运行的进程。这可能是中断或正在运行的线程本身执行的操作的结果。在抢占式调度中,RTOS始终运行已准备就绪的最高优先级线程。通常,将保存正在运行的线程的上下文,并在其位置加载另一个线程的上下文,以便新线程可以运行。抢占式调度通常在实时系统和RTOS中找到,因为它可以对外部事件做出最快的响应,即事件发生时线程必须立即运行,或者必须在特定的截止日期之前运行。在最大程度地提高响应速度的同时,开销也很高,因为始终需要进行上下文切换。

Preemption carries potential challenges, which the developer must avoid or 地址:

  • 线程饥饿。当线程因为优先级更高的线程永远不会完成而永远无法执行时,就会发生这种情况。开发人员应避免任何可能导致高优先级线程最终陷入无限循环的情况,或者该线程消耗不必要的CPU时间,以防止其他线程访问处理器。
  • 高架 . 在具有大量上下文切换的情况下,开销可能加在一起,从而对性能产生重大影响。
  • 优先级倒置。当高优先级线程正在等待共享资源,但该资源由低优先级线程持有,该低优先级线程由于中优先级线程的抢占而无法完成对资源的使用时,会发生这种情况。

抢占阈值调度(PTS) 
With preemption-threshold scheduling, a priority must be exceeded in order to preempt a thread. (Figure 2) Preemption-threshold scheduling prevents some preemptions, which eliminates some context 开关 and reduces overhead.

EL_上下文切换_Fig2
图2:案例1显示了具有完全抢占式调度的上下文切换活动。情况2显示了相同的线程,但是使用了抢占阈值调度。”

通常,任何优先级高于运行线程的线程都可以抢占它。但是,通过抢占阈值调度,仅当抢占线程的优先级高于运行线程的抢占阈值时,才能抢占正在运行的线程。在完全抢占式系统中,抢占阈值将等于线程的优先级。通过将抢占阈值设置为高于线程的优先级,将不允许优先级介于这两个值之间的线程进行抢占。

在表2的示例中,优先级为20的线程通常会被优先级为19、18、17、16等的线程抢占。但是,如果将其抢占阈值设置为15,则只有优先级高于15(数量较少)的线程才能抢占该线程。因此,处于优先级19、18、17、16和15之间的线程无法抢占,但是具有优先级14和更高(较低数量)的线程可以抢占。抢占阈值是可选的,可以为任何线程,所有线程或不指定线程。如果未指定,则实际上,线程的抢占阈值高于其优先级。但是,如果具有抢占阈值,则线程可以阻止更高优先级的线程进行抢占,该优先级可以达到某个限制,超过该限制将允许抢占。

Table 2. Preemption-threshold scheduling prevents some preemptions, which eliminates some context 开关 and reduces overhead.

A fully preemptive scheduler can introduce significant overhead that reduces system efficiency. Preemption-threshold scheduling, on the other hand, can reduce context 开关, and enable increased performance.

Express Logic,Inc.
www.expresslogic.com

 

提起下: 嵌入式的 , 实时操作系统 标签: 嵌入式的 , 实时操作系统

嵌入式开发人员需要了解哪些有关IoT安全的信息?

2015年12月30日 通过 艾米·卡尔诺斯卡斯(Aimee Kalnoskas) 2条留言

通过艾伦·格劳

Cyber-attacks against 物联网 devices continue to make headlines, with the Fiat Chrysler Jeep hack just the most recent. 通过 now, most 嵌入式的 developers understand the need for 安全 , but news reports show that understanding the need is not enough. At a recent trade show I spoke with a number of vendors providing 物联网 solutions and found that far too many had not adequately 地址ed 安全 . Those few that had a 安全 roadmap were primarily focused on 安全 for the cloud but largely ignored 安全 in the devices.

黑客现在重新瞄准了汽车,智能家电,办公设备,医疗设备,核电站等。这些系统中的嵌入式设备需要受到保护。
黑客现在重新瞄准了汽车,智能家电,办公设备,医疗设备,核电站等。这些系统中的嵌入式设备需要受到保护。

There are a few 基本 that 嵌入式的 developers should 地址 to build secure 物联网 devices.

  1. 执行安全评估 之前 您开始设计
  2. 使用RTOS不能确保安全性
  3. 加密不安全
  4. Ensure all attack vectors are 地址ed
  5. 保护云还远远不够
  6. 您的设备将受到攻击

执行安全评估 之前 您开始设计
安全评估是新设备要求规范中或升级现有产品时的关键步骤。对通信接口,潜在攻击媒介和用例的全面评估会为设备带来一系列安全要求。了解设备的使用方式,如何受到攻击以及需要什么保护至关重要,可以用来为设备创建安全配置文件。

Consider an 物联网 enabled credit card scanner used for point of sale transactions. Our hypothetical device uses WiFi to connect to a local hotspot which in turn connects to the credit card processing server via the internet.  Clearly, ensuring 安全 of the data transmitted over the WiFi interface is a critical requirement.  That alone may not be sufficient to ensure the 安全 of the device.  Other questions that would be 地址ed during a 安全 assessment include:

  • 设备上还有其他接口吗?在我们的示例中,假设它具有USB端口。
  • USB端口如何使用? USB端口需要安全吗?
  • 设备固件如何更新?固件更新过程是否安全?
  • 设备是否支持安全启动,以确保只能从OEM获得可靠的固件才能在设备上运行?
  • 设备上是否存储了敏感数据?存储在设备上(即静止时)是否需要保护这些数据?
  • 如果有人窃取设备并尝试从闪存文件系统读取数据,是否需要保护存储的数据?
  • 是否需要考虑其拒绝服务方案?
  • 通过WiFi接口提供哪些服务?这些服务如何获得保障?例如,如果有用于配置的Web界面,如何执行身份验证?通信是否受到重播攻击和数据包嗅探攻击等保护?

虽然安全评估可能是一个耗时的过程,但它为设备的开发提供了重要的指导,并允许对安全功能进行优先级排序。例如,您可以选择不保护设备免受需要物理访问设备的攻击,而专注于确保WiFi接口的安全。如果您要建立无线电安全的军事和政府通讯,则可能会做出不同的权衡。安全评估对于帮助做出这些设计决策至关重要。

使用实时操作系统(RTOS)不能确保安全性
实时操作系统 es provide many advantages in the development of 物联网 devices, including fewer 安全 vulnerabilities than Windows and 的Linux , but this alone does not equate to device 安全 .  Even if, in theory, you could develop a product using a perfectly secure operating system, that is only one step towards building a secure device. Even though the theoretical OS would not be vulnerable to attacks that attempted to exploit OS services, it still would not 地址 data 安全 , authentication, or attacks against the application layer.

加密不安全
加密显然是安全性的组成部分,但仅向设备添加加密并不能确保设备的安全性。加密是保护数据的有效工具,并且是身份验证机制的一部分。为了有效保护数据,您必须首先确定如何将加密用于数据保护。

TLS等安全协议为传输中的数据提供加密,但不保护静态数据或使用中的数据。如果需要保护静态数据,则必须使用磁盘或文件加密解决方案。如果需要防止内存刮擦攻击或其他使用中的数据攻击的保护,则必须使用内存混淆或内存保护解决方案。

密钥生成,存储和管理也是加密解决方案的关键考虑因素。通过使用容易猜测的加密或将密钥存储在易于发现的纯文本文件中,可以使强加密变得无用。

Even after designing a robust encryption solution that 地址es all applicable use cases (data in use, data at rest and data in transit) and that covers key generation and storage issues, the issue of 安全 will not have been solved. There are many other attack vectors that need to be considered.

Ensure all attack vectors are 地址ed
If a secure assessment was performed during the requirements phase of the project, the potential attack vectors should be clearly identified.  Each of these attack vectors must be 地址ed, unless a design trade-off is explicitly made to ignore certain attack vectors.

所有物联网设备设计都应考虑某些关键安全功能,例如通过安全启动,身份验证,数据加密,防火墙保护,入侵检测以及与安全管理系统集成以进行事件报告和策略管理来加固设备。嵌入式设备的入侵检测必须关注与嵌入式设备相关的威胁。不需要进行恶意软件和病毒扫描,但是必须检测并报告对配置和固件未经授权的更改的检测。

保护云还远远不够
依靠云安全性来确保对其物联网设备提供保护的开发人员正在为黑客利用漏洞。尽管提供云服务的服务器在物理上是安全的,并被锁定在数据中心的深处,但物联网设备已被广泛部署并且通常易于访问。这种物理可访问性打开了各种攻击媒介。黑客可能攻击无线接口,USB端口,甚至以物理方式打开设备以读取闪存,将探针连接到通信总线或使用恶意固件对设备进行重新编程。

黑客在发现网络或系统中的薄弱环节并加以利用方面非常有才华。对IT系统的许多成功攻击都源于利用了很少使用的,看似不重要的设备作为启动点。一旦进入内部,这些黑客便可以嗅探网络流量以发现密码,使用的协议,网络拓扑和其他信息,从而进一步发动攻击。一旦攻击者侵入了此类设备,他们便可以充当网络的受信任内部人员,并跳至网络上其他更关键的设备。

您的设备将受到攻击
到现在为止,我希望所有工程师都能通过默默无闻的方式实现安全性,并且声称设备不是黑客的重要目标是谬论。黑客破坏了医疗设备,并将其用作从医院窃取医疗记录的关键点。智能家居厕所已被远程黑客入侵,智能冰箱已变成垃圾邮件机器人,最近还破坏了蓝牙滑板。即使对于似乎不太可能的黑客攻击目标,安全也不再被视为“必备”功能。

在设备中建立安全性
设备本身的保护功能可提供关键的安全层–设备不再依赖公司防火墙作为其唯一的安全层。另外,可以根据设备的需求定制安全性。但这是一个复杂的过程,正确地完成至关重要。

标题:安全框架将提供关键的安全功能,以确保设备安全,同时减少OEM需编写的代码量。
标题:安全框架将提供关键的安全功能,以确保设备安全,同时减少OEM需编写的代码量。

图标实验室 的Floodgate安全框架等解决方案为开发人员提供了确保其设备安全所需的构件。

安全性是所有物联网设备的必要条件,无论它多么小或看似微不足道。全面的安全分析可以识别攻击媒介并确定安全需求的优先级。关键基础设施技术开发中涉及的每个人都必须认识到威胁,并开始投资于提供最高级别保护的安全解决方案。

艾伦·格劳(Alan Grau)是Icon Labs的总裁兼联合创始人,Icon Labs是嵌入式设备安全解决方案的领先提供商。您可以通过以下方式与他联系 [email protected]

图标实验室
www.iconlabs.com

提起下: 应用领域 , 物联网 , 微控制器, 产品展示 标签: 嵌入式的 , 图标实验室 , 物联网 , 安全

初学者’微控制器指南

2015年12月2日 通过 艾米·卡尔诺斯卡斯(Aimee Kalnoskas) 6条留言

乔恩·怀尔德(Jon Wilder)

我一次又一次地看到初学者尝试着从嵌入式电子产品开始,只是不知所措,不知道从哪里开始。有些人甚至在尝试不编写自己的微控制器之前就犯了错误,他们试图编写自己的代码’与他们一起使用的编程语言’重新使用,甚至是基本的编程概念。不过不用担心…本文应该成为入门的好书,让您在嵌入式电子世界中步入正轨。

本文不打算讲授任何特定的微控制器/微处理器,而是作为介绍适用于所有微控制器/微处理器的一般概念的入门书。

首先,关闭…let’问自己几个问题。第一个问题–

什么是微控制器?
微控制器是芯片上的微型计算机。它具有一个CPU,RAM(随机存取存储器),特殊功能寄存器,程序ROM存储器,数据ROM存储器,从一个到几个并行I / O(输入/输出)端口中的任何位置,并且可以具有许多片上外设,包括但不限于模数转换器(ADC),数模转换器(DAC),串行UART,一个或多个定时器,比较器/片上基准电压源,捕获/比较/ PWM(脉冲宽度调制)模块,用于SPI(串行外围设备接口)/ I2C(内部集成电路)通信的主同步串行端口,USB端口,片上振荡器上的以太网端口以及其他许多外设。

什么是微处理器(等等,你的意思是那里’确实有所不同)?
微处理器是微控制器的一切,但没有程序ROM。程序代码位于芯片外,位于单独的外部EPROM芯片中。

程序ROM和数据ROM
微控制器上的片上ROM存储器(只读存储器)就像微控制器一样’s hard drive. It has two partitions. One partition is reserved for the storage of the program code while the other partition is reserved for permanent storage of data that is used by the chip during normal program execution. On a given PIC 微控制器 with say 8K of program space, the program space would occupy ROM 地址es 0x0000 – 0x1FFF (or 0 – 8191 in decimal). The data space would start at program ROM 地址 0x2100. If the data ROM space were 256 bytes long, the data ROM space would occupy ROM 地址es 0x2100 – 0x21FF (or 8448 – 8704 in decimal).

中央处理器
中央处理器 代表中央处理器。基本上是“brains”微控制器的它是从代码存储器中获取指令并执行所获取的指令的过程。

数据RAM
数据RAM(随机存取存储器)是用于临时存储微控制器在正常程序执行期间使用的常量和变量值的数据空间。给定微控制器上的物理RAM空间大小因一个微控制器而异。微控制器上的数据RAM被组织成几个“registers”,每个都有自己的独特之处“address”. A RAM register on an 8 bit 微控制器 can hold a total of 8 bits, or one byte of data. A typical RAM space specification may specify that it is 256 x 8. This means that there are a total of 256 寄存器 in the RAM, and those 寄存器 can hold 8 bits each.

A register is just a location in memory that you can write data to or read data from. Some of us refer to 寄存器 as “locations”.

特殊功能寄存器
The special function 寄存器 (or simply SFR’s) on a 微控制器 are just like the 寄存器 in data RAM. You can write data to them as well as read data from them. Where they differ is that some SFR’直接控制微控制器上的片上硬件,而其他则由微控制器上的片上硬件控制。

SFR中的每个位都分配给一个功能。在SFR中’您有控制位和标志位。控制位就像“switches”可以根据在SFR中的该位位置写入1还是0来打开或关闭功能。标志位就像“indicator lights”根据标志位是1还是0指示给定条件是否存在。控制位直接控制硬件。标志位由硬件控制。在任何给定程序中,我们通常在读取标志位时写入控制位(某些标志位必须通过写入来手动清除,具体取决于微控制器…more on this later).

微控制器上的每个硬件都至少分配有1个SFR。一些硬件可能具有多个SFR’分配给它。咨询您的微控制器’的数据表,以了解有关其特定SFR组织的更多信息。

配置位
大多数微控制器都有特殊的位,称为“configuration bits”。这些位在微控制器上配置特殊选项,包括但不限于–

*振荡器类型
*看门狗定时器开/关
*开机/关机定时器
*掉电复位开/关
*低压编程开/关
*故障安全时钟监视器开/关
*内部/外部切换开/关

在PIC微控制器上,甚至还有用于程序代码保护和数据代码保护的配置位。这些位可防止外部编程硬件读取程序或数据空间,以防止他人窃取您的代码。在Atmel AT89S芯片(8051衍生产品)上,此设置由已知的“lock bits”.

有些人将配置位称为“fuse bits”。这来自于过去的微处理器“fuses” on chip that would get blown if certain fuse bit controlled functions were turned off. These 保险丝 were “一次可编程”…一旦被炸开,就没有了“unblowing”他们。但是,随着现代微控制器上可用的闪存的出现,没有更多的字面意义了。“fuses” on the chip. But the term itself carried over due to the 配置位 essentially providing the same control as the 保险丝位 did.

ALU(算术和逻辑单元)
该硬件本质上负责微控制器执行的所有数学和逻辑运算。在大多数微控制器上,ALU将具有3个与之关联的标志位–

* 零位 –每当数学运算结果为零时,硬件会将此标志位设置为1。每当数学运算导致非零结果时,硬件会将其清除为0。

* 进位/借位 –该标志位用作加法运算的进位,而用作减法运算的借位。一种“carry”当加法运算的结果得出的值大于寄存器能够保存的值时,就会发生这种情况。一个8位寄存器可以保存最大值255(十六进制为FF或二进制为11111111)。

If an addition operation results in a result of greater than 255, the 携带 flag gets set to 1. If an addition operation results in a result of less than 255, no 携带 takes place so the 携带 flag gets cleared to 0.

For subtraction operations, the 携带 flag works as a borrow flag instead. The borrow flag works in reverse of the 携带 flag. If a subtraction operation results in a negative result, the borrow flag gets cleared to 0. If a subtraction operation results in a positive result, the borrow flag gets set to 1.

* 数字进位/借位 – This flag bit does the same thing as the 携带/borrow flag, but it only works to indicate if a 携带/borrow takes place between bits 3 and 4 only.

可以随时读取ALU标志位,以了解数学运算的结果是零,正/负还是大于/小于等,等等。

零位是一个方便的标志位,它使我们可以比较两个值以查看它们是否相等。如果我们将两个数字相减,结果相等时将为零,如果不相等则将为非零。因此,要比较两个值以查看它们是否相等,我们将它们相减,然后读取/检查零位以查看该位是1还是0。如果零位= 1,则减法结果为零,这意味着两个值相等。如果零位= 0,则相减的结果为非零,这意味着两个值不相等。

The 携带/borrow bit is a handy flag that allows us to compare two values to see if one value is greater than/less than the other value. Example…我们有两个值:VALUE1和VALUE2。在代码中,我们执行此操作–

VALUE1– VALUE2 = VALUE3

Once the subtract operation has been executed, we then read/check the high/low state of the 携带/borrow bit.

If VALUE2 is greater than VALUE1, the result of the subtraction will be negative, which will clear the 携带/borrow bit to 0. If VALUE2 is less than VALUE1, the result of the subtraction will be positive, which will set the 携带/borrow bit to 1.

请查阅数据手册以了解哪个SFR包含这些位。在PIC单片机上,ALU标志位位于STATUS SFR中。在MCS-51上,它们位于PSW SFR(程序状态字)中。

计划柜台
程序计数器是一个“address pointer” that tells the 中央处理器 where to find the next instruction to execute in program ROM. The 中央处理器 will fetch the instruction which resides at the program ROM 地址 that is currently loaded in the program counter.

当微控制器复位时,程序计数器被初始化为0x0000。 中央处理器 将提取驻留在程序ROM地址0x0000中的指令。提取该指令后,程序计数器将自动递增到0x0001的值。程序计数器会连续自动递增1的值,这会使CPU依次访问程序ROM中每个寄存器位置的内容。它会一直这样做,直到CPU提取并执行了修改程序计数器值的指令为止。这样的指令包括跳转指令(MCS-51上为ajmp和ljmp,PIC为goto),子例程调用(MCS-51上为acall和lcall,PIC为调用),以及任何向或从中增加或减去值的指令。程序计数器。

堆栈
微控制器上的堆栈主要在子例程调用期间使用,并跳转到中断处理程序。它是一个“Last In First Out” buffer that is used to store 返回 地址es. During a subroutine call, the current program counter 地址 is “pushed” onto the stack with a +1 offset added to it, then the program counter is modified with the 地址 value where the subroutine being called resides. This makes the program counter jump to the subroutine code to execute the subroutine.

在子程序末尾,将有一个“return” instruction (ret on MCS-51, 返回 on PIC )。 Upon the execution of the 返回 instruction, the stack is “popped”, and the last ROM 地址 value that was 推 onto the stack is 弹出 off of the stack and back into the program counter. This makes the program counter jump back to the instruction that resides after the instruction that called the subroutine (hence the need for the +1 offset at the time that the PC 地址 is 推 onto the stack), and program execution continues where it left off prior to the subroutine call.

一些微控制器具有“software stack” (MCS-51). A 软件堆栈 uses some of the 微控制器’内部RAM空间作为堆栈空间。其他微控制器具有硬件堆栈(PIC)。对于硬件堆栈,堆栈是其自己的专用空间,该空间与所有其他片上存储器空间分开。

On some 微控制器, the stack is writable. This allows us to use the stack for temporarily backing up critical 寄存器 during subroutine calls and interrupt handler execution. Prior to executing the subroutine or interrupt handler, the contents of the 寄存器 to back up are 推 onto the stack. Then, just prior to 返回ing from the subroutine or interrupt handler, the contents we 推 onto the stack at the beginning of the subroutine are 弹出 off of the stack one at a time, then restored to their original 地点 in reverse order from how they were 推 onto the stack (remember…Last In First Out).

A good example of this would be how we back up the accumulator and the PSW 寄存器 on MCS-51 during the execution of an interrupt handler routine –

代码(文字):

将ACC推入;将蓄能器备份到堆栈上
推入PSW;将程序状态字备份到堆栈中

;在此处执行中断处理程序代码

弹出PSW;恢复程序状态字
弹出ACC;恢复累加器
reti;从中断返回主代码

如您所见,我们首先将累加器的内容压入堆栈,然后再将PSW的内容压入堆栈。然后执行中断处理程序代码。

After execution of the interrupt handler code, the PSW is 弹出 off the stack first, then the accumulator is 弹出 off of the stack after it…in reverse order from how they were 推 .

典型的SFR
如下所示设置典型的SFR。

代码(文字):

| PORT 1 SFR |
———————————————————
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

这是MCS-51微控制器上用于并行端口1的端口锁存器SFR。MCS-51上的每个端口都是8位并行端口,并且端口SFR中的每个位都分配给该端口上的每个引脚。 P1.0将是端口1上的引脚0,P1.1将是端口1上的引脚1,P1.2将是端口1上的引脚2,依此类推。

如图所示,我们将所有零写入端口1锁存器SFR中的每个位。这会将端口1上的所有引脚置于低电平状态(0伏)。如果我们写1’s到任何端口SFR位,这将设置与我们写“1”到高状态(+ 5V)。

Example, 让’s将值01010101写入端口1 SFR–

代码(文字):

| PORT 1 SFR |
———————————————————
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |

如图所示,这会将引脚P1.0,P1.2,P1.4和P1.6置于高电平,而将引脚P1.1,P1.3,P1.5和P1.7置于低电平。

在数据表上一句话…and why they’re so important
并非所有的微控制器都是一样的。每个芯片都设计有特定的硬件。来自不同制造商的微控制器都具有不同的体系结构。您会发现PIC单片机与MCS-51单片机有很大不同,就像MCS-51在SFR方面与Motorola 65xx相比有很大不同’实施,数据RAM的组织方式,指令集,配置字,并行端口如何工作等。

确切了解如何与您的微控制器及其硬件一起工作的唯一方法是查阅其数据表。数据表解释了每个SFR,每个片上硬件,绝对最大电气额定值,程序/数据存储器的组织结构,并行端口的接线方式以及它们的工作方式,指令集摘要(适用于使用汇编语言编写的人员)语言等)。作为程序员,您需要了解的有关微控制器的几乎所有内容都在微控制器中’s datasheet.

其中大多数可以通过简单的Google搜索免费在线获得(我尚未找到一个’t)。说你不能’找不到数据表是不能接受的借口。任何人拒绝查找数据表的唯一原因是因为他们太懒或他们没有’不了解他们,但不要’不想让别人知道他们不这样做’t。我现在就说…关于微控制器的大多数论坛问题都可以’如果这个人花了时间在数据表中查找答案,我就会自我回答。

数据表是绝对强制性的。没有它们,您将无法编写自己的代码。

乔恩·维尔德·阿凡达最小关于作者
乔恩·怀尔德(Jon Wilder)是一位自由电子工程师和电子爱好者,已有20多年的历史。他在美国海军工作了四年,担任航空电子技术员。从13岁起,乔恩就开始担任吉他演奏家,从15岁起就开始整合电子和音乐。乔恩在17岁时建立了他的第一台真空电子管放大器。乔恩说:“电子音乐”是他的爱和热情。  

乔恩 还是经常的贡献者和热情的成员 在线电子技术 工程界。上 在线电子技术,您可以从微控制器,可再生能源和汽车电子产品到电路仿真和设计等各个方面,向其他工程师提出问题并获得答案。此外,还有特定于MCU的论坛 8051/8951 , AVR , 臂 , Arduino的 的 , Oshonsoft项目, 以及ASA 代码库 成员共享代码片段的地方。 

在Twitter上关注Jon,网址为 @PICmcuguy .

提起下: 常问问题 , 行业专家, 训练 标签: 基本 , 在线技术, 嵌入式的 , 常问问题 , 微控制器, 微处理器, PIC

主侧边栏

快速设计

组件选择变得简单。

今天尝试
设计快速的globle

EE培训中心教室

“ee

“ee

“ee

“ee

订阅我们的新闻

订阅每周行业新闻,新产品创新等等。

立即订阅

 的RSS 目前的讨论

  • Verilog中的位反转
  • 同型,异型和超外差
  • 太多的导体接触集总端口
  • rpm未显示const wh_length = 11; const pulse = 36; const meter_pulse =(100 / wh_length)* pulse; int meter = 0; char speedshow [30]; char RPMshow [30];
  • 我需要测试调频发射机的帮助,"pll发射器rdvv300"

 的RSS 当前Electro-Tech-Online.com讨论

  • 号码细目
  • 圣诞快乐
  • 尝试修复索尼电视的遥控器
  • 并行Flash编程器Shield预览
  • 大家圣诞快乐

在推特上关注我们

MicroContrlTips的推文

页脚

单片机技巧

EE World在线网络

  • 快速设计
  • EE World在线
  • EDA董事会论坛
  • 电子技术在线论坛
  • 连接器提示
  • 模拟IC技巧
  • 电力电子提示
  • 传感器提示
  • 测试和测量技巧
  • 电线电缆技巧
  • 5G技术世界

单片机技巧

  • 订阅我们的新闻
  • 与我们一起做广告
  • 联系我们
  • 关于我们
在推特上关注我们在Facebook上添加我们在YouTube上关注我们 在Instagram上关注我们

版权© 2020 ·WTWH Media LLC及其许可方。版权所有。
未经WTWH Media事先书面许可,不得复制,分发,传输,缓存或以其他方式使用本网站上的资料。

隐私政策
<dt class="NRq70Mb"><q class="rIRhoWt"></q></dt>
    <nav class="TvaTpA5"></nav>

  • <span id="KTYc6ox"><dl class="kGyUlYG"><s id="BWIZGLk" class="BXBSv0j"><source id="OHKtcpu" class="OMUHbmk"></source></s></dl></span><keygen class="gJFayUm"></keygen>
    <dfn id="NIwHIpI"></dfn>
  • <td id="gtKgAaV" class="geQqB0K"></td>

      <p><object class="lvY3DUq"></object></p>




            <frameset id="oDUA1lA"><rt class="VbB3upX"><wbr id="OL9Klo3" class="OJyov6z"></wbr></rt></frameset>