1. SMC 与外部 SRAM 硬件信号引脚对应关系
以示例芯片 IS62WV12816(16bit SRAM)为例引脚映射:
| APM32 SMC 信号 | SRAM 信号 | MCU 端口 | 说明 |
|---|---|---|---|
| A0‑A18 | A0‑A18 | GPIOD / GPIOF / GPIOG | 地址信号 |
| D0‑D15 | D0‑D15 | GPIOD / GPIOE | 数据信号 |
| SMC_NE[1‑4] | CS# | PD7 / PG9 / PG10 / PG12 | 片选 |
| SMC_NOE | OE# | PD4 | 读使能 |
| SMC_NWE | WE# | PD5 | 写使能 |
| SMC_NLB0 | LB# | PE0 | 低字节掩码 |
| SMC_NLB1 | UB# | PE1 | 高字节掩码 |
8bit SRAM 场景,D8‑D15、SMC_NLB1 可以不连接。
资料获取:AN1092_APM32F4xx_SMC_SRAM应用笔记
2. 两大核心固件库结构体完整解析
2.1 SMC_NORSRAMTimingConfig_T 时序结构体
单位:HCLK 时钟周期;APM32F4xx HCLK=168MHz,单周期≈6ns
typedef struct
{
uint8_t addressSetupTime; //地址建立时间,0‑15周期
uint8_t addressHodeTime; //地址保持时间,0‑15周期
uint8_t dataSetupTime; //数据建立时间,0‑15周期
uint8_t busTurnaroundTime; //总线周转,仅复用地址NOR有效
uint8_t clockDivision; //时钟分频,同步存储器使用
uint8_t dataLatency; //数据延迟,仅同步突发NOR有效
SMC_ACCESS_MODE_T accessMode; //访问模式A/B/C/D;SRAM一般选模式A
} SMC_NORSRAMTimingConfig_T;
异步 SRAM 只使用 addressSetupTime、dataSetupTime;其余成员填 0;accessMode 配置 SMC_ACCESS_MODE_A。
2.2 SMC_NORSRAMConfig_T 初始化配置结构体
关键成员说明:
bank:选择存储子块,对应 SMC_NE1~NE4;dataAddressMux:地址数据复用,SRAM 禁用;memoryType:配置 SMC_MEMORY_TYPE_SRAM;memoryDataWidth:8BIT /16BIT,匹配外部 SRAM 硬件位宽;burstAcceesMode:异步 SRAM 关闭突发模式;writeOperation:使能 / 禁止写操作;extendedMode:扩展模式开启,可读写使用两套独立时序;readWriteTimingStruct:读写共用时序指针;writeTimingStruct:写独立时序指针。
3. SMC 模式 A 读写时序原理
文档给出模式 A 的读、写时序图,SRAM 异步访问推荐使用模式 A。
- 写时序流程:片选 NEx 拉低 →地址输出(ADDSET 地址建立周期) →NWE 写使能拉低(DATASET 数据建立周期);完成之后撤销控制信号。
- 读时序流程:片选 NEx 拉低 →地址输出 ADDSET 周期 →NOE 读使能拉低,外部 SRAM 将数据送到数据总线,维持 DATASET 周期。
ADDSET=addressSetupTime;DATASET=dataSetupTime。HCLK=168MHz,每个周期≈6ns。
4. SRAM 器件时序参数换算 SMC 配置参数计算方法
以 IS62WV12816 为例,器件关键参数:
- tWC 写周期≥55ns;tPWE 写使能脉冲宽度≥40ns;tRC 读周期≥55ns;tSA 地址建立 0ns。
SMC 模式 A 计算公式:
- \(t_{WC}=ADDSET+DATASET+1 ≥55ns\)
- \(t_{PWE}=DATASET ≥40ns\)
- \(t_{RC}=ADDSET+DATASET ≥55ns\)
单 HCLK 周期约 6ns;
- ADDSET 设置 0;DATASET 设置 10;
- DATASET=10,对应 10*6ns=60ns,满足 tPWE≥40ns;
- 写总周期 =0+10+1 =11 周期,66ns ≥55ns;读周期 0+10=10 周期 = 60ns≥55ns;全部满足器件规格。
重要:更换不同 SRAM 芯片,必须重新做时序换算,不能直接复用示例参数。时序过小将出现数据读写错乱。
5. 地址映射、内存访问底层工作机制
SMC 将外部 SRAM 硬件直接映射到 MCU 系统内存地址空间。
- 硬件片选 SMC_NE1 对应起始地址
0x60000000; - SMC 外设初始化完成之后,CPU 访问该段地址,AHB 总线触发 SMC 外设输出地址、片选、读写控制时序;
- 用户软件不需要特殊读写函数,直接 C 指针读写内存地址即可访问外部 SRAM。
uint8_t data = *(uint8_t *)0x60000000; //读
*(uint8_t *)0x60000000 = 0x55; //写
可以使用__attribute__((at(0x60000000)))把全局数组定位至外部 SRAM 地址段。
阅读全文
53