嵌入式开发必知:E103xE内外存储器(Flash/SRAM/EEPROM/SDRAM/SD卡)的终极对比
以下是每种存储器模块的详细工作原理说明,涵盖其物理特性、访问方式和典型应用场景: 1. E103xE内部Flash(Nor Flash) 工作原理: - 存储单元:基于浮栅MOSFET,通过F-N隧穿(Fowler-Nordheim)或热电子注入写入电荷。 - 读取: - CPU直接通过地址总线访问(XIP模式),以并行方式读取数据。 - 读取时序类似SRAM,但延迟较高(约几十ns)。 - 写入/擦除: - 必须按扇区/块擦除(通常4KB~128KB),再逐字/页写入。 - 写入需高压(~10V),由E103xE内部电荷泵生成。 - 典型操作: ```c uint32_t addr = (uint32_t)0x08000000; // Flash起始地址 uint32_t data = addr; // 直接读取 FLASH_EraseSector(0); // 擦除扇区 FLASH_ProgramWord(addr, 0x12345678); // 写入数据 ``` 应用场景: - 存储Bootloader、RTOS或应用程序代码(如STM32的Firmware)。 --- 2. E103xE内部SRAM 工作原理: - 存储单元:基于6T结构(6个晶体管组成的双稳态触发器)。 - 访问方式: - CPU通过地址总线直接访问,读写时序由时钟同步(同步SRAM)或异步(异步SRAM)。 - 读写延迟极低(1~3个时钟周期),带宽与CPU总线匹配。 - 特性: - 无需初始化,上电即可使用。 - 掉电数据丢失,无写入次数限制。 - 示例(ARM Cortex-M): ```asm LDR R0, =0x20000000 ; SRAM起始地址 LDR R1, [R0] ; 读取数据 STR R2, [R0, 4] ; 写入数据(偏移4字节) ``` 应用场景: - 堆栈(Stack)、全局变量、动态内存(Heap)。 --- 3. I²C控制的EEPROM(如AT24C02) 工作原理: - 存储单元:基于浮栅晶体管或电荷陷阱技术,支持字节级擦写。 - I²C协议: - 起始条件:SCL高电平时SDA下降沿。 - 设备寻址:7位地址 + 1位读写标志(如0xA0写,0xA1读)。 - 数据帧:每8位数据后跟一个ACK/NACK。 - 写入流程: 1. 发送设备地址(写模式)。 2. 发送目标存储地址(16位)。 3. 发送数据字节(自动递增地址)。 - 读取流程: 1. 先发送写模式地址+目标地址,再发送读模式地址读取数据。 - 时序示例: ``` START → 0xA0 → ACK → 0x00 → ACK → 0x12 → ACK → STOP(写入0x12到地址0x00) ``` 应用场景: - 存储设备序列号、用户配置(如家电的温度设定)。 4. SPI控制的Flash(如W25Q16) 工作原理: - 存储单元:NAND/NOR架构,NAND Flash以页(通常2KB)为单位读写。 - SPI协议: - 全双工,4线(SCK、MOSI、MISO、CS),支持模式0/3。 - 指令驱动:先发命令(如0x03读数据),再发地址和数据。 - 关键操作: - 读取:发送读指令 + 24位地址 + 读数据(连续时钟输出)。 - 写入:需先擦除(0x20扇区擦除),再页编程(0x02)。 - 状态寄存器:检查BUSY位(0x05指令)。 - 示例代码: ```c // 读取SPI Flash SPI_CS_LOW(); SPI_Write(0x03); // 读指令 SPI_Write(0x00); // 地址高字节 SPI_Write(0x00); SPI_Write(0x00); // 地址低字节 data = SPI_Read(); // 读取数据 SPI_CS_HIGH(); ``` 应用场景: - 存储文件系统(如LittleFS)、固件备份(ESP32的OTA分区)。 --- 5. eMMC控制的SDRAM(M12L64164A-5TG2C) 工作原理: - eMMC: - 封装了NAND Flash + 控制器(FTL磨损均衡、坏块管理)。 - 通过eMMC协议(基于MMC总线)访问,支持多数据线(1/4/8bit)。 - 操作单位:扇区(通常512B),类似SD卡但集成度高。 - SDRAM: - 存储单元:电容存储电荷,需定期刷新(~64ms)。 - 访问流程: 1. 激活行(ACTIVE命令 + 行地址)。 2. 读写列(READ/WRITE命令 + 列地址)。 3. 预充电(关闭当前行,准备下一行访问)。 - 时序控制:依赖时钟同步,需满足tRCD(行到列延迟)、tCAS等参数。 应用场景: - eMMC:手机系统镜像、工业设备的大容量存储。 - SDRAM:运行Linux时的动态内存(如STM32MP157的DDR3)。 --- 6. SDIO控制的SD卡 工作原理: - 物理层: - 存储介质为NAND Flash,但通过SDIO接口抽象为块设备。 - 支持SPI模式(兼容SPI主机)或SD模式(4线高速,时钟可达50MHz)。 - 协议层: - 命令帧:48位格式(起始位+命令号+参数+CRC)。 - 数据传输: - 单块读写(CMD17/CMD24)。 - 多块读写(CMD18/CMD25)。 - 初始化流程: 1. 发送CMD0(复位卡)。 2. 发送CMD8(检查电压兼容性)。 3. 发送ACMD41(初始化SDHC/SDXC卡)。 - 示例代码(SD模式): ```c SD_SendCmd(CMD0, 0, 0x95); // 复位卡 SD_SendCmd(CMD8, 0x1AA, 0x87); // 检查VHS SD_SendCmd(ACMD41, 0x40000000, 0x39); // 初始化 ``` 应用场景: - 相机照片存储、嵌入式系统的日志记录。 --- 总结:核心差异 每种存储器的设计都是为了在速度、容量、成本和可靠性之间取得最佳平衡,满足不同层次的系统需求。
|