首页 > 产品 > 微控制器 (MCU) 和处理器 > 深入Sitara:PRU介绍_2016 TI 嵌入式产品研讨会实录 >

基于 Arm 的处理器

最新课程

热门课程

深入Sitara:PRU介绍_2016 TI 嵌入式产品研讨会实录

这一章主要是讲这个 PRU 因为之前的介绍 包括上午介绍 我们在讲工业通信的时候 一直在提这个 PRU 所以这个章节就是着重把这部分拿出来 再给大家做一个比较详细的介绍 可能短时间就是这个东西 可能你想通过短时间的介绍 把它了解的特别详细 可能也不太可能 我们只是希望给大家一个概念性的东西 就是你在用我们 TI 芯片 在去实现这个 无论是工业通信 还是一些其它的功能的时候 你能够对我们这个 PRU 能够有一些客观的了解 分四个部分 一个是整体的介绍 还有一个就是 它硬件的架构的整体的一个概况 另外呢是 PRU 本身它软件的一个开发方法 以及在 Linux 下边它驱动的一个介绍 PRU 这个东西呢 实际上它是一个可编程的一个 我们叫 RISC 的一个协处理器 其实它应该是 算是有点像一个 MCU 的一个东西 跟 MCU 也不太一样 它是一个 可以认为是一个32位的一个 精简指令级的一个辅助的 一个 processor 这是它本质的一个东西 另外它也有自己的指令和数据的 RAM 而且它可以通过片上总线 去访问你整个 Processor 片上的一些资源 一些外设它都可以访问到 所以呢可以把它理解成一个 32bit 的 一个精简指令级的一个 processor 是一个可编程的一个 processor 实际上 PRU 这个系统也是我们 TI 芯片 它特有的一个东西 不仅仅在我们现在主推的 335 437以及57上有 实际上在我们很早以前的 芯片上它就存在了 像我们 TI 比较老的芯片 像我们 OMAPL 的芯片 包括我们以前的 DSP C674 的东西上面 已经都就存在这个 PRU 这个东西 那么之前的 我们之前一些老的用这个 OMAPL 以及 C674 的一些老的客户 他们有些客户实际上已经用 PRU 开发了一些功能性的东西 那么我们在这个老的这个 PRU 我们叫 Legacy PRU 就是相对一个比较老的一个架构 那么针对我们现在 335 4375 及这些主推主流的处理器上面 PRU 呢 它实际上是一个更新版的一个 PRU 系统 而且它叫 ICSS 就是我讲的 它是专门针对工业通信 做了一些特殊的一些加强 PRU 系统能给客户提供的东西呢 首先呢是能给客户提供一些差异化的东西 就是你可以用 PRU 它是可编程的 你可以实现一些客户自己想定制化的一些东西 第二点呢 它能去做一些嵌入式任务 也就是说可能会减轻负荷 它有能力去减轻 CPU 需要干的一些事情 比如说一些数据搬移啊 数字融合这些工作 另外呢它有自己专用的控制的 I/O 和自己专用控制的外设 那么它的实时性会非常好 所以呢正因为这个特点 我们专门用它来实现工业通信上边的一些 对时实性要求比较高的一些功能 下面呢就去告诉大家 那么 PRU 它是什么东西 同时它不能干什么事情 首先呢它是一个专门为数据 数据的融合 数据搬移 以及时移要求高的一些应用 所做的一个双核的一个 32bit 的 一个精简指令级的处理器 每一个 PRU 系统的话呢 它实际上它是包含两个 PRU 的核 也就包含两个处理器 但是呢 它和 DSP 还是有很大区别的 它并不能做硬件一些的加速 比如像我们335上边 比如说有些加速 比如像这个加密算法的一些加速 那么这个东西专门是由加速模块去实现的 这个东西的一些加速 它是不能通过 PRU 去实现的 另外呢它是一个 精简指令级的这么一个小的协处理器 它的这个指令只有大概40个指令 然后呢它很多的指令呢 都是单周期去实现的 但是呢和通用的 processor 来比呢 它既没有 cache 也没有 pipeline 就是它相对特殊的一个地方 第三呢就是说它呢本身带一些 自己能够亲自控制的一些外设 比如说像 UART 像这个 MAC 但是呢它对于处理器来讲呢 它整个并不是一个 对处理器来看呢它并不是一个整体的一个外设 就是它自己可以控制一些外设 但是对于 ARM 来看的话 从 ARM 角度来看 它并不是一个外设单元 它是需要有一些专门的一些配置 来去实现让它去工作 而不是它自己就能去默认能干一些事情 所以它就是 它是一个可编程的东西 是需要进行编程的 还有一点呢就是说 它可以去辅助 CPU 去做一些特殊的一些事情 可以去实现一些特殊的需求 但是呢它本身它这个上面是不能 跑任何类似于操作系统的东西 这个也是跟 MCU 比较区别的地方 因为我看有一些像 C2000 也好 像 M3 M4 也好 实际上它上面都能跑一些 类似于自动化系统的一些 类似的一些简单的 OS 但是我们这个 PRU 是做不了的 所以它本质上像是一个小的协处理器 但是它跟真正的处理器还有很多的区别 我们的 Sitara 系列处理器呢 加入了这个 PRU 的东西呢 增强了我们处理器 TI Sitara 处理器 和其它我们竞争对手一些处理器 一些差异化的东西 这一块呢主要是讲它的 PRU 的一些价值 首先呢就是之前在讲的它可以 因为它的实时性 因为它的自己可以控制一些外设 那么它就可以很方便的实现一些 工业通信满足的一些协议 像 EtherCAT 像 PROFINNET 像 Ether(NET) PROFIBUS 因为它们对 因为这些协议的话 它对 MAC 层的实时性要求比较高 跟普通的这种以太网 MAC 是很不一样的 所以我们可以用它去编一些特殊的方案去实现 另外呢它可以去做一些特殊的外设 因为它是可编程的 比如说我们可以用它去扩高速的串口 我们335标配的这个串口 最高的波特率能只能达到3.8Mbit 最高的波特率 那我们用 PRU 去实现 最高可以到12Mbit 那有些特殊的应用的话呢 你可以用 PRU 去扩一些 特殊的高速的一些串口 另外呢它对这个 I/O 的控制 它有专门的 I/O 控制 它对 I/O 控制来解决它的时延 是和 ARM 去控制 I/O 的时延相比来讲 它的时延是非常小的 后边会讲只有几个纳秒 这样的话呢在一些 特殊的一些工业应用场景 可能你去做一些实时采样 它对 I/O 的响应速度要求非常高 那有些用 processor 来做的话呢 可能一个 processor 后边 还要加一个简单的一个小 MCU 像我们 TI 的430这种 可能430前面去带一些 对实时性要求非常高的采样 然后 ARM 这边你去跑一个 操作系统进行管理 但你用 PRU 的话 你可以把那430省掉 因为它本身它的对 它相当于就可以把430的外部的 实时的采样的事情就可以给你给做了 另外呢它可以做一些数据的一些搬移操作 比如像我们有一些音频的一些算法 实际上是很适合用 PRU 来实现的 另外就是说呢 因为它干的是一个辅助 MCU 的活 但是你当是 system on chead 它做单片去实现的你不用在外边扩芯片 这样的话它是节省你整个系统的电能的 总体来讲呢 它是一方面是可以实现一些特殊的外设接口 另一方面呢它可以去减荷 CPU 的一些资源 下面就是把 PRU 的架构呢给整个讲一下 那么看我们单纯的 ARM SoC 的话 它就是说首先是一个 ARM 核 然后里面有它的一级二级和三级的 cache 那么它和 DDR 仪片上外设的话呢 是通过 L3 和 L4 总线去连的 那么它这上面讲的 当然它跟一级 cache 来讲 它用的指令周期是最小的 所以就是说 cash 的原理 就是实际上 DDR 很多代码都是拷在 cache 上的 L1 L2 级的这个缓存的 寻址周期都是非常短的 到这个 on-chip SRAM 以及到 shared RAM 就是一些我们片上的一些记忆的话呢 它的指令周期大概是20到40个周期 也就是说呢它123 以及到这个 shared RAM 的这个访问周期 都是 latency 的话都是逐渐变大 但是 PRU 的话呢实际它这边它的周期呢 实际上有自己的一些 RAM 自己 RAM 来讲的话呢 它的访问周期呢是相比 ARM 的话呢是更小 它访问自己的需求层 自己的 shared RAM 的话只有3个周期 另外呢它是通过 L3 总线 和片上的一些外设进行相连 因此它也可以去控制片上的 理论上片上所有外设它都可以去控制 这是它的一个基本架构 可以看到就是说在一个 ICSS 就是一个 PRU 系统的话呢 它是包含两个 PRU 的核 也就是每个 PRU 的核是跑在 200M 就是它每个的话是跑在200M 的主频上 也就是说它的每个指令周期 大概是5个纳秒 它所有的指令呢都是单周期指令 它都是没有 pipline 所以它去跑一些 尤其是你会汇编的话 你每条指令 每一个指令的周期都能精确算出来 它具体指哪些任务 可以把它具体的时间能够精确的算出来 通过这个有一个 international SCR 的一个 interconnect SCR 的总线 和它自己的这个 PRU 自己的 shared RAM 相连 然后你可以通过这个中断系统 和 ARM 以及 DSP 去进行通信 另外呢就是它对 它有专门的这个 I/O 控制 这些 pin 呢实际上就是这个 跟我们整个芯片的 pin 是复用的 它这些 pin 呢去操作的话 都是通过 PRU 自己去操作 不用通过 ARM 通过 ARM 总线去操作 它的 PRU 的操作时间响应时间是非常快的 它的 GPIO 的响应时间是非常快的 这就是它的一个特点 这个就是讲的就是 它是有些 Dedicated GPI 和 GPO 就是这些 pin 的话实际上 直接都是芯片的 pin 它这个具体的这些 pin 你可以 去接一些输入输出的一些信号 它的这个实时性是非常强的 那么这张图呢就是一个示例 就是说比如说对一个 pin 的这个操作 无论是输入还是输出 那么如果用 A8 进行操作的话 它要经过 L3 L4 两级数据总线 然后再去连一些外设的一些功能模块 再通过 PMAX 才能去访问 然后 PRU 的话实际上 它直接就通过 PMAX 去访问 这是它的一些 I/O 那么这是它的 Fast I/O 的一个特性 具体实测出来的话呢 就是如果你要用 ARM 去控制 I/O 的话 它的这种编程呢就是要置高置低嘛 需要用 C 的话大概是这样一个闭环方式 那如果说是我优化到我就直接去用汇编 去用汇编去访问 那实际上它的响应时间大概有 200个纳秒 但是如果要用 PRU 汇编去编的话 实际上它大概只有 5个纳秒 比这个 ARM 去访问要快很多 所以这个就是为什么 我们工业总线对实时性要求很高的这些东西 用 PRU 来实行 这就是它的原因之一 另外呢它本身 PRU 会控制一些外设 像这个 eCAP 像这个 UART 和 IEP 最关键的应该是还有一个 MAP 执行控制区的 MAP 那这个实际上是它自己的外设 这个外设应该是 ARM 访问不了的 是它自己的一个外设模块 那实际上我们这个工业以太网的话 就是 工业总线的话主要是两种实现方式 一种是 eCAP 方式 一种是串口方式 那么它都可以 因为它本身自己有自己的外设 所以用它去实现是非常合适的 那么这个是它整个的一个功能框图 PRU 执行单元的功能框图 它里边有采样表 然后有执行单元 然后有它的指令 RAM 还有它的一些通用的寄存器 实际上呢就是编程的话 实际上主要就是根据这个框图 去编一些汇编指令 我们的话呢就是有 专门有一个 TI 这边专门有一个开发的团队 专门是根据用 PRU 去开发一些 相关的一些专用的实时性的功能 像工业总线啊 这一块我们都是有一个 专门的开发团队去开发的 包括一些实时的一些 之前讲过的 PST 以及1588 因为它对实时性要求很高 都是用 PRU 的汇编去实现的 这个是它的一个 Memory Map Memory Map 的话就是 它就是有自己的 每个 PRU 有自己的一个 memory 它实际上去访问它自己的寄存器 它访问自己的 RAM 它都是有自己的 memory 内设 同时呢它还有一个 global memory map 这是两个不同的 memory map 对应本身 PRU 的这部分 就是它这部分 memory 的话 实际上对于整个芯片 对于整个 ARM 来看的话 它也是映射到一个 ARM 的空间 那么这段空间 PRU 自己也可以去访问 那么 ARM 也可以去访问 这个是去访问不同的外设空间所用的周期数 这个是和编程有关的 就是具体编程的话呢 可以去根据它不同的访问时间 去进行不同的寄存器访问 这个是整个 PRU 的一个工况 像我们这个 PRU 工作在 200M 那么整个 cpu 工作在固定 100 大概 1.1V 额定电压情况下呢 它的功耗是很低的 基本上就是十几 二十几个毫瓦 这个功耗是非常低的 对于这个 335 还有 437 还有 57 的话呢 实际上我们带的 PRU 子系统都是不太一样的 像这个最早的 你看最早的 AM18 或 OMAPL138 那么都是以前老的 legacy PRU 子系统 你看它上边的这个 它整个的 PRU 的 core 包括它上边的指令和数据 RAM 都是不一样的 新的话可能是要比老的有一个加强 像335上面带一个 PRU 子系统 这块的话呢 如果你作为定位分析的话呢 这个子系统基本就用于工业通信方面的 像 437 像57 上边都带两个 PRU 子系统 那就可以实现一个做工业通信 一个做其它的东西 比如像我们有一个 TI design 就是用437 一个 PRU 子系统 去做这个类似于 RBJ 的一些功能 比如像 sigma delta 像电流的回环检测 另外一个作用它有通信 后边有 TIdesign 那么实际上这个 PRU 的话呢 我这边看到我的客户的话呢 他们的有各种用途也是比较多的 有很多都是客户自己定制的 有的是客户直接用 C 或者甚至用汇编编程自己做出来的 我们看到的一些使用例子的话 首先就是我们工业总线协议 这块是由我们 TI 本身有开发团队去开发的 另外有它拿它做模拟高速串口 有拿它去实现 MAC 的 就普通 MAC 的 还有拿它做一些扩展接口的 像 LCD 接口 像 RS485 接口 像 Camera 接口 像 Sensors I2C 的接口 就是说一些它可以用来去拓展一些接口 比如你的串口 我们335上带6个串口 但你可能觉得还不够用 或者是说你觉得这个串口速度不够用 你可以用它继续扩 扩高速串口 后边举个例子 举一个这个是我们 应该是国外的应该是一个客户或者是一个实验室 用我们的 A8 在 BeagleBone 做的一个 3D 打印机 A8 上面呢跑这个 Linux 跑一些 HMI 网络的一些协议 PRU 呢主要就是控制电机 因为它的实时性非常好 我们还有些客户这边有个客户做那个打印机的 他们用也是 335 的 A8 上面去跑 这个操作系统跑 Linux 他用 PRU 去实时的去控制一个 SPI 去控制一个打印头 因为那个打印头对实时性要求特别高 如果你是整个跑操作系统的话它实时性满足不了 因为操作系统本身有很大的 latency 任务调度啊 会有很多 latency 他就用 PRU 去实时控制的 这个是一个比较成熟的案例 用 PRU 去做的 因为这个案例的话呢 实际上我这边也有一些客户在跟我咨询 说能不能拿它整套方案 因为他可以觉得这个打印机 它可以做一些多轴的一些控制 这个是我们的一个应该是 TI design 就是我一直在讲的一个 整合了电机控制和工业通信的一套方案 电机控制这一块呢 实际上干的就是 C2000的事 因为它 437 有足够的 PWM 和这个 ecap 这些信号 然后呢它可以去控制电机 然后用 PRU 去做反馈 位置和电流的反馈 然后另外一个 PRU 系统的话呢 可以去做一些总线 现场通信的一些这个东西 另外也可以去上边可以跑一些这个 因为它接口相对来讲比 C200要丰富 可以干一些更多的事情 我觉得把可能之前需要一个 C2000+ BECKHOFF 再加一些其它的这种 甚至加 RBJ 这种架构整合在一起了 这个 TI design 的话呢也是我们这边 一个最近比较主推的一个 TI design 了 大家感兴趣的话可以去我们官网详细了解一下 一个单芯片的驱动控制 这个例子呢是用 PRU 去 在点钞机里面去实现一些功能 就是一些特殊的 CIS 就是一些 CIS 的 sensor 和一些 V_SYNC H_SYNC 参考时钟 一些 CIS 它比较特殊 时序比较特殊 它 PRU 的一些控制信号来去实现一些控制 用 PRU 的一些功能去实现一些特殊的信号控制 这个是我们国内的一个做的客户 用我们的 PRU 去实现的 之前这两个都是国外的 这个是国外做的 这个是国内做的 所以 PRU 这个东西 还是感觉能做出一些差异化的 这个也是我们一个 应该算是一个 TI design 的东西 是我们叫 smart grid 就是我们那个智能电网 TI 有一个专门做智能电网的单位 他们做的一套方案 是用我们 335 上面的 PRU 去实现什么呢 去实现一些特殊的一些接口 电网上面它的集中器要跑一些特殊的协议 像 G3 PRIME 这些协议可能在欧洲或美国北美 那边可能比较流行 它还要接一些特殊的 ESAM 口 包括现在好像国内的电网做的那个充电桩 还是集中系统也要接一些特殊的 ESAM 它实际上我们这个方案是用 PRU 来实现的 就是 ESAM 下面呢讲一下 PRU 的开发 我们现在因为考虑到可编程系统 我们最新的 PRU 都是可以用 C 语言直接去开发 因为它在 CCS 上 都是有这个特殊的针对 PRU 的编译器 支持 C 语言的整体开发 包括 debug 都有仿真 就是你如果用 CCS 去接 我们的335也好 437也好 57也好 它的那个 你看它出来的那些核 除了 ARM核 除了 DSP 以外 还会有 PRU 的核出来 就是用来去调试的 而且我们会有很多的 PRU 的 一些现成的摘要提供给客户进行参考 但实际上 PRU 这块呢 我问过我们美国那边的开发的团队 他们更多的还是汇编 因为汇编开发效率会更高一些 在 CCS 下呢这个 IDE 的这个环境下呢 PRU 有一些方便客户开发的一些东西 比如说 Memory window Disassembly window 用 C 编的话可以给你反馈编程的代码 你可以去看 你可以去看 可以去调整 还有一些 Register window 实际上就跟还可以执行单步 断点 还有 PRU soft reset 实际上就是方便客户的开发 就是我们现在最新的 CCS 上面已经对这些 PRU 调试仿真都是有完整支持的 就是你可以像去 仿这个 DSP 也好 仿 ARM 也好 用这套方案去访问 PRU 那么么针对这个 Linux 操作系统的话呢 我们也是有这个完整一个的支持 就是你开发完 PRU 的东西之后呢 你可以把 PRU 的代码做成一个封面 然后通过 Linux 下到这个 PRU 里面 然后呢跑起来之后呢 就是整个作为一个 Linux 的一个驱动 来去操作整个的 PRU 去实现这个功能 比如说你用 PRU 扩充出来两个高速串口 你可以把它整合到 Linux 里面 通过 Linux 驱动访问的方式 在操作系统上面 我们客户的话呢 你像之前那几个应用 应该是都整合到 Linux 里边了 Linux 要做的事情呢 就是包括下载固件 包括管理它的一些资源 包括一些控制 就是实际上就是说 跟 Linux 控制其它外设是比较类似的 像 I/O 控制这些功能 你可以把它们映射进去 实际上它是用这个 Linux 上面 带的这个 remoteproc 这么个架构去实现的 这个是整个 Linux 这么一个改进的一个架构 这个应该是我们在这个 remoteproc 的话 应该是最新的我看4点几的那个 是专门有这么个架构 应该就是支持这种多核访问的这么个架构 上边我们这边是做了一个叫 PRUSS 上面加了一层 midware 或叫 client driver 就是再加了一层 然后呢应用层的话呢实际上呢 对应用层来讲 驱动层实现了 应用层来讲呢就是下面一个 pru-rpmsg 的接口 你可以直接进行打开啊关闭啊读写这种 I/O 控制去灵活的进行控制 我们都是网上有一些例子 后边会讲 就是我们会有一些资源 你在我们 wiki 上面去输入这个 PRU 这么一个总体的目录 你会看到下边有很多的资源 包括软件 包括提供的一些评估板 包括一些训练都是有 就是说你如果想进行 PRU 开发的话 上面有完整的资源去支持你去开发 像我们最早的可能它的资源是很少的 因为也不支持 C 因为也不支持 C 现在我们开发起来相对比较方便 这是一些 Useful Link 像这个硬件来讲的话呢 现在用的比较多的就是 beaglebone 也比较便宜 我们上边可以提供一个扩展的一个 board 专门是给 PRU 扩展 上边能扩展出来很多东西 可以从我们 TI 官网上去购买 另外整个这个这些工具 这些驱动 我们最新的 SDK 里面都有

这一章主要是讲这个 PRU

因为之前的介绍

包括上午介绍

我们在讲工业通信的时候

一直在提这个 PRU

所以这个章节就是着重把这部分拿出来

再给大家做一个比较详细的介绍

可能短时间就是这个东西

可能你想通过短时间的介绍

把它了解的特别详细

可能也不太可能

我们只是希望给大家一个概念性的东西

就是你在用我们 TI 芯片

在去实现这个

无论是工业通信

还是一些其它的功能的时候

你能够对我们这个 PRU

能够有一些客观的了解

分四个部分

一个是整体的介绍

还有一个就是

它硬件的架构的整体的一个概况

另外呢是

PRU 本身它软件的一个开发方法

以及在 Linux 下边它驱动的一个介绍

PRU 这个东西呢

实际上它是一个可编程的一个

我们叫 RISC 的一个协处理器

其实它应该是

算是有点像一个 MCU 的一个东西

跟 MCU 也不太一样

它是一个

可以认为是一个32位的一个

精简指令级的一个辅助的

一个 processor

这是它本质的一个东西

另外它也有自己的指令和数据的 RAM

而且它可以通过片上总线

去访问你整个 Processor 片上的一些资源

一些外设它都可以访问到

所以呢可以把它理解成一个 32bit 的

一个精简指令级的一个 processor

是一个可编程的一个 processor

实际上 PRU 这个系统也是我们 TI 芯片

它特有的一个东西

不仅仅在我们现在主推的

335 437以及57上有

实际上在我们很早以前的

芯片上它就存在了

像我们 TI 比较老的芯片

像我们 OMAPL 的芯片

包括我们以前的 DSP C674 的东西上面

已经都就存在这个 PRU 这个东西

那么之前的

我们之前一些老的用这个

OMAPL 以及 C674 的一些老的客户

他们有些客户实际上已经用 PRU

开发了一些功能性的东西

那么我们在这个老的这个 PRU

我们叫 Legacy PRU

就是相对一个比较老的一个架构

那么针对我们现在 335 4375

及这些主推主流的处理器上面 PRU 呢

它实际上是一个更新版的一个 PRU 系统

而且它叫 ICSS

就是我讲的

它是专门针对工业通信

做了一些特殊的一些加强

PRU 系统能给客户提供的东西呢

首先呢是能给客户提供一些差异化的东西

就是你可以用 PRU 它是可编程的

你可以实现一些客户自己想定制化的一些东西

第二点呢

它能去做一些嵌入式任务

也就是说可能会减轻负荷

它有能力去减轻 CPU 需要干的一些事情

比如说一些数据搬移啊

数字融合这些工作

另外呢它有自己专用的控制的 I/O

和自己专用控制的外设

那么它的实时性会非常好

所以呢正因为这个特点

我们专门用它来实现工业通信上边的一些

对时实性要求比较高的一些功能

下面呢就去告诉大家

那么 PRU 它是什么东西

同时它不能干什么事情

首先呢它是一个专门为数据

数据的融合 数据搬移

以及时移要求高的一些应用

所做的一个双核的一个 32bit 的

一个精简指令级的处理器

每一个 PRU 系统的话呢

它实际上它是包含两个 PRU 的核

也就包含两个处理器

但是呢 它和 DSP 还是有很大区别的

它并不能做硬件一些的加速

比如像我们335上边

比如说有些加速

比如像这个加密算法的一些加速

那么这个东西专门是由加速模块去实现的

这个东西的一些加速

它是不能通过 PRU 去实现的

另外呢它是一个

精简指令级的这么一个小的协处理器

它的这个指令只有大概40个指令

然后呢它很多的指令呢

都是单周期去实现的

但是呢和通用的 processor 来比呢

它既没有 cache

也没有 pipeline

就是它相对特殊的一个地方

第三呢就是说它呢本身带一些

自己能够亲自控制的一些外设

比如说像 UART 像这个 MAC

但是呢它对于处理器来讲呢

它整个并不是一个

对处理器来看呢它并不是一个整体的一个外设

就是它自己可以控制一些外设

但是对于 ARM 来看的话

从 ARM 角度来看

它并不是一个外设单元

它是需要有一些专门的一些配置

来去实现让它去工作

而不是它自己就能去默认能干一些事情

所以它就是

它是一个可编程的东西

是需要进行编程的

还有一点呢就是说

它可以去辅助 CPU

去做一些特殊的一些事情

可以去实现一些特殊的需求

但是呢它本身它这个上面是不能

跑任何类似于操作系统的东西

这个也是跟 MCU 比较区别的地方

因为我看有一些像 C2000 也好

像 M3 M4 也好

实际上它上面都能跑一些

类似于自动化系统的一些

类似的一些简单的 OS

但是我们这个 PRU 是做不了的

所以它本质上像是一个小的协处理器

但是它跟真正的处理器还有很多的区别

我们的 Sitara 系列处理器呢

加入了这个 PRU 的东西呢

增强了我们处理器

TI Sitara 处理器

和其它我们竞争对手一些处理器

一些差异化的东西

这一块呢主要是讲它的 PRU 的一些价值

首先呢就是之前在讲的它可以

因为它的实时性

因为它的自己可以控制一些外设

那么它就可以很方便的实现一些

工业通信满足的一些协议

像 EtherCAT 像 PROFINNET

像 Ether(NET) PROFIBUS

因为它们对

因为这些协议的话

它对 MAC 层的实时性要求比较高

跟普通的这种以太网 MAC 是很不一样的

所以我们可以用它去编一些特殊的方案去实现

另外呢它可以去做一些特殊的外设

因为它是可编程的

比如说我们可以用它去扩高速的串口

我们335标配的这个串口

最高的波特率能只能达到3.8Mbit

最高的波特率

那我们用 PRU 去实现

最高可以到12Mbit

那有些特殊的应用的话呢

你可以用 PRU 去扩一些

特殊的高速的一些串口

另外呢它对这个 I/O 的控制

它有专门的 I/O 控制

它对 I/O 控制来解决它的时延

是和 ARM 去控制 I/O 的时延相比来讲

它的时延是非常小的

后边会讲只有几个纳秒

这样的话呢在一些

特殊的一些工业应用场景

可能你去做一些实时采样

它对 I/O 的响应速度要求非常高

那有些用 processor 来做的话呢

可能一个 processor 后边

还要加一个简单的一个小 MCU

像我们 TI 的430这种

可能430前面去带一些

对实时性要求非常高的采样

然后 ARM 这边你去跑一个

操作系统进行管理

但你用 PRU 的话

你可以把那430省掉

因为它本身它的对

它相当于就可以把430的外部的

实时的采样的事情就可以给你给做了

另外呢它可以做一些数据的一些搬移操作

比如像我们有一些音频的一些算法

实际上是很适合用 PRU 来实现的

另外就是说呢

因为它干的是一个辅助 MCU 的活

但是你当是 system on chead

它做单片去实现的你不用在外边扩芯片

这样的话它是节省你整个系统的电能的

总体来讲呢

它是一方面是可以实现一些特殊的外设接口

另一方面呢它可以去减荷 CPU 的一些资源

下面就是把 PRU 的架构呢给整个讲一下

那么看我们单纯的 ARM SoC 的话

它就是说首先是一个 ARM 核

然后里面有它的一级二级和三级的 cache

那么它和 DDR 仪片上外设的话呢

是通过 L3 和 L4 总线去连的

那么它这上面讲的

当然它跟一级 cache 来讲

它用的指令周期是最小的

所以就是说 cash 的原理

就是实际上 DDR

很多代码都是拷在 cache 上的

L1 L2 级的这个缓存的

寻址周期都是非常短的

到这个 on-chip SRAM

以及到 shared RAM

就是一些我们片上的一些记忆的话呢

它的指令周期大概是20到40个周期

也就是说呢它123

以及到这个 shared RAM 的这个访问周期

都是 latency 的话都是逐渐变大

但是 PRU 的话呢实际它这边它的周期呢

实际上有自己的一些 RAM

自己 RAM 来讲的话呢

它的访问周期呢是相比 ARM 的话呢是更小

它访问自己的需求层

自己的 shared RAM 的话只有3个周期

另外呢它是通过 L3 总线

和片上的一些外设进行相连

因此它也可以去控制片上的

理论上片上所有外设它都可以去控制

这是它的一个基本架构

可以看到就是说在一个 ICSS

就是一个 PRU 系统的话呢

它是包含两个 PRU 的核

也就是每个 PRU 的核是跑在 200M

就是它每个的话是跑在200M 的主频上

也就是说它的每个指令周期

大概是5个纳秒

它所有的指令呢都是单周期指令

它都是没有 pipline

所以它去跑一些

尤其是你会汇编的话

你每条指令

每一个指令的周期都能精确算出来

它具体指哪些任务

可以把它具体的时间能够精确的算出来

通过这个有一个 international SCR 的一个

interconnect SCR 的总线

和它自己的这个

PRU 自己的 shared RAM 相连

然后你可以通过这个中断系统

和 ARM 以及 DSP 去进行通信

另外呢就是它对

它有专门的这个 I/O 控制

这些 pin 呢实际上就是这个

跟我们整个芯片的 pin 是复用的

它这些 pin 呢去操作的话

都是通过 PRU 自己去操作

不用通过 ARM

通过 ARM 总线去操作

它的 PRU 的操作时间响应时间是非常快的

它的 GPIO 的响应时间是非常快的

这就是它的一个特点

这个就是讲的就是

它是有些 Dedicated GPI 和 GPO

就是这些 pin 的话实际上

直接都是芯片的 pin

它这个具体的这些 pin 你可以

去接一些输入输出的一些信号

它的这个实时性是非常强的

那么这张图呢就是一个示例

就是说比如说对一个 pin 的这个操作

无论是输入还是输出

那么如果用 A8 进行操作的话

它要经过 L3 L4 两级数据总线

然后再去连一些外设的一些功能模块

再通过 PMAX 才能去访问

然后 PRU 的话实际上

它直接就通过 PMAX 去访问

这是它的一些 I/O

那么这是它的 Fast I/O 的一个特性

具体实测出来的话呢

就是如果你要用 ARM 去控制 I/O 的话

它的这种编程呢就是要置高置低嘛

需要用 C 的话大概是这样一个闭环方式

那如果说是我优化到我就直接去用汇编

去用汇编去访问

那实际上它的响应时间大概有 200个纳秒

但是如果要用 PRU 汇编去编的话

实际上它大概只有 5个纳秒

比这个 ARM 去访问要快很多

所以这个就是为什么

我们工业总线对实时性要求很高的这些东西

用 PRU 来实行

这就是它的原因之一

另外呢它本身 PRU 会控制一些外设

像这个 eCAP

像这个 UART 和 IEP

最关键的应该是还有一个 MAP

执行控制区的 MAP

那这个实际上是它自己的外设

这个外设应该是 ARM 访问不了的

是它自己的一个外设模块

那实际上我们这个工业以太网的话

就是

工业总线的话主要是两种实现方式

一种是 eCAP 方式

一种是串口方式

那么它都可以

因为它本身自己有自己的外设

所以用它去实现是非常合适的

那么这个是它整个的一个功能框图

PRU 执行单元的功能框图

它里边有采样表

然后有执行单元

然后有它的指令 RAM

还有它的一些通用的寄存器

实际上呢就是编程的话

实际上主要就是根据这个框图

去编一些汇编指令

我们的话呢就是有

专门有一个

TI 这边专门有一个开发的团队

专门是根据用 PRU 去开发一些

相关的一些专用的实时性的功能

像工业总线啊

这一块我们都是有一个

专门的开发团队去开发的

包括一些实时的一些

之前讲过的 PST 以及1588

因为它对实时性要求很高

都是用 PRU 的汇编去实现的

这个是它的一个 Memory Map

Memory Map 的话就是

它就是有自己的

每个 PRU 有自己的一个 memory

它实际上去访问它自己的寄存器

它访问自己的 RAM

它都是有自己的 memory 内设

同时呢它还有一个 global memory map

这是两个不同的 memory map

对应本身 PRU 的这部分

就是它这部分 memory 的话

实际上对于整个芯片

对于整个 ARM 来看的话

它也是映射到一个 ARM 的空间

那么这段空间 PRU 自己也可以去访问

那么 ARM 也可以去访问

这个是去访问不同的外设空间所用的周期数

这个是和编程有关的

就是具体编程的话呢

可以去根据它不同的访问时间

去进行不同的寄存器访问

这个是整个 PRU 的一个工况

像我们这个 PRU 工作在 200M

那么整个 cpu 工作在固定 100

大概 1.1V 额定电压情况下呢

它的功耗是很低的

基本上就是十几 二十几个毫瓦

这个功耗是非常低的

对于这个 335 还有 437 还有 57 的话呢

实际上我们带的 PRU 子系统都是不太一样的

像这个最早的

你看最早的 AM18 或 OMAPL138

那么都是以前老的 legacy PRU 子系统

你看它上边的这个

它整个的 PRU 的 core

包括它上边的指令和数据 RAM 都是不一样的

新的话可能是要比老的有一个加强

像335上面带一个 PRU 子系统

这块的话呢

如果你作为定位分析的话呢

这个子系统基本就用于工业通信方面的

像 437 像57 上边都带两个 PRU 子系统

那就可以实现一个做工业通信

一个做其它的东西

比如像我们有一个 TI design

就是用437 一个 PRU 子系统

去做这个类似于 RBJ 的一些功能

比如像 sigma delta

像电流的回环检测

另外一个作用它有通信

后边有 TIdesign

那么实际上这个 PRU 的话呢

我这边看到我的客户的话呢

他们的有各种用途也是比较多的

有很多都是客户自己定制的

有的是客户直接用 C

或者甚至用汇编编程自己做出来的

我们看到的一些使用例子的话

首先就是我们工业总线协议

这块是由我们 TI 本身有开发团队去开发的

另外有它拿它做模拟高速串口

有拿它去实现 MAC 的

就普通 MAC 的

还有拿它做一些扩展接口的

像 LCD 接口 像 RS485 接口 像 Camera 接口

像 Sensors I2C 的接口

就是说一些它可以用来去拓展一些接口

比如你的串口

我们335上带6个串口

但你可能觉得还不够用

或者是说你觉得这个串口速度不够用

你可以用它继续扩 扩高速串口

后边举个例子

举一个这个是我们

应该是国外的应该是一个客户或者是一个实验室

用我们的 A8 在 BeagleBone 做的一个 3D 打印机

A8 上面呢跑这个 Linux

跑一些 HMI 网络的一些协议

PRU 呢主要就是控制电机

因为它的实时性非常好

我们还有些客户这边有个客户做那个打印机的

他们用也是 335 的 A8 上面去跑

这个操作系统跑 Linux

他用 PRU 去实时的去控制一个 SPI

去控制一个打印头

因为那个打印头对实时性要求特别高

如果你是整个跑操作系统的话它实时性满足不了

因为操作系统本身有很大的 latency

任务调度啊 会有很多 latency

他就用 PRU 去实时控制的

这个是一个比较成熟的案例

用 PRU 去做的

因为这个案例的话呢

实际上我这边也有一些客户在跟我咨询

说能不能拿它整套方案

因为他可以觉得这个打印机

它可以做一些多轴的一些控制

这个是我们的一个应该是 TI design

就是我一直在讲的一个

整合了电机控制和工业通信的一套方案

电机控制这一块呢

实际上干的就是 C2000的事

因为它 437 有足够的 PWM

和这个 ecap 这些信号

然后呢它可以去控制电机

然后用 PRU 去做反馈

位置和电流的反馈

然后另外一个 PRU 系统的话呢

可以去做一些总线

现场通信的一些这个东西

另外也可以去上边可以跑一些这个

因为它接口相对来讲比 C200要丰富

可以干一些更多的事情

我觉得把可能之前需要一个 C2000+

BECKHOFF 再加一些其它的这种

甚至加 RBJ 这种架构整合在一起了

这个 TI design 的话呢也是我们这边

一个最近比较主推的一个 TI design 了

大家感兴趣的话可以去我们官网详细了解一下

一个单芯片的驱动控制

这个例子呢是用 PRU 去

在点钞机里面去实现一些功能

就是一些特殊的 CIS

就是一些 CIS 的 sensor

和一些 V_SYNC H_SYNC 参考时钟

一些 CIS 它比较特殊

时序比较特殊

它 PRU 的一些控制信号来去实现一些控制

用 PRU 的一些功能去实现一些特殊的信号控制

这个是我们国内的一个做的客户

用我们的 PRU 去实现的

之前这两个都是国外的

这个是国外做的

这个是国内做的

所以 PRU 这个东西

还是感觉能做出一些差异化的

这个也是我们一个

应该算是一个 TI design 的东西

是我们叫 smart grid

就是我们那个智能电网

TI 有一个专门做智能电网的单位

他们做的一套方案

是用我们 335 上面的 PRU 去实现什么呢

去实现一些特殊的一些接口

电网上面它的集中器要跑一些特殊的协议

像 G3 PRIME

这些协议可能在欧洲或美国北美

那边可能比较流行

它还要接一些特殊的 ESAM 口

包括现在好像国内的电网做的那个充电桩

还是集中系统也要接一些特殊的 ESAM

它实际上我们这个方案是用 PRU 来实现的

就是 ESAM

下面呢讲一下 PRU 的开发

我们现在因为考虑到可编程系统

我们最新的 PRU 都是可以用 C 语言直接去开发

因为它在 CCS 上

都是有这个特殊的针对 PRU 的编译器

支持 C 语言的整体开发

包括 debug 都有仿真

就是你如果用 CCS 去接

我们的335也好 437也好 57也好

它的那个

你看它出来的那些核

除了 ARM核 除了 DSP 以外

还会有 PRU 的核出来

就是用来去调试的

而且我们会有很多的 PRU 的

一些现成的摘要提供给客户进行参考

但实际上 PRU 这块呢

我问过我们美国那边的开发的团队

他们更多的还是汇编

因为汇编开发效率会更高一些

在 CCS 下呢这个

IDE 的这个环境下呢

PRU 有一些方便客户开发的一些东西

比如说 Memory window Disassembly window

用 C 编的话可以给你反馈编程的代码

你可以去看

你可以去看

可以去调整

还有一些 Register window

实际上就跟还可以执行单步 断点

还有 PRU soft reset

实际上就是方便客户的开发

就是我们现在最新的 CCS 上面已经对这些

PRU 调试仿真都是有完整支持的

就是你可以像去

仿这个 DSP 也好 仿 ARM 也好

用这套方案去访问 PRU

那么么针对这个 Linux 操作系统的话呢

我们也是有这个完整一个的支持

就是你开发完 PRU 的东西之后呢

你可以把 PRU 的代码做成一个封面

然后通过 Linux 下到这个 PRU 里面

然后呢跑起来之后呢

就是整个作为一个 Linux 的一个驱动

来去操作整个的 PRU 去实现这个功能

比如说你用 PRU 扩充出来两个高速串口

你可以把它整合到 Linux 里面

通过 Linux 驱动访问的方式

在操作系统上面

我们客户的话呢

你像之前那几个应用

应该是都整合到 Linux 里边了

Linux 要做的事情呢

就是包括下载固件 包括管理它的一些资源

包括一些控制

就是实际上就是说

跟 Linux 控制其它外设是比较类似的

像 I/O 控制这些功能

你可以把它们映射进去

实际上它是用这个 Linux 上面

带的这个 remoteproc 这么个架构去实现的

这个是整个 Linux 这么一个改进的一个架构

这个应该是我们在这个 remoteproc 的话

应该是最新的我看4点几的那个

是专门有这么个架构

应该就是支持这种多核访问的这么个架构

上边我们这边是做了一个叫 PRUSS

上面加了一层 midware

或叫 client driver

就是再加了一层

然后呢应用层的话呢实际上呢

对应用层来讲

驱动层实现了

应用层来讲呢就是下面一个 pru-rpmsg 的接口

你可以直接进行打开啊关闭啊读写这种

I/O 控制去灵活的进行控制

我们都是网上有一些例子

后边会讲

就是我们会有一些资源

你在我们 wiki 上面去输入这个

PRU 这么一个总体的目录

你会看到下边有很多的资源

包括软件

包括提供的一些评估板

包括一些训练都是有

就是说你如果想进行 PRU 开发的话

上面有完整的资源去支持你去开发

像我们最早的可能它的资源是很少的

因为也不支持 C

因为也不支持 C

现在我们开发起来相对比较方便

这是一些 Useful Link

像这个硬件来讲的话呢

现在用的比较多的就是 beaglebone

也比较便宜

我们上边可以提供一个扩展的一个 board

专门是给 PRU 扩展

上边能扩展出来很多东西

可以从我们 TI 官网上去购买

另外整个这个这些工具 这些驱动

我们最新的 SDK 里面都有

视频报错
手机看
扫码用手机观看
收藏本课程
  • 深入Sitara:PRU介绍_2016 TI 嵌入式产品研讨会实录 未学习 深入Sitara:PRU介绍_2016 TI 嵌入式产品研讨会实录

视频简介

深入Sitara:PRU介绍_2016 TI 嵌入式产品研讨会实录

所属课程:深入Sitara:PRU介绍_2016 TI 嵌入式产品研讨会实录 发布时间:2016.08.30 视频集数:1 本节视频时长:00:31:58
深入理解Sitara,介绍PRU。
TI培训小程序