APB总线总结

news/2024/9/24 12:36:30

APB总结

一、简介

APB提供了一个低功耗的接口,并降低了接口的复杂性。APB接口用在低带宽和不需要高性能总线的外围设备上。APB是非流水线结构,所有的信号仅与时钟上升沿相关,这样就可以简化APB外围设备的设计流程,每个传输至少耗用两个周期。

二、信号列表

信号名 来源 描述
PCLK 时钟源 时钟
PRESETn 系统 复位,低有效
PADDR APB桥 地址总线,最大32位
PSELx APB桥 选择
PENABLE APB桥 使能,该信号指示APB的第二个周期及以后的阶段
PWRITE APB桥 读写方向,高为写,低为读
PWDATA APB桥 写数据,最高32位
PSTRB APB桥 写掩码,PSTRB[n]对应PWDATA[(8n + 7):(8n)]。读传输不必
PPROT APB桥 保护类型。有normal,privileged,secure三种保护类型
PREADY 从机 准备。从设备利用该信号进行拓展APB传输
PRDATA 从机 读数据,最高32位
PSLVERR 从机 传输失败

三、传输

3.1 写传输

写传输有两种,一种等待模式,一种非等待模式

3.1.1 非等待模式

image-20240912140820955

T1时刻为设置阶段。选择信号PSEL置位,意味着PADDRPWRITEPWDATA有效。

T2时刻为访问阶段。当PENABLE被置位后,表示传输进行中。PREADY标志传输完成。在传输完成前,PADDRPWDATA以及其他控制信号必须保持稳定。

传输结束后,如果没有紧接着对该外设的下次传输,则PENABLE拉低,PSEL也拉低。

3.1.2 等待模式

image-20240912141549511

等待模式展示了从设备如何利用PREADY 信号延长传输。在访问阶段,当PENABLE为高电平时,可以通过驱动 PREADY 为低电平来延长传输。以下信号在附加循环中保持不变:PADDR PWRITE PSEL PWDATA PENABLE

PENABLE低电平时,PREADY可以取任何值。这确保了固定两周期访问的外设可以将 PREADY 连接到高电平。 Note:建议在传输后不要立即更改地址和写入信号,而是保持稳定直到发生另一次访问。这降低了功耗。

3.2 写掩码

高有效,一位对应一个字节

image-20240912143213541

3.3 读传输

读也分两种,等待模式和非等待模式。

3.3.1 非等待模式

image-20240912143457010

类似写传输。从设备必须在读取传输结束之前提供数据。

3.3.2 等待模式

类似写传输,

以下信号在附加循环中保持不变:PADDR PWRITE PSEL PENABLE(比写传输少了一个WDATA)。

image-20240912143710376

3.4 错误响应

可以使用 PSLVERR 来指示 APB 传输的错误情况。读取和写入事务都可能发生错误情况。

PSLVERR 仅在 APB 传输的最后一个周期内有效,此时PSELPENABLEPREADY 均为高电平。 建议(但不是必须)在未采样时将 PSLVERR 驱动为低电平。即当PSELPENABLEPREADY 中的任何一个为低时。收到错误的事务可能会也可能不会改变外围设备的状态。这是特定于外设的,两者都可以接受。

当写事务收到错误时,这并不意味着外设内的寄存器尚未更新。收到错误的读取事务可能会返回无效数据,对于读取错误,外设不需要将数据总线驱动为全0。

APB 外设不需要支持 PSLVERR 引脚。如果外设不包括该引脚,则APB桥的相应输入被连接到低电平。

3.4.1 写错误

image-20240912145431570

3.4.2 读错误

image-20240912145515225

3.4.3 PSLVERR映射

当不同协议桥接时,

从AXI到APB: PSLVERR -> RRESP读/BRESP写

从AHB到APB: PSLVERR -> HRESP

3.5 保护机制支持

为了支持复杂的系统设计,系统中的互连和其他设备通常需要针对非法传输的保护机制。APB由PPROT[2:0]支持。

PPROT 保护 描述 备注
PPROT[0] normal或privileged privileged等级更高 低为normal,高为privileged
PPROT[1] secure或non-secure 提供需求更大的保护等级区分度 低为secure,高为non-secure
PPROT[2] data或instruction 指示类型,但仅作为提示,不一定准确 低为data,高为non-instruction

提示:PPROT的主要用途是作为安全和非安全传输的指示。使用PPROT[2]和PPROT[0]的不同解释是可以自定义的。

四、操作状态

image-20240912150442917

状态机通过以下状态运行:

  1. IDLE :APB 的初始状态。

  2. SETUP :当需要传输时,总线进入 SETUP 状态,此时相应的选择信号PSELx被置位。总线只在一个时钟周期内保持在 SETUP 状态,并且总是在时钟的下一个上升沿移动到 ACCESS 状态。

  3. ACCESS :使能信号 PENABLE 在 ACCESS 状态下有效。地址、写、选择和写数据信号在从 SETUP 到 ACCESS 状态的转换期间必须保持稳定。退出 ACCESS 状态由从机的 PREADY 信号控制:

    • 如果 PREADY 被从设备保持为低电平,则外围总线保持在ACCESS状态。
    • 如果 PREADY 被从设备驱动为高电平,则退出 ACCESS 状态,如果不需要更多传输,则总线返回 IDLE 状态。或者,如果另一个传输紧随其后,则总线直接移动到 SETUP 状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/60076.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

面试- Web安全

XSS攻击(跨站脚本攻击)XSS预防 < < > >XSRF(CSRF)攻击(跨站请求伪造)就像是你在不知情的情况下,被别人利用你的权限发起了某个你没打算进行的请求。重点是可以把你的用户信息给带过去,你不知不觉就帮我付款了。XSS 是恶意代码“潜伏”在页面上,欺骗你去执行…

k8s 中的 Service 简介【k8s 系列之二】

〇、前言 k8s 集群中的每一个 Pod 都有自己的 IP 地址,那么是不是有 IP 了,访问起来就简单了呢,其实不然。 因为在 k8s 中 Pod 不是持久性的,摧毁重建将获得新的 IP,客户端通过会变更 IP 来访问显然不合理。另外 Pod 还经常会通过多个副本来实现负载均衡,客户端如何高效的…

软工作业二:论文查重系统

这个作业属于哪个课程 <计科22级34班>这个作业要求在哪里 [<作业要求>](个人项目 - 作业 - 计科22级34班 - 班级博客 - 博客园 (cnblogs.com))这个作业的目标 通过实际编程任务,全面提升学生在编程、算法、项目管理、性能优化、代码测试和版本控制等方面的能力,为…

面试-JS基础知识-作用域和闭包

问题this的不同应用场景 手写bind函数 实际开发中闭包的应用场景,举例说明 创建10个<a>标签,点击的时候弹出来对应的序号作用域:某个变量的合法使用范围全局 函数 块级** 自由变量上面图的最里面的红框————a a1 a2都是自由变量,因为都没有被定义。会一层一层往上…

学习高校课程-软件设计模式-软件设计原则(lec2)

软件设计原则Feature of Good Design (1) 优秀设计的特点(一) Code reuse 代码复用 – Challenge: tight coupling between components, dependencies on concrete classes instead of interfaces, hardcoded operations – Solution: design patterns – 挑战:组件之间的紧…

ATTCK红队评估(红日靶场4)

靶场介绍本次靶场渗透反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞,希望大家多多利用。 环境搭建 机器密码 WEB主机 ubuntu:ubuntuWIN7主机 douser:Dotest123(DC)WIN2008主机 administrator:Test2008网络配置111网段是web的网…

谈谈flutter的线程

主要介绍flutter的线程机制,以及flutter是怎样实现所谓的单线程架构的本文同步发布于公众号:移动开发那些事谈谈flutter的线程 刚接触flutter的同学肯定会对fluter所谓的单线程架构很蒙逼,因为这与我们学开发时,各种语言里的多线程的介绍有点出入,而且手机的CPU现在基本都…

tarjan里的定义

强连通分量 - OI Wiki (oi-wiki.org)从以u为根的子树中的任意点出发。单次到达(从这个点指向某个点,有一条边) 的这些点中的dfn的最小值以v为根的子树,包含在以u为根的子树中,low[v]所用的子节点,一定也可以被low[u],这个点一定在以u为根的子树里,所以用low[v] 从u这个…