地址总线定“找谁”,数据总线定“搬多少”

短文标题:地址总线定"找谁",数据总线定"搬多少"

你有没有想过一个问题:32位单片机的"32位"到底指什么?为什么它能访问4GB地址空间?"32位"指数据总线的宽度,但地址总线的宽度也影响寻址能力。这两个"宽度",决定了CPU的"视野"和"效率"。地址总线:能找多少个"门牌号"地址总线用于CPU输出要访问的地址。

• 32根地址线 → 每根线0或1 → 2^32 = 4,294,967,296种组合

• 每个组合对应一个字节地址 → 4GB寻址空间

16根地址线 → 2^16 = 64KB寻址空间。地址线越多,CPU能"看到"的内存越大。

STM32F103的地址总线是32位,但实际Flash 512KB、RAM 64KB,只用了地址空间的一小部分。地址映射:部分地址范围分配给外设寄存器(0x40000000开始),不是所有地址都对应物理内存。数据总线:一次能搬多少数据数据总线用于CPU和存储器之间传输数据。

• 8根数据线 → 一次传1字节

• 16根 → 一次传2字节

• 32根 → 一次传4字节

ARM32是32位CPU,数据总线32根。一次能搬4字节,效率是8位单片机的4倍。

取指令 vs 取数据,程序运行时,CPU交替做两件事:

  1. 取指令:从Flash读取机器码,通过数据总线传回CPU

  2. 存取数据:从RAM读写变量,通过同一条数据总线

指令和数据走同一条路(冯·诺依曼架构),分时复用。哈佛架构(如51单片机)指令和数据总线分开,可同时取指和取数,但引脚更多、封装更大。Cortex-M是改进型冯·诺依曼,内部有指令缓存和数据缓存优化。地址对齐与效率,ARM32一次读4字节,但要求地址是4的倍数(对齐访问)。地址0x20000001(不是4的倍数)→ CPU分两次读:

  1. 读0x20000000的4字节 → 取后3字节

  2. 读0x20000004的4字节 → 取前1字节

  3. 拼出需要的4字节

效率降低一半。 编译器默认对齐,但手动操作地址时需注意。地址译码:谁响应这个地址?CPU把地址放到地址总线上后,硬件译码电路判断:

• 地址在0x20000000~0x2000FFFF → SRAM响应该访问

• 地址在0x40000000~0x4000FFFF → 外设寄存器响应该访问

• 地址在0x08000000~0x0807FFFF → Flash响应该访问

地址决定目标,目标决定行为。这个故事的启示,地址总线定"找谁",数据总线定"搬多少"。32位地址总线 + 32位数据总线 = 大视野 + 高吞吐。理解总线,就理解了程序运行的根本机理。写在最后,CPU是"搬运工":从Flash搬指令,从RAM搬数据。地址总线和数据总线,是搬家的两条路。一条告诉你去哪搬,一条把东西搬回来。

(本文灵感源于于振南《新概念ARM32单片机》教程第1.7节"程序运行的机理与总线技术"。)

觉得有用?点赞、转发,让更多人看懂"地址总线"和"数据总线"的分工智慧。

相关推荐
朝发如雪7 小时前
快速掌握单片机基础(3)(PWM)(通信协议基础)(串口通信时序与参数)(电气特性与电平标准)(51单片机UART寄存器配置)(串口应用层协议)
单片机
天空'之城9 小时前
单片机基础核心知识点汇总(四十)
单片机·嵌入式硬件
smartpi_ai10 小时前
离线语音模块误识别问题全面解决方案:命令词设计、防误触与灵敏度调优指南
人工智能·单片机·语音识别
LCG元10 小时前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件
染予10 小时前
代码中相关C语言知识点总结
stm32
优信电子10 小时前
STM32 驱动 DHT30 测量环境温湿度(兼容SHT30):从时序解析到完整代码实战
stm32·嵌入式·传感器·sht30·温湿度·环境测量·dht30
小李不想当小白12 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
朝发如雪12 小时前
快速掌握单片机基础(6)(数据处理与传送指令)(跳转与分支指令)(栈操作与混合编程)(程序状态寄存器操作指令)(内存映射)
单片机·arm
blue_ice .12 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^1382879887213 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居