计组与微机控制
5.4 番外:先衔接后续的 x86,之后再跳回总线
5.4 番外:先衔接后续的 x86,之后再跳回总线
异步定时方式 异步定时方式的核心是:
没有统一时钟,靠请求和回答信号来配合。
主设备说:“我要访问你。”
从设备准备好了以后说:“我准备好了。”
这就像两个人对话,不是看统一铃声,而是互相确认。
12.1 异步方式为什么适合速度差异大的设备?
因为不同设备速度可能差很多。
比如:
CPU 很快。内存中等。键盘很慢。打印机更慢。某些 I/O 设备响应时间不固定。
如果强行同步,CPU可能总是在等慢设备,或者慢设备来不及响应。
异步方式允许设备按自己的速度响应。
快设备很快回答。慢设备慢一点回答。主设备等到回答后再继续。
13. 异步方式的三种握手方式
图里讲了:非互锁半互锁全互锁
所谓“互锁”,就是双方信号之间有没有严格依赖关系。
你可以把请求和回答想象成两个人打招呼:
张三:晚安。李四:收到晚安。
问题是:张三说完晚安后,是不是必须等李四回复才撤回?李四回复后,是不是必须等张三撤回才撤回?
这就是互锁关系。

14. 非互锁方式
非互锁方式:
主设备发出请求信号后,不用等从设备回答,过一段时间自己撤销请求。从设备收到请求后,发出回答信号,也不用等主设备撤销请求,过一段时间自己撤销回答。
也就是说,双方都比较“自顾自”。
流程大概是:
主设备:请求拉高。过一段时间,主设备自动撤销请求。从设备:看到请求后回答。过一段时间,从设备自动撤销回答。
它没有严格确认。
14.1 非互锁的特点
优点:速度快。控制简单。
缺点:可靠性差。
为什么可靠性差?
因为主设备可能撤销请求太早,从设备还没看清。从设备可能回答太短,主设备还没检测到。双方缺少严格确认。
所以非互锁适合:
设备速度差不多。信号延迟可预测。对可靠性要求不特别高的场景。
15. 半互锁方式
半互锁方式:主设备发出请求后,必须等到从设备回答,才能撤销请求。但是从设备发出回答后,不一定等主设备请求撤销,它可以过一段时间自动撤销回答。
也就是说:请求的撤销依赖回答。回答的撤销不依赖请求撤销。
流程是:主设备发请求。从设备收到请求后发回答。主设备看到回答后撤销请求。从设备过一段时间撤销回答。
15.1 半互锁比非互锁可靠在哪里?
因为主设备不会随便撤销请求。
它必须确认从设备已经回答了,才撤销请求。
这样至少保证:从设备确实收到了请求。
但从设备撤销回答仍然不是完全受主设备控制,所以还不算最可靠。
16. 全互锁方式

全互锁方式最严格。
主设备发请求后,必须等从设备回答后才能撤销请求。从设备发回答后,必须等主设备请求撤销后,才能撤销回答。
双方完全互相确认。
流程是:主设备发请求。从设备看到请求,发回答。主设备看到回答,撤销请求。从设备看到请求已经撤销,再撤销回答。
这就是完整握手。
16.1 全互锁为什么最可靠?
因为每一步都被对方确认。请求不会无缘无故消失。回答也不会无缘无故消失。双方都知道对方已经看到自己的信号变化。
所以全互锁可靠性最高。但它也最慢。
因为每一步都要等对方确认,不能自己提前撤。
16.2 三种异步握手方式总结
方式 | 主设备撤销请求是否等回答 | 从设备撤销回答是否等请求撤销 | 速度 | 可靠性
非互锁 | 不等 | 不等 | 最快 | 最差
半互锁 | 等 | 不等 | 中等 | 中等
全互锁 | 等 | 等 | 最慢 | 最高非互锁:各撤各的。半互锁:主等从,从不等主。全互锁:双方都等对方。
17. 半同步定时方式
半同步定时方式是同步和异步的结合。
它有统一时钟,所以基本操作还是按时钟节拍走。
但是它允许从设备通过一个等待信号 Wait 告诉主设备:
“我还没准备好,你先等等。”所以半同步方式的核心是:
平时按同步方式工作,遇到慢设备就插入等待周期。
17.1 为什么需要半同步?
同步方式的问题是:CPU 按固定时间取数据,可是慢设备可能还没准备好。
异步方式的问题是:完全靠握手,控制复杂,速度也慢。
半同步方式折中:大家仍然跟统一时钟走。但是慢设备可以发 Wait 信号。CPU 检测到 Wait,就暂停等待。等 Wait 消失,CPU 再继续取数据。
17.2 半同步读操作大概过程
比如 CPU 读内存:CPU 发出地址和读命令。内存开始准备数据。如果内存还没准备好,就让 Wait 信号有效。CPU看到 Wait 有效,就不急着取数据。内存准备好数据后,撤销 Wait。CPU看到 Wait 消失,就从数据总线上取数据。
所以半同步方式中,等待时间不是固定的,而是由从设备决定。
17.3 半同步的优缺点
优点:比完全异步简单。比纯同步可靠。能适应不同速度的设备。可以解决慢设备来不及响应的问题。
缺点:因为有统一时钟,所以系统时钟不能太高。遇到慢设备时会插入等待周期,整体速度会下降。
18. 分离式定时方式
分离式定时方式的思想很重要:
主设备发出请求后,如果从设备需要很久准备数据,主设备不用一直占着总线干等,而是先释放总线。等从设备准备好后,再重新申请总线传数据。
18.1 为什么需要分离式?
假设 CPU 读某个很慢的设备。
普通方式下:CPU 发请求。设备慢慢准备数据。总线一直被占着。其他设备都不能用总线。等设备准备好后,再传数据。
这样总线利用率很低。因为等待期间总线其实没在传数据,却被占着。
18.2 分离式方式怎么做?
流程大概是:
CPU 作为主设备,向从设备发出读请求。从设备应答,表示收到了。CPU 释放总线。从设备自己慢慢准备数据。这段时间总线可以给别人用。从设备准备好数据后,反过来申请总线,暂时成为主设备。从设备把数据送回 CPU。
所以分离式方式相当于把一次操作分成两个阶段:
第一段:发请求。第二段:回传数据。
中间等待阶段不占用总线。
18.3 分离式方式的优缺点
优点:提高总线利用率。等待期间总线可以处理其他事务。适合访问慢速设备或延迟较长的设备。
缺点:控制复杂。因为要记录谁请求了什么,谁还没返回数据,返回的数据对应哪个请求。从设备后面还要重新申请总线。
19. 四种总线定时方式整体比较
定时方式 | 核心思想 | 优点 | 缺点 | 适合场景
同步 | 所有操作按统一时钟 | 快,控制简单 | 适应性差,可靠性受设备速度影响 | 部件速度接近、总线短
异步 | 靠请求/回答握手 | 适合速度差异大的设备,可靠 | 控制复杂,速度较慢 | 速度差异大的设备
半同步 | 有统一时钟,也有 Wait | 兼顾同步和异步 | 时钟不能太高,有等待周期 | 中速系统、设备速度有差异
分离式 | 等待时释放总线 | 总线利用率高 | 控制更复杂 | 慢速设备、长延迟访问可以这样记:
同步:大家听同一个钟。异步:大家互相打招呼确认。半同步:听钟,但慢了可以喊等等。分离式:慢慢准备时先别占路,准备好再回来传。
20. 同步串行通信方式
注意,这里的“同步/异步串行通信”和前面的“同步/异步总线定时”不是完全同一个层面的概念。
前面讲的是总线内部通信的定时方式。这里讲的是串行通信中一位一位传数据时,发送方和接收方怎么保持节奏一致。
20.1 什么是串行通信?
串行通信就是一位一位传数据。
比如一个字节 10110010,不是8位同时传,而是按顺序:
1 → 0 → 1 → 1 → 0 → 0 → 1 → 0
它像单车道,一次只能过一辆车。
与之相对的是并行通信:
多根线同时传多个 bit。
比如 8 根线同时传一个字节。
20.2 同步串行通信的特点
同步串行通信中,发送方和接收方使用统一的时钟。
也就是说,接收方知道什么时候采样每一位。
它不需要每个字符都加起始位和停止位。
通常是把多个字节组成一个信息帧来传。
帧的结构可能是:
同步字符Byte1Byte2...Byte nCRC结束字符
20.3 同步串行通信为什么效率高?
因为它不是每传一个字符都加起始位、停止位。
它只在一整块数据前后加同步字符和结束字符。
比如传 100 个字节:
同步串行可能只在开头加同步字符,在结尾加结束字符。异步串行每个字节都要加起始位、停止位。
所以同步串行的额外开销更少,传输效率更高。
20.4 同步串行通信的缺点
缺点是硬件复杂。
因为双方要保持严格同步,要有时钟同步机制。
所以它实现起来比异步串行复杂。
21. 异步串行通信方式
异步串行通信中,发送方和接收方各自有自己的时钟。

但是它们提前约定好速率,比如:
9600 bps115200 bps
然后每传一个字符,都用起始位和停止位来同步。
21.1 异步串行一帧是什么样?
起始位数据位校验位停止位
一般结构是:
空闲状态:高电平起始位:低电平数据位:5~8位,常见8位校验位:可有可无停止位:1位、1.5位或2位,高电平
(后续会说很多的通讯协议比如说I2C UART SPI 等等计组不涉及但是微机要学)
21.2 起始位有什么用?
起始位表示:
“一个新字符要开始传了。”
在空闲状态下,线路通常保持高电平。
当发送方要开始发数据时,会先发一个低电平起始位。
接收方一看到从高到低的跳变,就知道:
“新的一帧开始了,我要开始按约定速率采样。”
所以起始位的作用就是重新对齐接收节奏。
21.3 停止位有什么用?
停止位表示:
“这个字符传完了。”
停止位通常是高电平。
它还有一个重要作用:
让线路回到空闲高电平,为下一次起始位的下降沿做准备。
重新开始新的信息帧传输之前,停止位一直保持高电平,这样可以保证重新开始时起始位处一定有一个下降沿。
这句话很重要。因为接收方就是靠这个下降沿识别新帧开始的。
如果没有高电平空闲状态,下一次低电平起始位就不明显,接收方可能不知道新帧从哪里开始。
22. 同步串行和异步串行的区别
比较项 | 同步串行 | 异步串行
时钟 | 收发双方共享或同步时钟 | 双方各自有独立时钟
数据单位 | 一帧可包含多个字节 | 一帧通常传一个字符
同步方式 | 靠同步字符或同步时钟 | 靠起始位和停止位
效率 | 较高 | 较低
硬件 | 较复杂 | 较简单
适合 | 大块连续数据 | 低速、简单通信简单记:
同步串行:一大块一起传,效率高,但复杂。异步串行:一个字符一个字符传,简单,但开销大。
举例:I2C 是 同步 通信,UART 是 异步 通信。
· I2C:有时钟线(SCL),所有数据位的传输都由时钟信号同步,因此是同步通信。
· UART:没有时钟线,收发双方需预先约定相同的波特率,并在每个数据包的起始位进行同步,之后靠内部时钟计数采样,因此是异步通信。
23. 不同速度设备之间为什么更适合异步方式?
不同设备的时钟可能不完全一致:
CPU 的时钟很快。I/O 设备很慢。不同设备的晶振存在误差。传输线路有延迟。温度、电压变化也会影响时钟。
如果强行同步,时间差积累后就可能导致采样错误。
所以速度差距大的设备之间,常用异步方式,因为异步方式每次都通过请求/回答或起始/停止位重新协调节奏。
24. 这部分知识的主线怎么串起来?
可以按这条主线学:
计算机里很多部件要通信,所以需要总线。总线包括地址总线、数据总线、控制总线。一次完整使用总线的过程叫总线事务。总线事务一般包括请求、仲裁、寻址、传输、释放。传数据时,如果每个数据都给地址,就是非突发传送。如果只给首地址然后连续传多个数据,就是突发传送。总线工作时要规定信号什么时候有效,这叫总线定时。总线定时有同步、异步、半同步、分离式。串行通信里又有同步串行和异步串行,重点是收发双方如何保持位同步。
25. 总结:
地址总线:去哪儿。数据总线:传什么。控制总线:怎么传。
总线事务:从申请总线到释放总线的一整套过程。
非突发:地址、数据、地址、数据。突发:首地址、数据、数据、数据。
同步定时:统一时钟,快但不够灵活。异步定时:请求/回答握手,可靠但慢。半同步:统一时钟 + Wait等待。分离式:等待时释放总线,提高利用率。
同步串行:靠统一时钟或同步字符,一帧传多个字节。异步串行:靠起始位和停止位,一个字符一个字符传。
这章最容易考计算题的是:总线宽度、时钟频率、地址/数据线复用、突发传送。你做题时一定按这个顺序想:先算周期时间,再算数据要传几次,再看要不要额外传地址,最后乘以周期时间。
