• 正文
  • 相关推荐
申请入驻 产业图谱

SMC 硬件信号、结构体定义、时序计算与读写底层原理

10/26 17:27
53
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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 初始化配置结构体

关键成员说明:

  1. bank:选择存储子块,对应 SMC_NE1~NE4;
  2. dataAddressMux:地址数据复用,SRAM 禁用;
  3. memoryType:配置 SMC_MEMORY_TYPE_SRAM;
  4. memoryDataWidth:8BIT /16BIT,匹配外部 SRAM 硬件位宽;
  5. burstAcceesMode:异步 SRAM 关闭突发模式;
  6. writeOperation:使能 / 禁止写操作;
  7. extendedMode:扩展模式开启,可读写使用两套独立时序;
  8. readWriteTimingStruct:读写共用时序指针;
  9. writeTimingStruct:写独立时序指针。

3. SMC 模式 A 读写时序原理

文档给出模式 A 的读、写时序图,SRAM 异步访问推荐使用模式 A。

  1. 写时序流程:片选 NEx 拉低 →地址输出(ADDSET 地址建立周期) →NWE 写使能拉低(DATASET 数据建立周期);完成之后撤销控制信号。
  2. 读时序流程:片选 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 计算公式:

  1. \(t_{WC}=ADDSET+DATASET+1 ≥55ns\)
  2. \(t_{PWE}=DATASET ≥40ns\)
  3. \(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 系统内存地址空间。

  1. 硬件片选 SMC_NE1 对应起始地址0x60000000;
  2. SMC 外设初始化完成之后,CPU 访问该段地址,AHB 总线触发 SMC 外设输出地址、片选、读写控制时序;
  3. 用户软件不需要特殊读写函数,直接 C 指针读写内存地址即可访问外部 SRAM。
uint8_t data = *(uint8_t *)0x60000000;    //读
*(uint8_t *)0x60000000 = 0x55;           //写

可以使用__attribute__((at(0x60000000)))把全局数组定位至外部 SRAM 地址段。

相关推荐