9.2 读、写与应答周期
第 9.1 节确定了总线上的三类信息。这些信息不能任意变化。总线周期(bus cycle)是完成一次外部传送的定时序列。8086 的基本周期使用 T1、T2、T3、T4 四个时钟状态;状态名表示一段时序区间,不是一条独立机器指令。
T1 至 T4 依次建立、传送并释放
一个简化的无等待读周期按下面顺序进行:
1. T1——地址:处理器驱动地址,ALE 标记外部锁存器可以捕获复用地址的区间。
2. T2——命令与换向:处理器不再把复用引脚驱动为地址输出,把数据通路配置为接收方向,并使 /RD 有效。
3. T3——数据与完成:被选设备驱动有效数据,READY 表示传送可以完成。
4. T4——结束与释放:读回值已在完成边界被捕获,处理器撤销命令,并释放接口或为下一周期做准备。
写周期使用相同的四状态框架,但数据所有权相反。CPU 在 T1 给出地址,在 T2 驱动写数据并使 /WR 有效,然后在设备要求的捕获区间内保持数据稳定。T4 中,CPU 撤销 /WR 并结束传送。
T2 对读周期尤其重要。AD 引脚在 T1 中由 CPU 驱动地址,稍后又必须由设备驱动数据。设备开始输出前,CPU 必须停止输出。这段避免输出重叠的间隔称为总线换向(bus turnaround)。
完成应答必须晚于有效地址、命令与数据
应答(acknowledgment)是接收方已经能够完成所请求传送的证据。不同总线会使用不同的信号名与握手方式表达这件事。在 8086 接口中,READY 是重要的节拍输入:如果被选存储器或 I/O 设备在要求的采样时刻还未就绪,处理器就在当前周期中插入一个或多个等待状态。
READY 并不表示“跳过其他规则”。只有前面的条件都已满足,它才有意义:
- 目标地址已经被保留;
- 正确的读命令或写命令已经有效;
- 数据总线只有一个发送端在驱动;
- 读数据已经稳定,或者写数据已经被接收。
这种顺序使逻辑分析仪轨迹可以诊断。不同故障会留下不同特征:
- ALE 缺失会让复用引脚改送数据时丢失地址。
- 两个数据驱动者会造成争用,即使 READY 足够晚也无法修复。
- 读数据尚未稳定就让 READY 有效,可能使 CPU 捕获不确定值。
- T4 后
/WR仍然有效,会让写操作越过预期周期边界。
增加等待状态只能修复时间不足,不能修复地址错误、读写方向颠倒或两个输出同时使能。正确诊断应先判断故障属于选择、方向、时序还是释放。
8086 还存在中断应答总线活动,但那是第 12 章结合中断学习的特定控制事务。本节中的“应答”表示 READY 所体现的一般完成关系,并不是说每次读写都会另外产生一个 ACK 数据包。
第 9.2 节已经把 AD 引脚视为 T1 中的地址线和后续状态中的数据线。第 9.3 节将解释这种换职所需的硬件:地址锁存器、双向收发器与三态输出。