- 课程目录
- 相关资源
- 课程笔记
这一章主要是讲这个 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 里面都有
课程介绍
共计1课时,31分58秒
猜你喜欢
换一换
推荐帖子
- ccs8.3.1导入ccs3.3工程 28335
- 导入后编译不通过,出现错误,错误显示找不到Flash28335_API_V210.lib库文件 右击工程名选择Properties---->C2000 Linker---->File Search Path 选择+图标---->Browse...---->选择工程中.lib库文件路径---->OK ...
- fish001 微控制器 MCU
- 基于Hercules 的工业“安全”控制系统 PCB打样
- 基于Hercules 的工业“安全”控制系统 PCB打样 板子终于回来了! 可惜PCB上有个图标怎么没做出来! 第一次TAOBAO打样 ...
- 蓝雨夜 微控制器 MCU
- LM3S811DDLLXXRR笔记之三:时钟及PLL
- 基础时钟源器件有2个时钟源可供使用:■ 内部振荡器(IOSC):内部振荡器是片内时钟源。 它不需要使用任何外部元件。 内部振荡器的频率是12 MHz ± 30%。 不依赖精确时钟源的应用可以使用这个时钟源来降低系统成本。■ 主振荡器:主振荡器用下面的其中一种方法来提供一个频率精确的时钟源:OSC0输入管脚连接一个外部单端时钟源或在OSC0输入和OSC1输出管脚之间连接一个外部晶体。 允许的晶体值取...
- ddllxxrr 微控制器 MCU
- 5529这样设置怎么不可以
- { P2DIR |= BIT2; P2REN |= BIT2; P2OUT |= BIT2; P2IES &= ~BIT2; ...
- slyagw 微控制器 MCU