计算机组成原理—— 总线系统(十二)

不要害怕失败,因为每一次跌倒都是站起来的前奏;不要畏惧未知,因为在探索的过程中你会发现未曾预见的美好。你的每一步努力都在为未来的成功铺路,即使现在看不到成果,但请相信积累的力量。那些看似平凡的努力,终将在某一刻绽放出惊人的光芒。

记住,你是独一无二的存在,拥有着别人无法复制的独特价值。你的思想、你的创造力以及你的热情都是这个世界所需要的光亮。在这个广阔的世界里,总有属于你的一席之地,一个你可以尽情展现自我、实现梦想的舞台。

所以,请勇敢地追求你的梦想,无惧任何阻碍。让内心的火焰持续燃烧,照亮前行的道路。当你感到迷茫或疲惫时,不妨停下来回顾一下走过的路程,你会发现自己已经走了那么远,已经克服了那么多的困难。这份认知将成为你继续前进的动力。

未来是属于那些为之准备的人,而你已经在路上。每一天都是一个新的开始,每一刻都充满了无限可能。带着勇气和决心,去迎接每一个挑战,去拥抱每一个机遇。因为你值得拥有最好的一切,并且有能力将梦想变为现实。继续前行吧,你的光辉未来正在前方等待着你。

计算机组成原理资源网

https://www.wenjingketang.com/这里面有ppt课后习题及答案,需要的可以自行下载

目录

7.4 总线通信

7.4.1 同步通信

7.4.2 异步通信

7.4.3 总线数据传送模式

7.5 总线标准

总结与对比


7.4 总线通信

总线是计算机系统中各部件(如CPU、内存、外设)之间传输数据的公共通道。总线通信的核心是协调不同设备的数据传输,确保高效和准确。以下是总线通信的关键知识点:

7.4.1 同步通信

定义:数据传输在统一的时钟信号控制下进行,所有操作由时钟边沿(上升沿或下降沿)触发。
工作原理

  • 主设备(如CPU)生成时钟信号,所有从设备(如内存)根据此时钟同步操作。

  • 数据在固定时间窗口内传输,发送方和接收方必须严格遵循时钟频率。

特点与优缺点

  • 优点:时序简单、传输速度快(适用于短距离高速传输)。

  • 缺点:时钟信号需严格同步;长距离传输时时钟偏移(Skew)可能导致错误。

  • 应用场景:CPU与高速缓存(Cache)、内存(DDR SDRAM)之间的通信。

示例

  • PCI总线:早期PC中使用的同步总线,时钟频率33/66 MHz。

  • DDR内存接口:每个时钟周期传输两次数据(双倍数据速率)。

详细解析
同步通信的核心是依赖全局时钟信号协调所有操作。以下是对比表格和案例:

特性同步通信异步通信
时钟依赖必须全局同步时钟无全局时钟,通过握手协议
传输速率高(固定频率)低(动态调整)
适用场景短距离、高速(CPU-内存)长距离、多设备(UART、USB)
复杂度简单(时序固定)复杂(需要握手信号)

案例:SPI总线同步通信
SPI(Serial Peripheral Interface)是典型的同步总线协议,常用于微控制器与传感器/存储器通信。

  • 引脚定义

    • SCLK:同步时钟(主设备生成)

    • MOSI:主设备输出,从设备输入

    • MISO:主设备输入,从设备输出

    • SS:从设备片选信号

  • 时序图


    数据在时钟上升沿或下降沿传输,由主设备控制时序。

代码示例(Arduino SPI通信)

cpp

#include <SPI.h>
void setup() {
  SPI.begin(); // 初始化SPI
  digitalWrite(SS, HIGH); // 默认不选中从设备
}
void loop() {
  digitalWrite(SS, LOW); // 选中从设备
  byte received = SPI.transfer(0x55); // 发送0x55,同时接收数据
  digitalWrite(SS, HIGH); 
  delay(1000);
}

7.4.2 异步通信

定义:数据传输无需全局时钟,而是通过握手协议(Handshaking)或控制信号协调。
工作原理

  • 发送方和接收方通过“请求”(Request)和“应答”(Acknowledge)信号交互。

  • 数据传输速率可动态调整,适应不同速度的设备。

特点与优缺点

  • 优点:适应性强(支持不同速度设备)、抗干扰能力好(适合长距离传输)。

  • 缺点:额外控制信号增加复杂度;传输效率较低(需多次握手)。

  • 应用场景:外设连接(如UART串口)、网络通信(如以太网)。

示例

  • UART(通用异步收发器):通过起始位、数据位、停止位实现异步通信(如RS-232)。

  • USB(低速模式):通过握手协议协调主机与设备的数据传输。

详细解析
异步通信通过握手协议(如UART的起始/停止位)协调传输,无需全局时钟。

UART数据帧结构

字段长度描述
起始位1 bit低电平,标志传输开始
数据位5-9 bits实际数据(通常8位)
校验位1 bit奇偶校验(可选)
停止位1-2 bits高电平,标志传输结束

案例:UART在GPS模块中的应用
GPS模块通过UART向微控制器发送NMEA格式数据:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
  • 波特率:9600 bps

  • 帧格式:1起始位、8数据位、无校验、1停止位(8N1)。

代码示例(Python串口读取)

python

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)  # 打开串口
while True:
    data = ser.readline()  # 读取一行数据
    if data:
        print(data.decode('utf-8'))  # 打印GPS数据

7.4.3 总线数据传送模式

总线支持多种数据传送方式,具体模式取决于应用需求:

  1. 按传输方向分类

    • 单工(Simplex):单向传输(如广播)。

    • 半双工(Half-Duplex):双向交替传输(如I2C总线)。

    • 全双工(Full-Duplex):双向同时传输(如PCI Express)。

  2. 按传输规模分类

    • 单次传输:每次操作传输一个字(如CPU读取内存单个指令)。

    • 突发传输(Burst):连续传输多个数据块(如内存读取缓存行)。

  3. 按操作类型分类

    • 读操作:主设备从从设备读取数据。

    • 写操作:主设备向从设备写入数据。

    • 原子操作:不可中断的传输(如总线锁定)。

  4. 高级传输模式

    • 流水线传输:重叠多个传输周期以提高效率(如现代内存控制器)。

    • DMA(直接内存访问):外设直接与内存交换数据,无需CPU介入。

详细对比与案例

  1. 传输方向分类

    模式描述案例
    单工单向传输(仅发送/接收)温度传感器→显示器
    半双工双向交替传输I2C总线(主从切换)
    全双工双向同时传输电话通话、PCI Express
  2. 突发传输(Burst)案例
    DDR内存一次传输64字节的缓存行(Cache Line),减少寻址开销。

  3. DMA传输案例
    硬盘通过DMA直接向内存写入数据,无需CPU参与:

    c

    // 伪代码:启动DMA传输
    dma_config.src_addr = HDD_BUFFER;
    dma_config.dst_addr = MEMORY_ADDR;
    dma_config.size = 4096;  // 传输4KB数据
    start_dma(&dma_config);

7.5 总线标准

总线标准定义了机械结构、电气特性、协议规范等,确保设备兼容性。以下是常见总线标准:

  1. 内部总线(系统总线)

    • PCI(Peripheral Component Interconnect)

      • 特点:并行总线,支持即插即用,带宽133 MB/s(32位@33 MHz)。

      • 应用:早期PC扩展卡(显卡、网卡)。

    • PCI Express(PCIe)

      • 特点:串行点对点传输,分通道(Lane)设计,带宽可扩展(如PCIe 4.0单通道2 GB/s)。

      • 应用:现代显卡、NVMe SSD。

  2. 外部总线(设备总线)

    • USB(Universal Serial Bus)

      • 特点:支持热插拔、树形拓扑,最新版本USB4(40 Gbps)。

      • 应用:外置存储、输入设备、手机充电。

    • SATA(Serial ATA)

      • 特点:串行传输,支持热插拔,带宽6 Gbps(SATA III)。

      • 应用:硬盘、光驱连接。

  3. 嵌入式/专用总线

    • I2C(Inter-Integrated Circuit)

      • 特点:两线制(SCL时钟线、SDA数据线),支持多主多从,低速(100 kHz~5 MHz)。

      • 应用:传感器、EEPROM。

    • SPI(Serial Peripheral Interface)

      • 特点:四线制(SCK、MOSI、MISO、CS),全双工,高速(可达100 MHz)。

      • 应用:Flash存储器、显示屏驱动。

    • CAN(Controller Area Network)

      • 特点:抗干扰强,支持多主通信,实时性高(1 Mbps)。

      • 应用:汽车电子、工业控制。

  4. 历史总线

    • ISA(Industry Standard Architecture)

      • 特点:16位带宽,8 MHz,已被PCI取代。

    • AGP(Accelerated Graphics Port)

      • 特点:专为显卡设计,带宽2.1 GB/s(AGP 8x)。

详细对比与案例

总线标准类型带宽拓扑结构应用场景
PCIe 4.0内部串行总线16 GT/s per Lane点对点显卡、NVMe SSD
USB 3.2外部串行总线20 Gbps树形外置硬盘、高速外设
I2C嵌入式总线100 kHz-5 MHz多主多从传感器、EEPROM
CAN工业总线1 Mbps总线型汽车电子、工业控制

案例:USB协议栈
USB数据传输分为四层:

  1. 物理层:定义电气特性(如USB 2.0使用差分信号)。

  2. 协议层:定义数据包格式(令牌包、数据包、握手包)。

  3. 逻辑层:处理设备枚举、端点配置。

  4. 应用层:驱动程序和设备交互。

代码示例(STM32配置USB CDC设备)

c

// 使用STM32CubeMX生成的USB CDC代码
int main(void) {
  HAL_Init();
  MX_USB_DEVICE_Init(); // 初始化USB
  while (1) {
    CDC_Transmit_FS((uint8_t*)"Hello World\n", 12); // 通过USB发送数据
    HAL_Delay(1000);
  }
}

总结与对比

  1. 同步 vs. 异步

    • 同步:时钟严格,速度快(如DDR内存)。

    • 异步:灵活,抗干扰(如工业现场总线)。

  2. 总线标准选择

    • 高速内部连接:PCIe(点对点全双工)。

    • 低速多设备:I2C(半双工多从机)。

    • 通用外设:USB(热插拔、树形拓扑)。

  3. 实际开发建议

    • 使用示波器或逻辑分析仪抓取总线信号(如SPI时钟波形)。

    • 优先选择成熟协议栈(如STM32的HAL库、Linux内核驱动)。

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

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

相关文章

两步在 Vite 中配置 Tailwindcss

第一步&#xff1a;安装依赖 npm i -D tailwindcss tailwindcss/vite第二步&#xff1a;引入 tailwindcss 更改配置 // src/main.js import tailwindcss/index// vite.config.js import vue from vitejs/plugin-vue import tailwindcss from tailwindcss/viteexport default …

DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 上一期分享了如何在本地部署 DeepSeek R1 模型&#xff0c;但通过命令行运行的本地模型&#xff0c;问答的交互也要使用命令行&#xff0c;体验并不是很好。这期分享几个第三方客户端&#xff0c;涵盖了桌…

ros:ur机械臂初识

这是用来可视化的launch文件 比如&#xff0c;我运行 roslaunch ur_description view_ur3.launch ur3模型 ur3e模型 ur5模型 ur5e模型 ur10模型 ur20模型 ur30模型 后来我搜了一下 UR5 和 UR10 都是由 Universal Robots&#xff08;简称 UR&#xff09;生产的协作机器人&…

数据结构——二叉树(2025.2.12)

目录 一、树 1.定义 &#xff08;1&#xff09;树的构成 &#xff08;2&#xff09;度 2.二叉树 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;二叉树的遍历 &#xff08;3&#xff09;遍历特性 二、练习 1.二叉树 &#xff08;1&#xff09;创建二叉树…

【NLP】循环神经网络RNN

目录 一、词嵌入层 二、循环网络层 2.1 RNN网络原理 2.2 Pytorch RNN API 自然语言处理&#xff08;Nature language Processing&#xff0c;NLP&#xff09;研究的主要是通过计算机算法来理解自然语言。对于自然语言来说&#xff0c;处理的数据主要就是人类的语言&#xf…

UNET改进63:添加DTAB模块|强大的局部拟合和全局视角能力

本文内容:在不同位置添加DTAB模块 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 盲点网络(BSN)一直是自监督图像去噪(SSID)中流行的神经架构。然而,大多数现有的 BSN 都是基于卷积层构建的。尽管在许多图像修复任务中,Transformer 已显示出克服卷…

深度学习框架探秘|TensorFlow:AI 世界的万能钥匙

在人工智能&#xff08;AI&#xff09;蓬勃发展的时代&#xff0c;各种强大的工具和框架如雨后春笋般涌现&#xff0c;而 TensorFlow 无疑是其中最耀眼的明星之一。它不仅被广泛应用于学术界的前沿研究&#xff0c;更是工业界实现 AI 落地的关键技术。今天&#xff0c;就让我们…

多表查询(MySQL笔记第三期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 多表关系多表查询内连接外连接左外连接右外连接 自连接联合查询子查询标量子查询列子查询行子查询表子查询 例题 多表关系 在项目开发中&#xff0c;进行数据库表结构设计时&…

vue3+element-plus中的el-table表头和el-table-column内容全部一行显示完整(hook函数)

hook函数封装 export const useTableColumnWidth _this > {const { refTable } _thisconst columnWidthObj ref()const getTableColumnWidth cb > {nextTick(() > {columnWidthObj.value {}// 获取行rowsconst tableEle refTable?.refBaseTable?.$elif (!tab…

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…

小小小病毒(3)(~_~|)

一分耕耘一分收获 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 欢迎来到小小小病毒&#xff08;3&#xff09; 感谢大家的支持 还是那句话&#xff1a;上代码&#xff01; …

java nio 原理 非阻塞IO Netty

一、为什么必须去了解NIO 首先你需要之后Netty的主要实现手段就是Nio,很多人一直学不明白Netty&#xff0c;根本原因是 除了日常开发中很难能够实践&#xff0c;很大一部分原因是不熟悉NIO&#xff0c;事实上真正熟悉了NIO和它背后的原理之后&#xff0c;去查看Netty的源码就有…

非侵入式观测进程里的某个线程的tls数据

一、背景 在之前的 线程局部存储tls的原理和使用_linux tls存放在堆区-CSDN博客 博客里&#xff0c;我们讲到了glibc提供的tls机制及tls的原理及与内核的配合逻辑。在之前的 非gdb方式观察应用程序的运行时的变量状态-CSDN博客 博客里&#xff0c;我们讲到了如何非侵入式观测进…

平面与平面相交算法杂谈

1.前言 空间平面方程&#xff1a; 空间两平面如果不平行&#xff0c;那么一定相交于一条空间直线&#xff0c; 空间平面求交有多种方法&#xff0c;本文进行相关讨论。 2.讨论 可以联立方程组求解&#xff0c;共有3个变量&#xff0c;2个方程&#xff0c;而所求直线有1个变量…

C#(Winform)通过添加AForge添加并使用系统摄像机

先展示效果 AForge介绍 AForge是一个专门为开发者和研究者基于C#框架设计的, 也是NET平台下的开源计算机视觉和人工智能库 它提供了许多常用的图像处理和视频处理算法、机器学习和神经网络模型&#xff0c;并且具有高效、易用、稳定等特点。 AForge主要包括: 计算机视觉与人…

Golang并发编程最佳实践:协程与通道

Golang并发编程最佳实践&#xff1a;协程与通道 本文旨在介绍Golang并发编程的最佳实践&#xff0c;重点讨论协程和通道的使用方法&#xff0c;以及相关的实际案例和代码示例。 一、Golang并发编程简介 又称Go语言&#xff09;是一种由Google开发的编程语言&#xff0c;旨在提供…

Uniapp 短视频去水印解析工具开发实现

最近搞了一个有意思的小工具——短视频去水印解析器&#xff01;这玩意儿可以把短视频中的水印给抹掉&#xff0c;还能提取视频、封面等资源。整个项目用了 Uniapp 开发&#xff0c;做完后体验了一下&#xff0c;发现还挺顺手。今天就来跟大家聊聊实现思路和代码细节~ 需求分析…

LeapMotion第2代 Unity示范代码(桌面开发)

一、官方地址&#xff1a; 官网&#xff1a;https://www.ultraleap.com/ 驱动下载&#xff1a;https://leap2.ultraleap.com/downloads/leap-motion-controller-2/ docs地址&#xff1a;https://docs.ultraleap.com/xr-and-tabletop/tabletop/unity/getting-started/index.html…

【Qt】模型/视图(Model/View)框架详解(一):基本概念

1、简述 1.1 框架 Qt的模型/视图(Model/View)框架 源自 模型-视图-控制器 (MVC) ; 模型 提供从数据集合(比如,数据库)中获取数据;视图 提供显示数据的界面;控制器 提供用户通过界面修改数据的接口;在Qt模型/视图框架中,称之为“委托Delegate”1.2 通信 模型,视图…

如何在Spring Boot中使用Profiles实现环境隔离

文章目录 如何在Spring Boot中使用Profiles实现环境隔离什么是Spring Profiles1.基本概念2.配置管理3.使用场景4.条件化配置5.优点Spring Profiles的基础知识1.Profile的定义2.配置文件3.激活Profiles4.条件化配置5.Profile的优先级与合并6.Profiles的最佳实践配置文件的组织1.…