0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AT32讲堂021 | 如何使用AT32 MCU的SPIM作为外部存储器的扩展功能

雅特力 AT32 MCU 2022-08-16 09:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

SPIM(External SPI FLASH memory interface)最大地址段为0x08400000-0x093FFFFF(16MB),是AT32 MCU独有的一种Flash访问方式。用户可以使用自己的Flash作为AT32 MCU的外挂Flash。该方式有别于片上Bank1/Bank2,用户可根据具体需求选择是否开启。开启SPIM后可以作为Flash扩展实现如下功能:

  • 在SPIM地址存放用户执行程序,类似于Bank1/Bank2一样执行程序。
  • 用户程序直接访问SPIM地址,作为存储字体库,图片等存储器使用。

SPIM配置

SPIM仅允许按字(32bit)或者半字(16bit)操作,在执行读、编程、擦除SPIM前,必须首先执行初始化及解锁操作。
SPIM在AT32不同系列产品及不同封装上,可能使用的pin有所不同,具体请参考对应型号产品的RM和DS,下面以AT32F403A系列为例,描述操作步骤

初始化及解锁操作

初始化及解锁的步骤,在AT32的BSP中已经封装成库函数,用户可以直接调用1) 使能GPIOA、GPIOB和IOMUXCRM时钟。2) 配置对应pin PA8、PA11、PA12、PB1、PB6、PB7为推挽复用输出模式。3) IOMUX_REMAP2寄存器中使能SPIM接口。4) 设置FLASH_SELECT寄存器选择配置SPIM Flash的类型。5) 使用KEY解锁SPIM:写FLASH_UNLOCK3寄存器2次,按顺序分别写0x45670123和0xCDEF89AB。6) 检查SPIM是否解锁成功,读取FLASH_CTRL3寄存器的OPLK位,如果被清除为0,则可以开始操作SPIM。

Flash型号选择

SPIM可以配置支持不同型号的spi Flash,支持的指令集如下表,更详细描述可以看参考手册FlASH章节。表1. SPIM支持的指令集9220bdb8-1ad2-11ed-9ade-dac502259ad0.png

读操作

直接按字(32bit)或者半字(16bit)访问需要读取数据的地址段:0x08400000–0x093FFFFF

编程操作

编程操作步骤,在AT32的BSP中已经封装成库函数,用户可以直接调用1) 打开编程操作,FLASH_CTRL3寄存器FPRGM位置12) 直接按字(32bit)或者半字(16bit)在需要编程的地址写入数据3) 检查是否写入完成读取FLASH_STS3寄存器的OBF位是否清除,如果清除表示写入完成4) 关闭编程操作,FLASH_CTRL3寄存器FPRGM位置05) 检查是否写入成功,读取FLASH_STS3寄存器的PRGMERR和EPPERR位,如果都为0则表示写入成功

擦除操作

SPIM擦除分为Mass Erase和Sector Erase,每个sector固定为4KB,在AT32的BSP中已经封装成库函数,用户可以直接调用Mass Erase1) 使能擦除,FLASH_CTRL3寄存器CHPERS位置12) 开始擦除,FLASH_CTRL3寄存器ERSTR位置13) 关闭擦除,FLASH_CTRL3寄存器CHPERS位置0Sector Erase1) 使能擦除,FLASH_CTRL3寄存器SECERS位置12) 选择擦除扇区地址,FLASH_ADDR3寄存器写入需要擦除扇区的地址3) 开始擦除,FLASH_CTRL3寄存器ERSTR位置14) 关闭擦除,FLASH_CTRL3寄存器SECERS位置0

加密操作

因为SPIM电路裸露在MCU芯片外部,为防止存储在SPIM Flash里边的数据被外界直接读取,SPIM提供了加密功能,将原始数据通过特有算法进行加密操作后再写入Flash,AT32 MCU读取SPIM数据时会先进行解密得到原始数据,然后才使用,保证数据安全。加密算法所用的SPIM scrambled KEY为用户系统数据区的地址0x1FFFF820-0x1FFFF82F范围内数据。

  • 当SPIM scrambled KEY值全为0xFFFFFFFF时,加密功能关闭。
  • 当SPIM scrambled KEY值不全为0xFFFFFFFF时,加密功能开启。AT32 MCU根据FLASH_DA寄存器值作为加密范围分界,小于0x08400000+FLASH_DA地址段的数据为密文,其余范围数据仍然采用明文存储。

注意:数据写入时的加密状态必须和读取时的加密状态保持一致,否则可能导致读取的数据是乱码而无法正确使用或者运行。即写入时如果配置了SPIM scrambled KEY及FLASH_DA,那么在读取时也必须配置相同的SPIM scrambled KEY及FLASH_DA。

图1. SPIM scrambled KEY存放地址923c107c-1ad2-11ed-9ade-dac502259ad0.png图2. SPIM地址范围924c8ec0-1ad2-11ed-9ade-dac502259ad0.png

硬件电路

因为SPIM连接在外部电路,受环境影响较大,为保证电路稳定,需尽量减少PCB布线长度。

注意:SPIM运行频率为MCU的AHB时钟频率的1/2,所以当开启SPIM时,MCU对应的运行AHB频率有最大限制值,不同型号MCU在SPIM开启时运行的最大频率值请用户参考DS的通用工作条件章节描述。

图3. 参考电路

92644f56-1ad2-11ed-9ade-dac502259ad0.png

I/O复用

要使用SPIM,需要注意跟其他外设IP的IO复用问题。

当SPIM使用的IO还有对应的其他外设使能的话,有些IO即使其他外设应用中没有用到,但也可能会占用。

例如:XMC和SPIM同时使用时,在F403A上PB7用作SPIM的IO2,但是如果配置使能了XMC,即使XMC_NADV功能没有使用,则PB7也会被XMC_NADV默认开启占用,导致SPIM工作异常。此时需手动配置IOMUX_REMAP2寄存器关闭XMC_NADV功能,调用库函数即可,如下gpio_pin_remap_config (XMC_NADV_MUX, TRUE)

图4. XMC和SPIM共用引脚9284f724-1ad2-11ed-9ade-dac502259ad0.png

图5. 单独关闭XMC_NADV功能

92a039bc-1ad2-11ed-9ade-dac502259ad0.png

demo示例

AT32的BSP中,有两个例程operate_spim和run_in_spim演示了如何使用SPIM。

用户程序访问SPIM存储区

如果通过用户程序去执行读、编程及擦除操作,只需要按照正常配置初始化及解锁后就可以实现。BSP中examples\flash\operate_spim执行了SPIM的初始化、擦除、编程和读取流程,并通过LED显示执行结果。

下载用户程序到SPIM或者用户程序在SPIM执行

如果用户程序通过keil下载到SPIM中,或者想程序直接在SPIM执行,需要执行一些额外的操作。附件工程run_in_spim通过LED的闪烁,简单的演示了代码如何在SPIM上运行。1) Options-Debug-Settings-Flash Download中选择添加外挂flash类型。图6. 配置SPIM Flash类型92b2d86a-1ad2-11ed-9ade-dac502259ad0.png2) Options-Target中添加SPIM起始地址和容量大小,但不勾选。Demo中将SPIM定义在IROM2位置,用于存储C文件注意:如果勾选则KEIL在编译时可能会将其余不需要运行在SPIM的函数编译到SPIM地址段。图7. 配置SPIM起始地址和容量92ca062a-1ad2-11ed-9ade-dac502259ad0.png3) Project中选择需要运行在SPIM对应位置的C文件,鼠标右键选Options进入将Memory Assignment的code地址改为对应地址段。注意:如果工程中函数还有更多指定地址分段编译的需求,可以继续添加到对应 ROM1/2/3 等,也可以手动修改sct文件图8. 配置需运行在SPIM第一部分代码92f9b992-1ad2-11ed-9ade-dac502259ad0.png4) 编译时勾选自动生成sct文件的选项,编译完成后浏览sct文件可以发现需要运行在SPIM区域的函数已被正确编译到该区域。图9 勾选自动生成sct文件931aece8-1ad2-11ed-9ade-dac502259ad0.png

图10 自动生成的sct文件

9330739c-1ad2-11ed-9ade-dac502259ad0.png

注意:整个代码的启动必须从bank1开始,须保证SPIM flash的初始化代码在程序执行到SPIM前运行。

关于雅特力雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(MCU)创新趋势的芯片设计公司,专注于ARM Cortex-M4/M0+的32位微控制器研发与创新,全系列采用55nm先进工艺及ARM Cortex-M4高效能或M0+低功耗内核,缔造M4业界最高主频288MHz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、ADAS、T-BOX、数字电源、电动工具等终端设备应用,广泛地覆盖5G物联网、消费、商务及工控等领域。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18610

    浏览量

    387105
  • 存储器
    +关注

    关注

    39

    文章

    7714

    浏览量

    170854
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    雅特力AT32 MCU推动低空经济发展

    雅特力AT32系列MCU凭借288MHz主频与高精度外设,为无人机飞控、电调及云台提供核心算力支持,实现厘米级定位与高效动力控制,显著提升在电力巡检、农林植保等低空经济场景下的作业精度与可靠性,助力产业智能化升级。
    的头像 发表于 12-04 09:53 846次阅读
    雅特力<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>推动低空经济发展

    AT32 MCU如何使用IAP

    AT32 MCU使用IAP的方法涉及在微控制上创建特定固件,以实现在应用编程(In-Application Programming,简称IAP)功能,主要通过USART通信接口进行固
    发表于 08-08 17:13

    AT32 IAP using the USART

    对于AT32 MCU,除了出厂固化的bootloader,用户也可以在应用程序中编写自己的bootloader程序,用于最终产品的固件更新。此功能称为应用程序内编程(IAP)。 本应用笔记的目的
    发表于 07-11 10:51

    AT32的ERTC与RTC的区别

    低速外部晶振(LSE)、低速内部振荡(LSI)或高速外部晶振(HSE)作为时钟源,使得ERTC能够适应更多应用场景 。 功耗模式支持 RTC :在低功耗模式下,仍能保持基本计时
    发表于 07-11 10:48

    雅特力AT32L021系列低功耗ARM®Cortex®-M0+微控制

    选择,满足不同应用需求。随机存取存储器(SRAM):最高支持 8KB(基础)+1KB(额外,支持奇偶校验),确保数据稳定性和安全性。系统存储器(4KB):既可作为启动加载程序(Bootloader
    发表于 06-05 08:58

    MCU存储器层次结构解析

           MCU存储器层次结构通过整合不同性能与功能存储单元,优化系统效率并满足多样化场景需求。其核心架构可分为以下层次: 一、寄存
    的头像 发表于 05-09 10:21 560次阅读

    STM32N6使用SDMMC1-eMMC作为外部存储器,地址如何配置?

    STM32N6 使用SDMMC1-eMMC作为外部存储器(保存FSBL和app),因为eMMC不支持内存映射,那么使用STM32CubeProgrammer下载bin文件时地址选择哪里?还有
    发表于 04-28 08:02

    STM32N6使用SDMMC1-eMMC作为外部存储器,地址如何配置?

    STM32N6 使用SDMMC1-eMMC作为外部存储器(保存FSBL和app),因为eMMC不支持内存映射,那么使用STM32CubeProgrammer下载bin文件时地址选择哪里?还有
    发表于 04-22 11:31

    揭秘非易失性存储器:从原理到应用的深入探索

      非易失性存储器是一种应用于计算机及智能手机等设备中的存储装置(存储器),其特点是在没有外部电源的情况下仍能保存数据信息。本文将介绍非易失性存储器
    的头像 发表于 02-13 12:42 2215次阅读
    揭秘非易失性<b class='flag-5'>存储器</b>:从原理到应用的深入探索

    存储器的分类及其区别

    初学者要了解SDRAM需要先了解存储器分类。按照存储器存储功能划分,可将其分为RAM 和 ROM 两大类。
    的头像 发表于 02-08 11:24 3760次阅读
    <b class='flag-5'>存储器</b>的分类及其区别

    闪速存储器属于RAM还是ROM,闪速存储器有哪些功能和作用

    本文旨在深入探讨闪速存储器的归属问题,即它是否属于RAM或ROM,同时详细阐述闪速存储器功能与作用。
    的头像 发表于 01-29 15:21 1477次阅读

    EE-220:将外部存储器与第三代SHARC处理和并行端口配合使用

    电子发烧友网站提供《EE-220:将外部存储器与第三代SHARC处理和并行端口配合使用.pdf》资料免费下载
    发表于 01-06 16:12 0次下载
    EE-220:将<b class='flag-5'>外部</b><b class='flag-5'>存储器</b>与第三代SHARC处理<b class='flag-5'>器</b>和并行端口配合使用

    TMS320C6000 DSP外部存储器接口(EMIF)参考指南

    电子发烧友网站提供《TMS320C6000 DSP外部存储器接口(EMIF)参考指南.pdf》资料免费下载
    发表于 12-24 16:17 1次下载
    TMS320C6000 DSP<b class='flag-5'>外部</b><b class='flag-5'>存储器</b>接口(EMIF)参考指南

    TMS320VC5503/5507/5509 DSP外部存储器接口(EMIF)参考指南

    电子发烧友网站提供《TMS320VC5503/5507/5509 DSP外部存储器接口(EMIF)参考指南.pdf》资料免费下载
    发表于 12-21 09:42 1次下载
    TMS320VC5503/5507/5509 DSP<b class='flag-5'>外部</b><b class='flag-5'>存储器</b>接口(EMIF)参考指南

    TMS320C672x DSP外部存储器接口(EMIF)用户指南

    电子发烧友网站提供《TMS320C672x DSP外部存储器接口(EMIF)用户指南.pdf》资料免费下载
    发表于 12-21 09:38 0次下载
    TMS320C672x DSP<b class='flag-5'>外部</b><b class='flag-5'>存储器</b>接口(EMIF)用户指南