#申请原创# #技术资源# @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. 配置“翻译官”的节奏(时序): 这是最麻烦的一步!单片机内部有个“心跳”(HCLK,168MHz,跳一下约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,大大增加系统的可用内存资源。
|