打印
[应用相关]

AN0042—AT32扩展FLASH SPIM应用指南

[复制链接]
3466|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 ArterySW 于 2022-5-10 19:42 编辑

AT32扩展FLASH SPIM应用指南

前言
这篇应用笔记描述了怎么使用AT32 MCU的SPIM作为外部存储器的扩展功能。

支持型号
AT32F403xx
AT32F413xx
AT32F403Axx
AT32F407xx


目录
概述 ................................................................ 5
SPIM 配置 ........................................................ 6
初始化及解锁操作 ............................................. 6
读操作 ............................................................. 6
写操作 ............................................................. 6
擦除操作 .......................................................... 6
加密操作 .......................................................... 7
硬件电路 .......................................................... 8
IO 复用 ............................................................ 9
demo 示例 ...................................................... 10
用户程序访问SPIM 存储区 ............................... 10
下载用户程序到SPIM 或者用户程序在SPIM 执行  10
版本历史 ......................................................... 13

概述
SPIM (External SPI FLASH memory interface)最大地址段为0x08400000 - 0x093FFFFF(16MB),是
AT32 MCU独有的一种Flash访问方式。用户可以使用自己的Flash作为AT32 MCU的外挂Flash。该
方式有别于片上Bank1/Bank2,用户可根据具体需求选择是否开启。开启SPIM后可以作为Flash扩展
实现如下功能:
1.在SPIM地址存放用户执行程序,类似于Bank1/Bank2一样执行程序。
2.用户程序直接访问SPIM地址,作为存储字体库,图片等存储器使用。



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

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

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

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

擦除操作
SPIM擦除分为Mass Erase和Page Erase,每个Page固定为4KB,在AT32的BSP中已经封装成库函
数,用户可以直接调用
Mass Erase
1) 使能擦除,FLASH_CTRL3寄存器CHPERS位置1
2) 开始擦除,FLASH_CTRL3寄存器RSTR位置1
3) 关闭擦除,FLASH_CTRL3寄存器CHPERS位置0
Page Erase
1) 使能擦除,FLASH_CTRL3寄存器PGERS位置1
2) 选择擦除页地址,FLASH_ADDR3寄存器写入需要擦除页的地址
3) 开始擦除,FLASH_CTRL3寄存器RSTR位置1
4) 关闭擦除,FLASH_CTRL3寄存器PGERS位置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 存放地址



图2. SPIM 地址范围



硬件电路
因为SPIM连接在外部电路,受环境影响较大,为保证电路稳定,需尽量减少PCB布线长度。
注意:SPIM运行频率为MCU的AHB时钟频率的1/2,所以当开启SPIM时,MCU对应的运行AHB频
率有最大限制值,不同型号MCU在SPIM开启时运行的最大频率值请用户参考DS的通用工作条件章
节描述。

图3. 参考电路


IO 复用
要使用SPIM,需要注意跟其他外设IP的IO复用问题。
当SPIM使用的IO还有对应的其他外设使能的话,有些IO即使其他外设应用中没有用到,但也可能会
占用。
例如:XMC和SPIM同时使用时,在F403上PB7用作SPIM的数据pin,但是如果配置使能了XMC,即
使XMC_NADV功能没有使用,则PB7也会被XMC_NADV默认开启占用,导致SPIM工作异常。此时
需手动配置AFIO_MAP2寄存器关闭XMC_NADV功能,调用库函数即可,如下
GPIO_PinsRemapConfig(GPIO_Remap_XMC_NADV,ENABLE)
图4. XMC 和SPIM 共用引脚
图5. 单独关闭XMC_NADV 功能
demo 示例
AT32的BSP中,有两个例程operate_SPIM和run_in_SPIM演示了如何使用SPIM。详细描述见附件及AT32的BSP源代码
AN0042_AT32_SPIM_Application_Note_ZH_V2.0.0.pdf (667.93 KB)




使用特权

评论回复
沙发
muyichuan2012| | 2020-7-12 20:09 | 只看该作者
强,SPIM既可以作为内部flash的扩展用作程序运行,又可以作为QSPI常规flash扩展,丰富了用户的使用场景。

使用特权

评论回复
板凳
zeshoufx| | 2020-7-13 08:45 | 只看该作者
谢谢分享【扩展FLASH】应用指南

使用特权

评论回复
地板
小涛DZGZS| | 2020-7-13 15:36 | 只看该作者
如果用外部SPIM Flash挂载程序的话运行速度能有多少 无法实现零等待吧

使用特权

评论回复
5
084425| | 2020-7-13 20:45 | 只看该作者
小涛DZGZS 发表于 2020-7-13 15:36
如果用外部SPIM Flash挂载程序的话运行速度能有多少 无法实现零等待吧


各个型号速度稍有差异,主要是看外部电路布线和使用环境,速度是系统时钟的1/2,此时系统时钟一般运行在100多MHz.效能跟非零等待区一致

使用特权

评论回复
6
amoxoo| | 2021-4-13 15:31 | 只看该作者
非常好奇如果在SPIM接口上挂QPI/SPI接口的PSRAM的话,能不能实现RAM的MemoryMapping扩展.
类似的器件有:
1. Vilsion 的VTI7064MSME https://item.szlcsc.com/151292.html
2. 台湾来扬LY68L6400SLIT https://item.szlcsc.com/253393.html
只要1刀不到,就能拥有8M字节的RAM, 前景非常诱人, 我们实验下来, 直接通过SPI接口是能实现很高速的读写的, 但没有测试过挂在SPIM接口上, 因此也没机会实验一下到底能不能实现MemoryMapping.

使用特权

评论回复
7
单片小菜| | 2021-4-13 22:18 | 只看该作者
这个资料确实不错,感谢楼主的分享,谢谢。

使用特权

评论回复
8
imdx| | 2021-4-16 09:16 | 只看该作者
AT32这个SPIM确实很有特色,如果能兼容PSRAM就更好了。

使用特权

评论回复
9
rzj21| | 2021-4-19 10:21 | 只看该作者
请问AT32的BSP源代码在哪里下载?

使用特权

评论回复
10
wzszzxj| | 2022-7-5 11:07 | 只看该作者
rzj21 发表于 2021-4-19 10:21
请问AT32的BSP源代码在哪里下载?

同问

使用特权

评论回复
11
muyichuan2012| | 2022-7-5 11:40 | 只看该作者
请问AT32的BSP源代码在哪里下载?
雅特力官网即可下载。

使用特权

评论回复
12
gregrgr| | 2022-7-7 08:55 | 只看该作者
SPIM FLASH 烧录程序例程只有25Q128,项目只要25Q16,怎么搞?

使用特权

评论回复
13
muyichuan2012| | 2022-7-7 09:03 | 只看该作者
25Q16应该也是可以的,RM有写

使用特权

评论回复
14
gregrgr| | 2022-7-7 12:29 | 只看该作者
这个要做变更吗

使用特权

评论回复
15
雅全电子| | 2022-7-19 15:48 | 只看该作者
酷!写得蛮清晰的,希望楼主后期可以出更多指南

使用特权

评论回复
16
fattyhuang| | 2022-7-30 21:33 | 只看该作者
这个SPIM模块对比at32f435的qspi的xip模式,速度上比如何呢?看了demo的视频,发现lvgl运行起来还可以,但是我使用435,qspi运行lvgl,速度非常非常慢,qspi的xip模式比这个spim慢吗?

使用特权

评论回复
17
zhcaeg| | 2022-8-21 14:18 | 只看该作者
IAR软件怎么配置呢

使用特权

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

本版积分规则

179

主题

275

帖子

11

粉丝