stm32f4 如何往外部存储sram写数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32f4 如何往外部存储sram写数据相关的知识,希望对你有一定的参考价值。

参考技术A STM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在STM32芯片的外部扩展存储器了。STM32F4系列芯片可以扩展外部SRAM用作内存。
__TM32芯片扩展内存与给PC扩展内存的原理是一样的,只是PC上一般以内存条的形式扩展,而且内存条实质是由多个内存颗粒(即SDRAM芯片)组成的通用标准模块,而STM32扩展时,直接与SRAM芯片连接。
_蔡婊娲⑵? SRAM的存储单元以锁存器来存储数据。这种电路结构不需要定时刷新充电,就能保持状态(当然,如果断电了,数据还是会丢失的),所以这种存储器被称为“静态(Static)”RAM。
_栽谑导视τ贸『现校_RAM 一般只用于 CPU 内部的高速缓存(Cache),而外部扩展的内存一般使用 DRAM。

AVR 组件外部 SRAM 使用

【中文标题】AVR 组件外部 SRAM 使用【英文标题】:AVR assembly external SRAM usage 【发布时间】:2016-05-21 16:13:48 【问题描述】:

在 Atmega 128 上如何启用外部 SRAM,以及如何将文本复制到外部 SRAM 中?例如,我有一些数据 SomeData: .db 0x01,0x02,0x03, ..... , 0x.25 in .dseg,如何将这段文本复制到地址 2100h 开始的外部 SRAM 中?

提前致谢。

【问题讨论】:

你确定你有一台 AtMega128 吗?因为我很确定它没有外部 RAM 接口(但我没有数据表 - 只是快速查看了 atmega1284(继任者)DS) 您可以在软件中执行此操作——找到您要连接的 SRAM 的数据表,它应该包含用于读取/写入芯片的协议的描述。然后在atmega上实现它。这既不容易也不高效,但却是可行的。 【参考方案1】:

首先你阅读manual

第 19 页上有一张图显示了外部存储器如何映射到内存空间。

外部存储器接口的描述从第 25 页开始。

内存的行为就像内部内存一样。

以下汇编代码展示了如何从内部 SRAM 读取字节并将它们复制到外部 SRAM 存储器。

.cseg
copy:
      ldi r17, 4 ; counter for how many bytes to copy
      ldi YL, low(data) ; load pointer to data into Y pointer
      ldi YH, high(data)
      ldi ZL, low(0x2100) ; load pointer to external memory into Z
      ldi ZH, high(0x2100)
copy_loop:
      ld r16, Y+ ; r16 <- [Y], Y++
      st Z+, r16 ; [Z] <- r16, Z++

      dec r17
      brne copy_loop
      <other code>

data: .byte 4

还可以查看用于访问的 stldstslds 指令记忆。

AVR 的指针 X、Y 和 Z 均为 16 位宽。

小心!

你写了类似的东西:

 .dseg
 data: .db 0x1, 0x2

这不起作用。您不能使用 .db 将数据写入内部 SRAM,因为它是易失性的,必须使用程序代码进行初始化!

你可以写

.cseg
<CODE>
data_const: .db 0x1,0x2,0x3,0x4

.dseg
data: .byte 4

这将在 FLASH 中创建一个 4 字节的初始化数据数组,并在内部 SRAM 中保留 4 字节的空间。您现在可以将 data_const 中的数据复制到代码中的数据中。

顺便说一句:C 代码中预初始化的变量也位于闪存中,并在 main() 开始执行之前由启动代码复制到 SRAM 中。

【讨论】:

以上是关于stm32f4 如何往外部存储sram写数据的主要内容,如果未能解决你的问题,请参考以下文章

基于stm32f4的ucGUI通过外部flash存储汉字库显示任意英文字符和汉字组合(控件可用)

野火 ov7725 学习笔记 (fifo)

STM32F429第二十四篇之SRAM原理

STM32F429第二十四篇之SRAM原理

如何在STM32F4中使用Backup SRAM作为EEPROM

STM32F407外部晶体改为25M后检测不到芯片的解决办法