打印
[APM32F4]

大白话讲解APM32F4xx 的 SMC 外挂 SRAM保姆级教程

[复制链接]
124|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创# #技术资源# @21小跑堂
大白话讲解APM32F4xx SMC 外挂 SRAM保姆级教程
想象一下你的单片机(APM32F4xx)需要更多“临时记事本”(RAM)空间来存放大数据,但自带的“小本子”不够用了。于是你外接了一个“大号记事本”(SRAM 芯片 IS62WV12816)。但是,单片机不能直接和这个“大本子”说话,需要一个“翻译官”和“交通指挥”——这就是 SMC(静态存储控制器)。
难题的核心在于“沟通的节奏”(时序):
1.  “翻译官” SMC 很忙: 它有 4 个“大办公室”(存储块),你的 SRAM 只能占用其中一个(比如 1 号办公室)。办公室里还有 4 个“小工位”(64MB 区域),你用哪根“呼叫线”(`NE1`, `NE2`...)决定了 SRAM 坐在哪个工位上,也决定了它的“门牌号”(映射地址,如 `0x60000000`)。
2.  “大本子” SRAM 有严格规矩: 当你想:
       写数据: 单片机(SMC)必须先告诉 SRAM “我要写东西了!”(拉低 `WE` 信号),然后稳定地举着“地址牌”(地址信号)至少 `tSA` 时间,再稳定地举着“数据牌”(数据信号)至少 `tPWE` 时间(40ns),最后才能放下“我要写”的牌子(拉高 `WE`)。整个过程(`tWC`)不能少于 55ns
       读数据: 单片机(SMC)必须先告诉 SRAM “我要读东西了!”(拉低 `OE` 信号),然后稳定地举着“地址牌”至少 `tAA` 时间(0ns,但它需要反应时间),SRAM 才会把数据准备好。整个过程(`tRC`)不能少于 55ns
3.  配置“翻译官”的节奏(时序): 这是最麻烦的一步!单片机内部有个“心跳”(HCLK168MHz,跳一下约6ns)。你需要告诉 SMC
       “地址牌”举多久后才给数据/举数据? (`addressSetupTime` / `dataSetupTime`)。例子中,地址牌几乎不用提前举(设为 0),数据牌需要举 10 个“心跳”(10  6ns = 60ns),这满足了写数据需要举牌至少 40ns 的要求,同时也保证了整个读写动作(60ns + 一点点)都超过了 55ns 的最低要求。
       对于 SRAM 这种简单设备,其他花哨的“沟通方式”(如突发模式、地址数据线复用、扩展模式、等待信号)一般都用不上,统统关掉(`DISABLE`)。
4.  硬件接线(搭桥): 必须严格按照单片机和 SRAM 芯片的说明书,把所有的“地址线”、“数据线”、“控制线”(`WE`-写使能, `OE`-读使能, `CE`-片选/呼叫线)一一对应接好。接错一根线,“翻译官”就懵了。
5.  软件干活(发指令):
       第一步:告诉单片机哪些引脚是给“翻译官” SMC 用的,并设置好这些引脚的模式(GPIO配置)。
       第二步:给“翻译官” SMC 详细的工作手册(配置结构体):
           用哪个“办公室”和“工位”(`bank = SMC_BANK1_NORSRAM_1`)。
           沟通对象是 SRAM`memoryType = SRAM`)。
           “数据牌”一次举 16 位(`memoryDataWidth = 16BIT`)。
           用前面算好的“举牌时间”(`addressSetupTime=0`, `dataSetupTime=10`)。
           用最基础的沟通模式(`accessMode = MODE_A`)。
           关掉所有高级功能(突发、复用、扩展模式等都 `DISABLE`)。
       第三步:启动“翻译官”(调用 `SMC_ConfigNORSRAM` 函数)。
6.  像用自家内存一样方便: 配置完成后,单片机只要往 `0x60000000` 这个“门牌号”开始的地方读写数据,SMC“翻译官”就会自动按照设定好的严格“节奏”,精准地控制所有信号线(地址、数据、`WE`/`OE`/`CE`),可靠地与外部 SRAM“大本子”进行数据交换。你只需要 `(uint16_t)0x60000000 = myData;` 或者 `myData = (uint16_t)0x60000000;` 就行了!
总结难点关键点:
   地址映射: 理解 SRAM 物理空间如何通过 `NE` 片选线映射到单片机特定的内存地址(如 `0x6xxxxxxx`)。
   引脚连接: 必须准确无误地连接大量地址线、数据线、控制线。
   时序计算与配置: 这是最大的技术难点! 需要:
    1.  仔细阅读 SRAM 芯片手册的关键时序参数(`tWC`, `tPWE`, `tRC` 等)。
    2.  理解 SMC 相关时序寄存器(通过 `SMC_NORSRAMTimingConfig_T` 配置)的含义(建立时间、保持时间等)。
    3.  根据 SMC 的工作时钟(HCLK 周期)和 SRAM 要求的时间(纳秒),计算出寄存器需要填写的数值(多少个 HCLK 周期)。
    4.  在配置结构体中正确设置这些计算值和工作模式。
   初始化流程: 严格按照步骤配置 GPIO SMC 外设。
只要搞定了时序计算和配置(第3点),并确保硬件连接正确,APM32F4xx SMC 就能非常高效可靠地扩展外部 SRAM,大大增加系统的可用内存资源。



使用特权

评论回复
沙发
天鹅绒星星| | 2025-6-25 19:59 | 只看该作者
片选位决定了外扩SRAM的地址空间。
我当年就是这里卡了一段时间。

使用特权

评论回复
板凳
Reli-eng-z|  楼主 | 2025-6-25 20:19 | 只看该作者
天鹅绒星星 发表于 2025-6-25 19:59
片选位决定了外扩SRAM的地址空间。
我当年就是这里卡了一段时间。

谢谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

134

帖子

1

粉丝