【PCIe 总线及设备入门学习专栏 4.5 -- PCIe Message and PCIe MSI】

文章目录

    • PCIe Message 与 MSI
      • PCIe Message 和 MSI 的作用与关系
      • MSI 的配置与寄存器
      • MSI 和 ARM GIC 的关系
      • 示例:MSI 在 ARM GIC 的实际应用
      • 总结

PCIe Message 与 MSI

本文将介绍 PCIe message 的作用以及message 与 MSI 的关系,再介绍 MSI 如何配置以及MSI有哪些寄存器,及MSI 与 ARM 中的GIC的关系。
在这里插入图片描述

PCIe Message 和 MSI 的作用与关系

  1. PCIe Message 的作用
    PCI Express(PCIe)是一种高速串行总线,其中使用消息传递(Message)机制代替了传统并行总线中的引脚信号。例如,传统 PCI 总线使用专门的引脚传递中断请求(IRQ 信号),而 PCIe 则通过发送消息完成中断、错误报告等功能。
  • 主要用途:
    1. 中断通知 :用来代替传统中断引脚方式,比如 MSI (Message Signaled Interrupt)

    2. 系统错误报告 :例如热插拔事件、数据链路错误等,PCIe 协议定义了诸如 ERR_COR, ERR_FATAL 等错误消息。

    3. 电源管理 :通知设备的电源状态变化(例如进入低功耗模式)。

    4. 配置和控制 :例如在 Root Complex 和 Endpoint 之间交换消息。

  1. Message 和 MSI 的关系
    MSI(Message Signaled Interrupt)是 PCIe 中实现中断的一种机制,其作用是通过消息代替传统硬件信号(中断引脚)来通知 CPU 发生了中断。
  • 传统中断的劣势

    1. 中断引脚数量有限,不适合扩展。

    2. 在共享引脚的情况下,中断源需要额外的软件逻辑确定具体来源。

  • MSI 的优势

    1. 消除了中断引脚的物理限制,可以通过消息的形式支持更多中断源。

    2. 支持多个中断向量(MSI-X 可以支持多达 2048 个中断)。

    3. 提高了效率,特别是在多核系统中,可以将中断直接路由到特定的核。


MSI 的配置与寄存器

  1. MSI 配置步骤
    MSI 的配置是在设备的配置空间完成的,包括如下步骤:

  2. 启用 MSI 功能

  • 设置设备的配置空间中的 MSI Control 字段以启用 MSI。
  1. 设置中断向量
  • 为设备分配一个或多个中断向量,这些中断向量会映射到 CPU 的中断控制器。
  1. 设置消息地址与消息数据
  • Message Address:CPU 或中断控制器的地址,用于接收中断消息。

  • Message Data:与中断向量相关联的数据。

  1. 启用中断:
  • 配置完成后,设备可以生成 MSI 消息通知中断。
  1. 相关寄存器
    MSI 的相关寄存器位于 PCI 配置空间(Capability Structure)中,主要包括:
  • MSI Control 寄存器

    • 是否启用 MSI。

    • 是否支持多向量 MSI。

  • Message Address 寄存器

    • 存储中断消息的目的地址,通常为 CPU 或中断控制器的地址。
  • Message Data 寄存器

    • 包含中断向量值或其它与中断相关的信息。
  • MSI-X 表 (针对 MSI-X):

    • 用于存储多个向量地址和数据。

MSI 和 ARM GIC 的关系

在 ARM 架构中,常用的中断控制器是 GIC (Generic Interrupt Controller),其主要作用是管理和分发中断。在 PCIe 系统中,MSI 由 PCIe 设备发送,最终需要被 GIC 处理。1. GIC 的作用

  • GIC 接收 PCIe 发出的 MSI。

  • 将 MSI 转换为对应的中断 ID,分发到对应的 CPU。

  • GIC 负责中断优先级管理、中断屏蔽、中断分发等功能。

  1. 工作流程
  2. PCIe 设备生成 MSI 消息
  • 包括 Message AddressMessage Data

  • Message Address 配置为 GICD 中对应的中断管理地址。

  1. GIC 解析 MSI 消息
  • GIC 使用 MSI 的 Message Data 解析出具体的中断 ID。
  1. 中断分发
  • GIC 将解析的中断分发到特定的 CPU。

  • 多核系统下,可以基于中断 ID 将中断发送到指定核。

  1. GIC 配置 MSI 示例
    以典型系统为例:
  • Message Address :PCIe MSI 地址配置为 GICD 的物理地址。

  • Message Data :设置为 GIC 的中断 ID。

  • 配置完成后,PCIe 中断通过 MSI 触发,最终由 GIC 接收并处理。


示例:MSI 在 ARM GIC 的实际应用

场景 :网络设备触发中断通知 CPU 处理数据包。

  1. PCIe 网络设备
  • 分配 MSI,中断向量为 32,对应 ARM GIC 的中断号。
  1. MSI 消息内容
  • Message Address:0xF400_0000(假设为 GIC 中 MSI 接收地址)。

  • Message Data:32。

  1. 系统行为
  • 网络设备检测到数据包到达,通过 PCIe 总线发送 MSI 消息。

  • GIC 收到 Message AddressMessage Data,将其映射为中断 ID。

  • 中断 ID 32 被分发到指定的 CPU 核处理。

通过上述流程,中断从 PCIe 设备传递到 CPU,实现了高效的中断通知。

总结

  • PCIe 消息 在 PCIe 中取代了传统硬件引脚信号,MSI 是其典型应用。

  • MSI 配置 涉及 Message Address 和 Message Data,存储在设备配置空间中。

  • MSI 与 GIC 的结合 使得 PCIe 设备与 ARM 架构协同工作,为高效的中断处理提供了支持。

推荐阅读
https://aijishu.com/a/1060000000289702

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11右值与列表初始化

1.列表初始化 C98传统的{} C98中一般数组和结构体可以用{}进行初始化。 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; } C11中的{} C11以后统一初始化方式,想要实现一切对…

设计模式 创建型 建造者模式(Builder Pattern)与 常见技术框架应用 解析

单例模式(Singleton Pattern),又称生成器模式,是一种对象构建模式。它主要用于构建复杂对象,通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建出具有不同表示的对象。该模式的核心思想是将…

什么是Redis哨兵机制?

大家好,我是锋哥。今天分享关于【什么是Redis哨兵机制?】面试题。希望对大家有帮助; 什么是Redis哨兵机制? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 哨兵(Sentinel)机制是 Redis 提…

全国计算机设计大赛大数据主题赛(和鲸赛道)经验分享

全国计算机设计大赛大数据主题赛(和鲸赛道)经验分享 这是“和鲸杯”辽宁省普通高等学校本科大学生计算机设计竞赛启动会汇报—大数据主题赛的文档总结。想要参加2025年此比赛的可以借鉴。 一、关于我 人工智能专业 计赛相关奖项: 2022年计…

STM32 + 移远EC800 4G通信模块数传

一、4G模块简述 EC800M-CN 是移远通信(Quectel)推出的一款高性能、超小尺寸的 LTE Cat 1 无线通信模块,专为 M2M(机器对机器)和 IoT(物联网)应用设计。它具有以下主要特点: 通信速率…

标准库以及HAL库——按键控制LED灯代码

按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯:是直接控制输出引脚,GPIO初始化推挽输出即可 按键控制LED:是按键输入信号从而控制输出引脚,GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…

springboot525基于MVC框架自习室管理和预约系统设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装自习室管理和预约系统软件来发挥其高效地信息处理的作用&am…

Unity Canvas中显示粒子特效

首先在场景中新建一个粒子特效 修改一下参数 1.改变粒子特效的渲染层级,层级修改为UI层,由UI相机渲染 使用粒子特效的Sorting Layer ID和Order In Layer,Sorting Layer ID设置为UI(如果没有UI层则新建就好了),对UI进行排序 对于要显示在前的UI组件添加Canvas组件,设置O…

Linux下部署Redis集群 - 一主二从三哨兵模式

三台服务器redis一主二从三哨兵模式搭建 最近使用到了redis集群部署,使用一主二从三哨兵集群部署redis,将自己部署的过程中的使用心得分享给大家,希望大家以后部署的过程减少一些坑。 服务器准备 3台服务器 ,确定主redis和从red…

服务器端请求伪造之基本介绍

一.服务器端请求伪造漏洞基础 1.客户端请求 客户端请求指的是由客户端设备(如个人计算机、智能手机、平板电脑等)或软件(浏览器、各种APP)发出的请求,以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输…

akamai3.0反爬教程逆向分析9个视频汇总

目录 一、akamai2.0文章二、akamai3.0每月疑似改版点二、9个视频汇总如下 一、akamai2.0文章 文章1cookie反爬之akamai_2.0-上文章2cookie反爬之akamai_2.0-上文章3cookie反爬之akamai_2.0-上文章中akamai2.0对应调试html与js文件 二、akamai3.0每月疑似改版点 详细文字与2.…

2024年12月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,共50分) 第 1 题 小猫初始位置和方向如下图所示,下面哪个选项能让小猫吃到老鼠?( ) A. B. C.

【74LS160+74LS273DW锁存器8位的使用频率计】2022-7-12

缘由 想知道这个数字频率计仿真哪里出现错误了,一直无法运行哎,如何解决?-运维-CSDN问答

系统思考—信任

《基业长青》作者指出:“在人生的重要十字路口,选择信任是一场赌注。信任带来的好处可能巨大,而失去信任的代价却相对有限。但如果选择不信任,最优秀的人才可能因失望而离开。” 在企业管理中,信任不仅是人际关系的纽…

推理加速:投机采样经典方法

一 SpecInfer 基于模型 SpecInfer([2305.09781] SpecInfer: Accelerating Generative Large Language Model Serving with Tree-based Speculative Inference and Verification) SpecInfer 投机采样利用多个小型模型(SSM)快速生…

深入理解Java中的Set集合:特性、用法与常见操作指南

一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 ①:add(Object o):向Set集合中添加元素,不允许添加重复数据。 ②:size():返回Set集合中的元素个数 ③.remove(Object o): 删除Set集合中的obj对…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

开源架构的容器化部署优化版

上三篇文章推荐: 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊(New) 我管理的社区推荐:【青云交社区…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置

1、HarmonyOS 无法导入cardEmulation? 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability;在src/main/syscap.json(此文件需要手动创建)中添加如下内容 {"devices": {"gen…