1. 什么是PRU-ICSS?

    Beaglebone Black所使用的TI芯片(XAM3359AZCZ revision 2)包含了一个主处理器和许多其他的模块,如下图:

    尽管ARM Cortex-A8内核的性能十分强大,但是Linux的本质决定了对于高速外部硬件的控制可能会不太容易实现。而TI的这款芯片添加了两个额外的CPU(称为PRU-ICSS或PRUSSv2,即可编程实时单元和工业用通信子系统,以后简称PRU),从而使这个问题得到了改善。这意味着这两个CPU可以分别运行不同的软件,以便减轻底层协议在硬件接口和处理上的工作量。

    这款芯片就好像具有Arduino类似功能的处理器,只不过其额外的两个CPU工作频率要高出许多,达到200MHz,也就是说在许多情况下可以不再需要外部逻辑器件、CPLD或者FPGA。

    通常来说,针对一个以上的处理器进行编程是一件麻烦事,而且处理器之前还需要有通信协议。而TI的这款芯片则极大的简化了这种麻烦,原因有两点,一是用于PRU的代码可以从主处理器下载,二是为了方便处理器之间通信,芯片集成了共享存储器。

2. PRU的作用体现在哪儿?

    对于低速通信来说,传统的I2C或者常用的协议就已经足够应付了,因此PRU在这些地方并没有用武之地。而对于高速通信PRU可能会非常受欢迎,这是因为PRU能够消除由于Linux环境切换所造成的中断,从而连续对硬件提供服务,也不会对ARM主处理器造成负担。这里有一些常见的并且可行例子;

    • 连接到高速ADC(例如模拟信号捕捉)

    • CCD 或者CMOS摄像机

    • LED或者LCD显示器

    • 生成模拟视频信号(视频编码器)

    • 自定义PWM或者其他自定义协议或非标准协议

    • 带反馈的电机控制

    据我所知,PRU甚至能够用某个外部时钟来作为并行数据的时钟。

3. 如何使用PRU?

    当前来说使用PRU即不简单也不算困难。主要的难度在于在网上找到完整的实例。这里提供的内容就是从网上收集而来的。

    主要步骤如下:

    1. 在BB-Black上使能PRU系统;

    2. 将PRU汇编程序安装到BBB上(当前用于PRU的代码是都是用汇编写的,还没有人开发出这对PRU的C编译器);

    3. 编写代码。PRU应用程序分为两部分,而且相互之间能够通过存储器寻址来进行通信,即
    (a) 汇编代码,编译为.bin机器指令文件,以便在PRU上运行;
    (b) C语言代码,运行于主处理器上,也就是Linux系统上。这些代码负责将汇编代码下载到RPU;

    4. 配置Linux设置树,启用所有引脚用于输入输出;

    5. 运行程序.

4. PRU使用什么样的汇编代码?

    还好寄存器数量很给力(都是32位),而且指令都是正交的,另外用于操作的位和字节参考都相当令人满意,所以相对而言,比起某些常见的汇编语言,例如针对PIC或其他8位处理器的汇编来说,PRU使用的汇编代码算是比较容易上手的了。汇编命令数量并不多,目前为止我只使用了大约45条命令中的一小部分,结果还不错。(通常本人不愿意为了某个不太好用的处理器花太多时间学习汇编 – 但RPU完全不同,其指令集貌似很好用的样子)

5. PRU是否物有所值?

    我觉得答案是肯定的,应为有了PRU就能够在高速状态下控制硬件(比如50MHz)。每条指令在PRU上只需要5纳秒的执行时间(200MHz频率,每条指令占用一个周期),并且不存在由于Linux内核造成的不规则延迟。

    难点在哪儿?

    难点主要在于和设备树相关的东西。希望在未来能够有所变化或者变得更简单。在一个典型的微控制器上,输入输出的设定是用特定的寄存器完成的,这些寄存器存在于某个设备的某一部分存储映射中。据我所知,当前运行在BB-Black上的软件不允许用户通过传统的C代码对这些硬件寄存器进行直接的修改操作。当前采用的方法叫做“设备树”。它是一个文本文件,并且被压缩成为二进制文件,在系统启动时需要对其进行读操作。该文件高速系统哪些是用于输入输出的引脚。设备树的修改也适用于使能RPU系统。

    有人曾经通过设备树关闭了BB-Black上默认闪烁的LED灯。设备树文件位于BB-Black的/boot目录下,是一个二进制文件,其内容自然无法看懂(如下图),通常文件名为.dtb或者.dtbo。
  

PRU-ICSS简析相关推荐

  1. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  2. 简析平衡树(三)——浅谈Splay

    前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...

  3. 基于libmad库的MP3解码简析

    基于libmad库的MP3解码简析  MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...

  4. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

  5. Python源码学习:内建类型简析并简析int对象

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇文章中已经大致分析了下,Python的启动执行流程,现在我们分析一下Pytho ...

  6. Python源码学习:启动流程简析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...

  7. 简析TCP的三次握手与四次分手【转】

    转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...

  8. ceph存储原理_Ceph存储引擎BlueStore简析

    前文我们创建了一个单节点的Ceph集群,并且创建了2个基于BlueStore的OSD.同时,为了便于学习,这两个OSD分别基于不同的布局,也就是一个OSD是基于3中不同的存储介质(这里是模拟的,并非真 ...

  9. Android Jetpack组件App Startup简析

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  10. Webpack模块化原理简析

    webpack模块化原理简析 1.webpack的核心原理 一切皆模块:在webpack中,css,html.js,静态资源文件等都可以视作模块:便于管理,利于重复利用: 按需加载:进行代码分割,实现 ...

最新文章

  1. Android 跨进程通信基础
  2. python学习笔记(六)循环、迭代
  3. SSR rendering exceeded timeout 3000, fallbacking to CSR for
  4. SpringCloud Greenwich(五)之nacos、dubbo、Zuul和 gateway集成
  5. java ntlm_使用java UrlConnection使用ntlm(或kerberos)进行身份验证
  6. java文件读写的基本类_java常用工具类(三)—— 文件读取的操作类
  7. 架构师Jack专访:全面认识软件测试架构师
  8. java采集温湿度水浸_智能电力水浸监控解决方案
  9. 如何在矩池云上运行FinRL-Libray股票交易策略框架
  10. 个人第三次软件工程作业-效能分析
  11. Windows(11)下JDK安装与环境变量配置
  12. vos对接移动、电信、联通各种线路
  13. Android 服务器消息推送技术
  14. 2021 Hexo+Next7最全搭建个人网站(合集)
  15. Windows C盘清理
  16. 一般线性规划求最大值
  17. 基于微信小程序二手跳蚤市场系统设计与实现毕业设计论文
  18. 看看女程序媛们的自述
  19. cdma特有效应_CDMA技术有那些特点及优点?
  20. 什么是区块链?区块链详解

热门文章

  1. python计算均方根误差_scikit学习:如何计算均方根误差(RMSE)的百分比?
  2. ChatGPT使用心得
  3. 高级篇days01——微服务保护(基于Sentinel框架)
  4. 吴征:杨澜是我最好的朋友
  5. python实现桌面软件界面开发?
  6. random随机数生成方法
  7. 每日‘主力净额’排名与股价走势统计分析(JQData)
  8. Springboot多数据源+Jpa配置
  9. 基于Merkle-Patricia树的实时审计
  10. 华为电视鸿蒙系统最新版本,华为解决互联网电视痛点:鸿蒙系统首发设备欲屏蔽开机广告...