OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8651|回复: 15

407外扩sram和外扩flash的问题

[复制链接]

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
发表于 2016-8-29 14:07:18 | 显示全部楼层 |阅读模式
10金钱
  如题,主要问题有以下几点,望原子哥和各位大神不吝赐教:
  1、407的程序是否可以在外扩sram上运行,如果可以,该怎么做,希望大神们给点思路;如果不行,那么外扩sram是否仅用于保存数据,例如某些初始化要用的超级大数组。
  2、程序能否下载到外扩flash中,运行时由外扩flash加载到ram中(片内或外扩)执行,如果可以该怎么做;如果不行,那么外扩flash是否仅能保存一些数据,掉电后仍要保存的数据。
  3、基于以上两点,程序可否烧写进外扩flash,然后加载到ram(片内或外扩)中运行,类似linux的启动流程中bootloader(uboot)机制。
  4、如果1、2两点都可行,那么使用开发板板载的flash和sram是否可以实现,如果不行,那么需要使用什么型号的flash和ram(例如norflash、sdram等)。
  希望原子哥和各位大神倾力相助啊~~~小弟谢过!

最佳答案

查看完整内容[请看2#楼]

我发现一个现象,好多人都不喜欢去看数据手册,只希望通过百度或者论坛提问找人解决,这个不好. F407参考手册第2章,就讲到总线矩阵,从矩阵图中很清晰的可以看到,I-Code和D-Code都可以走FSMC. 也就是说,程序在外部RAM运行是没有问题的,楼主提的1,2点都可以. 具体怎么操作那还是个事儿么,先要在内部FLASH中写一段加载程序,就是你说的uboot,把NAND FLASH中的代码复制到SRAM,然后设置中断向量到SRAM,设置主堆栈为代码首4字节,设置PC ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-8-29 14:07:19 | 显示全部楼层
我发现一个现象,好多人都不喜欢去看数据手册,只希望通过百度或者论坛提问找人解决,这个不好.
F407参考手册第2章,就讲到总线矩阵,从矩阵图中很清晰的可以看到,I-Code和D-Code都可以走FSMC.
QQ截图20160829163105.png
也就是说,程序在外部RAM运行是没有问题的,楼主提的1,2点都可以.
具体怎么操作那还是个事儿么,先要在内部FLASH中写一段加载程序,就是你说的uboot,把NAND FLASH中的代码复制到SRAM,然后设置中断向量到SRAM,设置主堆栈为代码首4字节,设置PC指针为代码第二个4字节.
完成.
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
 楼主| 发表于 2016-8-29 14:10:05 | 显示全部楼层
自己先顶一下,不要沉啊~~
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-8-29 14:51:11 | 显示全部楼层
本帖最后由 zuozhongkai 于 2016-8-29 14:53 编辑

1、程序在SRAM上运行可以参考串口IAP程序,RAM就是用来保存临时变量的,就和你的电脑内存一样
2、程序可以下载到flash中,但是407只能用NOR FLASH。


回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
 楼主| 发表于 2016-8-29 15:36:55 | 显示全部楼层
zuozhongkai 发表于 2016-8-29 14:51
1、程序在SRAM上运行可以参考串口IAP程序,RAM就是用来保存临时变量的,就和你的电脑内存一样
2、程序可以 ...

那么程序是直接在nor flash上运行,还是从nor flash中加载到内存中运行?
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
 楼主| 发表于 2016-8-30 10:23:21 | 显示全部楼层
zmingwang 发表于 2016-8-29 16:40
我发现一个现象,好多人都不喜欢去看数据手册,只希望通过百度或者论坛提问找人解决,这个不好.
F407参考手册 ...

那也就是说只有nand 或者 nor才可以,其他的flash都不行 是这样吗?
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-8-30 10:58:21 | 显示全部楼层
天涯歌戮 发表于 2016-8-30 10:23
那也就是说只有nand 或者 nor才可以,其他的flash都不行 是这样吗?

FSMC只能挂NAND 和NOR,你还有什么FLASH?
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
 楼主| 发表于 2016-8-30 11:08:33 | 显示全部楼层
本帖最后由 天涯歌戮 于 2016-8-30 11:16 编辑
zmingwang 发表于 2016-8-30 10:58
FSMC只能挂NAND 和NOR,你还有什么FLASH?

谢谢大神的指点~刚才详细看了下,可以在mdk中配置下载程序到nand或nor flash中,然后在片内flash中烧写一段代码,这个程序要初始化用到的设备,然后将nand 或 nor中的程序拷贝到外扩sram中去,然后设置pc指针到sram的程序运行地址处,搞定~~~整个流程思想其实就是linux中uboot的启动思想,我想复杂了。
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-8-30 11:35:42 | 显示全部楼层
天涯歌戮 发表于 2016-8-30 11:08
谢谢大神的指点~刚才详细看了下,可以在mdk中配置下载程序到nand或nor flash中,然后在片内flash中烧写一 ...

SRAM有可能比你的主控芯片都贵,你有这种想法才是想复杂了.
如果主控芯片的片上FLASH满足不了你的设计需求,可以选择大FLASH的芯片,成本比SRAM少很多.
如果你希望像在PC上写程序那样,无限制的malloc,随意在栈上开缓存,那你的乐子就大了
总之,单片机主要的应用就两点,一是控制,一是通信,这两方面都不会有太大的资源开销的.
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
 楼主| 发表于 2016-8-30 14:54:15 | 显示全部楼层
zmingwang 发表于 2016-8-30 11:35
SRAM有可能比你的主控芯片都贵,你有这种想法才是想复杂了.
如果主控芯片的片上FLASH满足不了你的设计需 ...

是的,现在的项目没必要用这种思路,这样做真的是吃力不讨好~
回复

使用道具 举报

5

主题

62

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
426
金钱
426
注册时间
2016-3-9
在线时间
75 小时
发表于 2016-8-30 15:04:19 来自手机 | 显示全部楼层
关于程序运行我想说几点:首先单片机程序运行方式和pc机是不同的,因为单片机的程序是放到nor flash中的,也是在flash中运行的,因为nor flash可以随机寻址,就和RAM差不多。其次单片机要把程序放在RAM中运行是非常傻的行为,因为速度会变慢而不是变快。第三,nand flash不能随机寻址,所以不能作为程序运行的载体而只能作为存储。第四,pc之所以要把程序从硬盘加载到sdram中运行,除了运行速度快,更重要的是还是不能随机读写。第五,sram比sdram贵的多,所以pc的大内存都是用的sdram,只有小容量的缓存是用的sram,毕竟价格因素和体积因素是不可忽视的。先写这么多吧,总之我想表达的是:不要拿单片机来跑linux,哈哈
回复

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2016-8-30 15:19:01 | 显示全部楼层
taoking_opendev 发表于 2016-8-30 15:04
关于程序运行我想说几点:首先单片机程序运行方式和pc机是不同的,因为单片机的程序是放到nor flash中的, ...

+65535
回复

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2016-2-18
在线时间
13 小时
 楼主| 发表于 2016-8-30 17:22:25 | 显示全部楼层
taoking_opendev 发表于 2016-8-30 15:04
关于程序运行我想说几点:首先单片机程序运行方式和pc机是不同的,因为单片机的程序是放到nor flash中的, ...

你的意思我明白了,但是,程序不是在flash中运行的,准确的说也不是在ram中运行的,程序是被读到ram中,然后cup读取ram中的指令和数据去跑一个程序,nor flash能够“直接运行程序”最重要的原因是nor是总线型设备,地址总线直接参与cpu编址和寻址。
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-12-6
在线时间
2 小时
发表于 2016-12-6 22:53:40 | 显示全部楼层
外扩SRAM,可以选择SQPI PSRAM,通过SPI或者Quad SPI接口来实现,在QSPI QCLK=60MHz情况下,memory map with DMA或者memory map with DMA2D,读取速度约为28MB/s (实测速度, STM32F746, HCLK 180MH在)
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-12-6 23:24:51 | 显示全部楼层
sqpipsram 发表于 2016-12-6 22:53
外扩SRAM,可以选择SQPI PSRAM,通过SPI或者Quad SPI接口来实现,在QSPI QCLK=60MHz情况下,memory map wit ...

你这种没法随机寻址,不能拿来跑程序
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-12-6
在线时间
2 小时
发表于 2016-12-25 21:03:58 | 显示全部楼层
嗯,对于现存的SPI或QPI,它确实只能做data RAM. 在新的MCU设计中,结合内部SRAMz做cache,它就可以做Code RAM
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-12 06:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表