8.1 微机系统扩展的必要性与扩展原理

8.1.1 系统扩展的必要性

在单片机应用系统的设计中,当片内资源无法满足需求时,就需要进行外部扩展。
  • 早期单片机系统扩展原因
    • 程序存储器扩展:早期Flash和OTP技术不成熟,小批量生产时需要外扩ROM。
    • 数据存储器与功能模块扩展:片内RAM容量小,或缺少A/D、D/A等专用功能模块时,需要外扩。
    • I/O口扩展:当通用IO引脚数量不足以连接所有外部设备时,需要进行扩展。
  • 现代单片机系统设计方法
      1. 优先选择片内资源:首先应寻找一款片内资源就能满足设计需求的MCU,尽量避免外部扩展。
      1. 优先选择串行扩展:如果找不到合适的MCU,优先考虑使用串行接口芯片进行扩展。
      1. 并行扩展作为补充:仅在串行扩展无法满足需求(如速度要求)时,才采用并行扩展。
      1. 多MCU协同工作:对于复杂系统,可以采用多个MCU协同工作,通过UART或其它串行接口通信。

8.1.2 并行扩展与串行扩展的优缺点对比

  • 外部并行扩展
    • 优点速度快
    • 缺点连线多,占用IO口多,容易出现可靠性问题。
  • 外部串行扩展
    • 优点连线少,占用IO口少。
    • 缺点速度较慢

8.2 外部并行扩展原理

8.2.1 外部并行扩展相关的引脚(三总线) ❗❗❗

8051单片机通过三组总线与外部设备连接,实现并行扩展。
  • 地址总线 (AB):提供16位地址。❗
    • 高8位地址:由 P2口 提供。
    • 低8位地址:由 P0口 提供(与数据总线分时复用)。
  • 数据总线 (DB):提供8位数据。❗
    • P0口 提供(与地址总线分时复用)。
  • 控制总线 (CB):提供读写控制信号。❗
    • ALE (Address Latch Enable):地址锁存允许信号。用于从P0口上分离出低8位地址。
    • PSEN (Program Store Enable):外部程序存储器读选通信号,低电平有效。
    • RD / WR(Read/Write):外部数据存储器读/写信号,低电平有效。
notion image

8.2.2 程序存储器(ROM)扩展

MOVC A, @DPTR+A为什么需要两个机器周期? →因为片外ROM取值操作就要用掉一个机器周期👇

(1) 片外ROM取指操作时序❗❗

这个操作的核心是为了解决 P0端口既要作为低8位地址总线,又要作为8位数据总线 的问题,这个过程被称为总线分时复用

1. 输出地址

  • 动作:当需要从外部ROM取指令时,CPU首先需要将16位的指令地址发送出去。
  • 实现
    • P2端口 输出16位地址中的高8位 (A15-A8) 。在访问外部存储器期间,P2口专门用于此功能。
    • P0端口 同时输出16位地址中的低8位 (A7-A0) 。
此时,完整的16位地址暂时出现在了P2和P0端口上。

2. 锁存低8位地址

  • 动作:由于P0端口稍后需要转变为数据总线来接收指令,它不能一直保持地址信号。因此,必须在P0改变用途之前,将其上的低8位地址“保存”下来。这个任务由外部的地址锁存器(通常是74LS373芯片)完成。
notion image
  • 实现
    • CPU通过 ALE(地址锁存允许) 引脚发出一个高电平到低电平的脉冲 。
    • 这个ALE信号的下降沿会触发74LS373锁存器,使其捕获并锁住当前P0端口上的低8位地址信息 。
    • 锁存完成后,P0端口就完成了它作为地址总线的任务,并立即切换为高阻态,准备作为数据输入端口使用 。
现在,完整的16位地址被稳定地提供给外部ROM:高8位来自P2口,低8位来自74LS373锁存器的输出端。

3. 选中ROM并读取数据

  • 动作:地址信号稳定后,CPU需要通知外部ROM,可以把对应地址的数据(即指令码)放到数据总线上了。
  • 实现
    • CPU将 (程序存储器使能) 引脚的电平拉低
    • /PSEN信号通常连接到外部ROM的 /OE(输出使能)/CE(片选) 引脚。当/PSEN变为低电平有效时,ROM芯片被激活,它会根据其地址引脚上接收到的稳定地址,找到对应的存储单元,并将其中的8位指令码输出到数据引脚上 。
    • ROM的数据引脚连接着单片机的P0端口。
此时,指令码已经被ROM放置在了数据总线(P0口)上,等待CPU读取。

4. CPU读入指令

  • 动作:CPU在发出PSEN低电平后,等待一小段时间(以确保ROM有足够的时间响应),然后通过P0端口读取数据总线上的信息。
  • 实现
    • CPU内部逻辑在PSEN有效期间,从P0端口读入8位指令码,并送入指令寄存器 。
    • 读取操作完成后,PSEN信号会恢复为高电平,使ROM的数据输出端关闭,让出数据总线。
至此,一个完整的从外部ROM取指令的周期就结束了。CPU接下来会译码并执行刚刚取回的指令,然后开始下一个取指周期。
notion image

(2) 相关芯片介绍

  • 地址锁存器 (74LS373):八进制D型锁存器,用于锁存P0口的低8位地址,实现地址和数据的分离。
    • G:数据锁存控制。高电平,输出随输入变化;低电平,Q端被锁存
    • /OE:三态控制:低电平,允许数据输出;高电平,三态门关闭,呈现高阻态
    • notion image
  • 译码器 (74LS138):3-8线译码器,用于地址译码。产生多片存储器芯片的片选信号,确保不同芯片地址范围不冲突。
    • NOTE THAT:
      如果使用16位的地址线,片外ROM可以寻址64KB。单片ROM可能没有这么大,需要多片ROM一起使用;因此需要使用地址译码器。
notion image
  • 存储器 (EPROM/EEPROM/FLASH):如27C系列、28C系列、29C系列,用于存储程序或数据。
    • EEPROM与FLASH的区别:EEPROM容量较小但可按字节写入,速度慢;FLASH容量大,写入前需按块擦除,速度快。
    • NOR Flash与NAND Flash的区别:NOR Flash容量相对小,但支持按字节读取;NAND Flash容量相对大,按页读取。
    • 命名规则
      • 例如,(8KB)
notion image

(3) 扩展电路与地址译码❗

  • 地址线全译码:使用74LS138等译码器,将高位地址线作为输入,其输出连接到各个存储芯片的片选端(/CE)。❗
    • 优点:每个存储单元的地址唯一,不会产生地址重叠。
    • notion image
  • 不完全译码(部分译码):直接用高位地址线或其简单组合来控制片选。
    • 缺点:会造成地址重叠地址镜像,即一个物理存储单元会对应多个不同的地址。在小程序或简单系统中可以使用,但会浪费地址空间。
    • notion image

8.2.3 数据存储器(RAM)扩展

(1) 控制信号与指令

  • 控制信号:扩展外部RAM时,使用 /RD/WR 信号进行读写控制,而不是/PSEN
  • 访问指令:必须使用 MOVX 指令来访问外部数据存储器(RAM)或内存映射的I/O口。

(2) 读/写时序❗

  • 读时序 (MOVX A, @DPTR)
      1. CPU执行MOVX指令的第一个机器周期,用于取指令(过程同ROM取指)。
      1. 第二个机器周期,P2口和P0口输出DPTR中的地址,ALE锁存低8位地址。
      1. /RD信号有效(拉低),选中外部RAM。
      1. RAM将数据送到P0口上,CPU读取数据。
  • 写时序 (MOVX @DPTR, A)
      1. 过程与读时序类似,但在第二个机器周期中:
      1. /WR信号有效(拉低),同时CPU将累加器A中的数据输出到P0口。
      1. 数据被写入到由DPTR指定的外部RAM地址单元中。
注意:P0口在扩展系统中功能复杂,分时作为ROM低位地址ROM数据RAM低位地址RAM数据四种用途。
notion image

(3) 相关芯片与电路

  • 常用RAM芯片:6264 (8k byte), 62256 (32k byte)等。
  • 连接电路:与ROM扩展类似,需要使用74LS373锁存地址,并通过地址译码(如74LS138或部分译码)和/RD/WR信号控制多片RAM。
notion image
80C51的扩展结构“不是真正的哈佛结构”,主要原因是:虽然它的程序空间和数据空间在逻辑上是独立的,但它们在物理上共用了同一组外部总线。

8.2.4 外部I/O口扩展

(1) 目的与访问方式

  • 目的:增加I/O口数量、进行电平匹配、增加驱动能力。
  • 访问方式:外部I/O口被看作外部数据存储器(RAM)进行统一编址,同样使用 MOVX 指令访问。
这也导致了这种扩展方式
  1. 只能对口进行拓展(因为数据总线过P0口)
  1. 需要配合/WR/RD使用(像一块真正的RAM那样)

(2) 输出口扩展

  • 实现方式:可使用锁存器(如74LS37374LS377)。将P0口与锁存器的数据输入端相连,通过地址译码和/WR信号产生锁存信号,将P0口上的数据锁存并输出。
notion image
notion image
在这个基础上,采用一个译码器选中不同的锁存器,就可以实现真正的IO口数目扩展

(3) 输入口扩展

  • 实现方式:可使用三态缓冲器(如74LS244/245)。将外部输入信号连接到缓冲器输入端,其输出端与P0口相连。通过地址译码和/RD信号产生使能信号,将外部信号读入P0口。
notion image

8.3 外部串行扩展原理

📎
80C51单片机内置的、原生的串行通信接口就是一个UARTChapter7有介绍),它主要通过 P3.0 (RXD) 和 P3.1 (TXD) 这两个专用引脚进行全双工的异步串行通信 。
📎
标准的80C51芯片本身并不集成I2C、SPI或1-Wire总线的硬件控制器;但是可以通过软件模拟(写程序)来实现这些功能

8.3.1 I²C总线 (Inter-Integrated Circuit)❗❗

  • I²C(Inter-IC bus)是一种使用两根信号线进行串行信息传送,并允许若干兼容器件共享的双线总线结构。
  • 半双工,可以发送也可以接收,但是不能在同时发送和接收
notion image

(1) 基本结构与特点

  • 物理连接:I²C总线使用两根信号线:
    • SDA (Serial Data):串行数据线,用于传输双向的数据。
    • SCL (Serial Clock):串行时钟线,用于传输时钟信号,以同步串行数据线上的数据。
  • 电气特性:总线上所有器件的SDA和SCL引脚都是开漏结构,因此都需要通过上拉电阻连接到电源(Vcc)。
  • 设备角色:挂接在I²C总线上的器件,根据其功能可分为两种:
    • 主控器 (Master):负责总线控制,产生时钟信号(SCL),并启动和结束数据传送。
    • 从控器 (Slave):在总线上被主控器寻址,并根据主控器的命令来接收或发送数据。

(2) 总线信号与时序

I²C总线通过特定的信号组合来定义通信的起始、数据传输和结束。
  • 总线空闲 (Bus Idle):SDA和SCL两条线都保持高电平。
  • 起始信号 (START):在SCL保持高电平的情况下,SDA上产生一个由高电平到低电平的变化。 这个信号用于启动I²C总线,所有从设备都必须在检测到起始信号后进行后续操作。
I2C的START和STOP时序
I2C的START和STOP时序
  • 停止信号 (STOP):在SCL保持高电平的情况下,SDA上产生一个由低电平到高电平的变化。 这个信号将停止I²C总线上的数据传送。
  • 数据有效 (Data Valid):在起始信号后,当SCL保持高电平的周期期间,SDA线上的数据状态是有效的。

【关于STOP START:】
在传输数据时,当SCL为高电平的时候,SDA不能变化,否则会被误认为是START/STOP信号
所以:
  1. 主机只会在低电平的时候输出数据到SDA
  1. 在SCL高电平的时候,接收方会读取SDA数据,因为SDA电平在这个时间不能变化

一个典型的数据传输流程如下:
  1. 主设备发送一个 START 信号 。
  1. 主设备在SCL线上产生8个时钟脉冲,同时在SDA线上发送一个7位的从设备地址和一个读/写方向位(共8位)。
  1. 被选中的从设备在第9个时钟脉冲时,将SDA拉低,发送一个“应答位(ACK)”,表示已收到地址。
  1. 主设备(或从设备,取决于读写方向)继续在SCL上产生8个时钟脉冲,在SDA上传输一个字节的数据(8位)。
  1. 接收方在第9个时钟脉冲时,再发送一个“应答位”。
  1. 步骤4和5可以重复多次,以传输多个字节的数据。
  1. 数据传输全部完成后,主设备发送一个 STOP 信号,释放总线 。

8.3.2 单总线 (1-Wire)

单总线特性

  • 物理连接:仅用一根数据线DQ完成数据收发供电
  • 工作原理
    • 唯一地址:每个1-Wire器件内部都有一个全球唯一的64位激光烧录ROM编码作为地址。
      • 主机在通信时,可以先发出“搜索ROM”的指令,总线上的所有设备会依次上报自己的ID,主机通过这个过程就能知道总线上有哪些设备以及它们的“地址” 。
    • 寄生供电:1-Wire 设备内部有一个小电容。当 DQ 总线处于空闲(高电平)状态时,设备会利用上拉电阻提供的微弱电流给这个内部电容充电。在总线被拉低进行数据传输时,设备就依靠这个电容里存储的电能维持工作 。这样,设备只需要 DQ 和 GND 两根线就能工作,实现了所谓的“寄生供电”。

单总线操作时序与流程

  • 严格的时序:通信依赖于精确控制的脉冲宽度。主机通过不同宽度的低电平脉冲来表示“0”和“1”,并通过拉低总线后在特定时间窗口内采样来读取数据。
  • 操作流程初始化(复位脉冲和存在脉冲) -> ROM命令(寻址) -> 功能命令(如读写数据)
  • 常用芯片:DS18B20数字温度传感器。

8.3.3 SPI总线 (Serial Peripheral Interface)❗

SPI总线特性

  • 物理连接:通常为四线制:SCLK(时钟)MOSI(主出从入)MISO(主入从出)、CS(片选)
  • 工作原理
    • 全双工同步传输。
    • 主从结构,可支持多主模式。
    • 数据可按MSB或LSB优先顺序传输。

SPI通信时序❗

对于,从低到高的跳变表示传输开始;从高到低的跳变表示传输结束
notion image

阶段一:启动与寻址 (主机发送指令)

  1. 片选 (Initiation)
      • 从机处于空闲状态。
      • 主机首先将 CS 线从低到高跳变。此时,对应的从机被激活,准备接收主机的指令。
  1. 发送指令和地址 (Master Transmits)
      • 主机开始在 SK (时钟) 线上产生同步时钟脉冲。
      • 在每个时钟脉冲的驱动下,主机在 DI (Data In,对主机来说是 MOSI) 线上发送数据。
      • 从时序图的 DI 波形可以看出,主机依次发送了:
        • 一个起始位 1
        • 一个操作码,这里是 10 (根据我们之前复习的内容,这对应 93C46 芯片的 READ 指令)。
        • 紧接着是要读取的存储单元地址 (AnA0)。

阶段二:数据传输 (从机响应)

  1. 数据输出 (Slave Responds)
      • 从机在接收完指令和地址后,开始准备数据。在此之前,它的数据输出线 DO (Data Out,对主机来说是 MISO) 处于高阻态 (High Impedance),相当于断开状态,不会干扰总线。
      • 当从机准备好数据后,它开始响应主机后续的时钟信号。
      • 主机继续在 SK 线上产生时钟脉冲。
      • 在每个时钟脉冲的驱动下,从机将数据(从 DnD0)一位一位地放到 DO 线上,供主机读取。

阶段三:结束通信

  1. 结束传输 (Termination)
      • 当主机接收完所有数据位后(即 D0 之后),它停止产生 SK 时钟信号。
      • 最后,主机将 CS 线由高电平拉回到低电平,释放从机,本次通信正式结束。
      • 图中标注的 tcs (Chip Select High Time) 指的是 CS 信号在两次通信之间必须保持低电平的最小时间,以确保从机能正确识别下一次通信的开始。
 

典型芯片型号 ❗

芯片型号 (Chip Model)
总线类型 (Bus Type)
主要功能 (Main Function)
主要特点 (Key Features)
24C02/04/08/16系列
I²C (二线制)
EEPROM (电可擦除可编程只读存储器)
● 通过I²C两线串行接口通信 ● 型号数字代表容量,如24C02为2Kb ● 用于存储需要掉电不丢失的数据
DS1307
I²C (二线制)
RTC (实时时钟)
● 提供秒、分、时、日、月、年等信息,带闰年补偿 ● 内置由电池供电的RAM ● 常用于需要时间记录的应用
93C46
SPI (三线制)
EEPROM (电可擦除可编程只读存储器)
● 通过三线串行接口通信 ● 内部存储结构可由用户选择(如128x8位或64x16位)
DS18B20
1-Wire (单总线)
数字温度计
● 通过单总线协议与微控制器通信 ● 每个芯片有全球唯一的64位序列号地址 ● 可在一根总线上挂接多个芯片以实现多点测温

总结

特性对比
I2C (Inter-Integrated Circuit)
1-Wire (单总线)
SPI (Serial Peripheral Interface)
信号线数量
2根:SDA (串行数据线), SCL (串行时钟线) 。
1根:DQ (数据线,可同时用于供电) 。
最少4根:SCK (时钟), MOSI (主出从入), MISO (主入从出), /CS (片选) 。每增加一个从机,通常需要额外一根 /CS 线。
通信方式
半双工:SDA 线是双向的,在同一时刻只能发送或接收数据。
半双工:所有通信在同一根 DQ 线上分时进行。
全双工:MOSI 和 MISO 是独立线路,主机在发送数据的同时可以接收数据 。
总线速度
较慢:标准速度为 100kHz,快速模式为 400kHz 。
最慢:通常用于低速设备,通信速率受严格时序限制。
最快:同步时钟频率可以很高(MHz级别),是三者中速度最快的 。
寻址方式
软件寻址:通过在SDA线上发送唯一的7位或10位从机地址来选择设备 。
软件寻址:每个设备有全球唯一的64位ROM ID,通过发送该ID来寻址 。
硬件寻址:通过专门的 /CS 片选线来选择从机,一条/CS线对应一个从机。
总线拓扑
多主机、多从机:允许多个设备作为主机来发起通信 。
单主机、多从机:只能有一个主机 。
单主机、多从机:只能有一个主机 。
应答机制
有:从机在接收到每一个字节后,会发送一个**应答位(ACK)给主机,确认数据已收到。
有 (存在脉冲):在初始化时,从机通过拉低总线产生一个存在脉冲(Presence Pulse)来应答主机 。
无:协议本身没有内置的应答机制,主机无法直接知道从机是否成功接收数据。
核心优点
- 接线非常少,仅需2根线即可挂载多个设备。<br>- 支持多主机。
- 接线最少,仅需1根数据线。<br>- 支持寄生供电**,可进一步简化布线 。
- 速度极快,协议简单。<br>- 全双工通信,效率高。
核心缺点
- 速度相对较慢。<br>- 协议比 SPI 复杂,需要处理起始/停止/应答信号。
- 速度非常慢。<br>- 通信时序要求严格,对软件编程挑战较大。
- 占用I/O口线最多。<br>- 没有内置的应答和流控机制。
典型应用芯片
EEPROM (24C02/04) 实时时钟 (DS1307)
温度传感器 (DS18B20)
EEPROM (93C46) Flash存储器, AD/DA转换器

作业

Loading...