← 返回 计组与微机控制

计组与微机控制

5.4 番外:先衔接后续的 x86,之后再跳回总线

5.4 番外:先衔接后续的 x86,之后再跳回总线

异步定时方式 异步定时方式的核心是:

没有统一时钟,靠请求和回答信号来配合。

主设备说:“我要访问你。”

从设备准备好了以后说:“我准备好了。”

这就像两个人对话,不是看统一铃声,而是互相确认。

12.1 异步方式为什么适合速度差异大的设备?

因为不同设备速度可能差很多。

比如:

CPU 很快。内存中等。键盘很慢。打印机更慢。某些 I/O 设备响应时间不固定。

如果强行同步,CPU可能总是在等慢设备,或者慢设备来不及响应。

异步方式允许设备按自己的速度响应。

快设备很快回答。慢设备慢一点回答。主设备等到回答后再继续。

13. 异步方式的三种握手方式

图里讲了:非互锁半互锁全互锁

所谓“互锁”,就是双方信号之间有没有严格依赖关系。

你可以把请求和回答想象成两个人打招呼:

张三:晚安。李四:收到晚安。

问题是:张三说完晚安后,是不是必须等李四回复才撤回?李四回复后,是不是必须等张三撤回才撤回?

这就是互锁关系。

5.4 番外:先衔接后续的 x86,之后再跳回总线 图 1

14. 非互锁方式

非互锁方式:

主设备发出请求信号后,不用等从设备回答,过一段时间自己撤销请求。从设备收到请求后,发出回答信号,也不用等主设备撤销请求,过一段时间自己撤销回答。

也就是说,双方都比较“自顾自”。

流程大概是:

主设备:请求拉高。过一段时间,主设备自动撤销请求。从设备:看到请求后回答。过一段时间,从设备自动撤销回答。

它没有严格确认。

14.1 非互锁的特点

优点:速度快。控制简单。

缺点:可靠性差。

为什么可靠性差?

因为主设备可能撤销请求太早,从设备还没看清。从设备可能回答太短,主设备还没检测到。双方缺少严格确认。

所以非互锁适合:

设备速度差不多。信号延迟可预测。对可靠性要求不特别高的场景。

15. 半互锁方式

半互锁方式:主设备发出请求后,必须等到从设备回答,才能撤销请求。但是从设备发出回答后,不一定等主设备请求撤销,它可以过一段时间自动撤销回答。

也就是说:请求的撤销依赖回答。回答的撤销不依赖请求撤销。

流程是:主设备发请求。从设备收到请求后发回答。主设备看到回答后撤销请求。从设备过一段时间撤销回答。

15.1 半互锁比非互锁可靠在哪里?

因为主设备不会随便撤销请求。

它必须确认从设备已经回答了,才撤销请求。

这样至少保证:从设备确实收到了请求。

但从设备撤销回答仍然不是完全受主设备控制,所以还不算最可靠。

16. 全互锁方式

5.4 番外:先衔接后续的 x86,之后再跳回总线 图 2

全互锁方式最严格。

主设备发请求后,必须等从设备回答后才能撤销请求。从设备发回答后,必须等主设备请求撤销后,才能撤销回答。

双方完全互相确认。

流程是:主设备发请求。从设备看到请求,发回答。主设备看到回答,撤销请求。从设备看到请求已经撤销,再撤销回答。

这就是完整握手。

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. 异步串行通信方式

异步串行通信中,发送方和接收方各自有自己的时钟。

5.4 番外:先衔接后续的 x86,之后再跳回总线 图 3

但是它们提前约定好速率,比如:

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等待。分离式:等待时释放总线,提高利用率。

同步串行:靠统一时钟或同步字符,一帧传多个字节。异步串行:靠起始位和停止位,一个字符一个字符传。

这章最容易考计算题的是:总线宽度、时钟频率、地址/数据线复用、突发传送。你做题时一定按这个顺序想:先算周期时间,再算数据要传几次,再看要不要额外传地址,最后乘以周期时间。