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
还可以查看用于访问的 st、ld、sts 和 lds 指令记忆。
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存储汉字库显示任意英文字符和汉字组合(控件可用)