打印

还是GD32F130后32kB FLASH的访问延时问题

[复制链接]
2349|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
imdx|  楼主 | 2017-11-13 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F10x系列有2x64bit prefetch buffer
zero wait state, if 0 < SYSCLK ≤ 24 MHz
one wait state, if 24 MHz < SYSCLK ≤ 48 MHz
two wait states, if 48 MHz < SYSCLK ≤ 72 MHz
GD32F130总共64kB FLASH,前32kB FLASH,zero wait state
后32kB的wait state情况如何?是否和SYSCLK有关系?如果使用比较低的SYSCLK比如8M,后32kB FLASH是否可以和前32kB一样使用?
查了Datasheet和User Manual都没有找到答案。

沙发
Houtz| | 2017-11-13 12:34 | 只看该作者
这个跟主频多大没有关系,是成正比的。后面的属于data flash ,每次取1K需要2086个时钟周期,然后执行,如果后面执行的代码在这1K里面,就继续执行, 如果在这1K之后,就会再去花2086个时钟周期再取。所以如果你程序放到后面的data flash里,这个执行的速度是不好量化出来的。后面的适合放一些字库常量等,就是不经常要CPU访问的。有问题可以联系我交流沟通375880228@qq.com

使用特权

评论回复
板凳
firstblood| | 2017-11-14 14:05 | 只看该作者
看来这个跟主频的有非常大的关系的

使用特权

评论回复
地板
imdx|  楼主 | 2017-11-14 16:40 | 只看该作者
Houtz 发表于 2017-11-13 12:34
这个跟主频多大没有关系,是成正比的。后面的属于data flash ,每次取1K需要2086个时钟周期,然后执行,如 ...

也就是说,前32kB是有32kB的cache,因此可以做到0等待,而后32kB只有1kB的cache,如果cache无法命中,那么就需要2086个sysclk从SPI FLASH里面取指令。这样来说的话,就只有前32kB适合作为程序存储器。

使用特权

评论回复
5
Houtz| | 2017-11-15 09:04 | 只看该作者
imdx 发表于 2017-11-14 16:40
也就是说,前32kB是有32kB的cache,因此可以做到0等待,而后32kB只有1kB的cache,如果cache无法命中,那 ...

你的理解很正确,但是后面也是可以用来做程序区的,这个要依你程序功能做决定,比如说你程序对速度要求不高。也可以这样,把上电只需执行一次的程序,比如说初始化等这些用编译器的分散加载的方式放到后面32K。把主程序while(1)和中断执行的程序放到前面。比如有一些大量的常量如字库都放到后面。

使用特权

评论回复
6
imdx|  楼主 | 2017-11-15 14:31 | 只看该作者
Houtz 发表于 2017-11-15 09:04
你的理解很正确,但是后面也是可以用来做程序区的,这个要依你程序功能做决定,比如说你程序对速度要求不 ...

初始化代码放到后32kB,或者存储常量字库,这样做是可以,但是带来的影响也很明显,软件的移植性会受到很大影响,而且MDK中对代码的绝对定位支持并不是太好。权衡之下还是只当32kB的器件来用好了。
STM32F030F4P6标称16kB FLASH,实际上32kB都可以用,这样以来和GD32F130F8P6是一样的。

使用特权

评论回复
7
Houtz| | 2017-11-15 17:08 | 只看该作者
imdx 发表于 2017-11-15 14:31
初始化代码放到后32kB,或者存储常量字库,这样做是可以,但是带来的影响也很明显,软件的移植性会受到很 ...

MDK用分散加载的方式,修改一下连接脚本.sct是很好解决的。GD32F130是M3的内核,主频最高可达72M,STM32F030是M0的核,主频也只是36M。这样GD32F130效率就高出很多。关键是价格优势。

使用特权

评论回复
8
firstblood| | 2017-11-15 17:56 | 只看该作者
这样说是不是根据具体的设计选择合适的主频的/?

使用特权

评论回复
9
imdx|  楼主 | 2017-11-16 13:45 | 只看该作者
Houtz 发表于 2017-11-15 17:08
MDK用分散加载的方式,修改一下连接脚本.sct是很好解决的。GD32F130是M3的内核,主频最高可达72M,STM32F ...

我选择应用主频的原则是:满足需求的最低主频。目前用的是8M,关闭PLL。配合Sleep模式,整机功耗大约5-6个mA。因此最高主频72M还是36M其实并没有什么意义。大多数人的应用其实也都不需要最高主频。
M0和M3内核实际应用差别并不大,M3好处是MDK编译速度快得多。M0不支持中断向量重定位,bootloader编写有一定难度,不过这些后来也都解决了。
价格方面我查到的价格立创商城和淘宝都是STM32F030F4比GD32F130F8便宜一些。
ps.STM32F030最高主频是48M

使用特权

评论回复
10
Houtz| | 2017-11-17 09:29 | 只看该作者
imdx 发表于 2017-11-16 13:45
我选择应用主频的原则是:满足需求的最低主频。目前用的是8M,关闭PLL。配合Sleep模式,整机功耗大约5-6 ...

你现在主频很小都不是问题,也就是说程序运行的速度没有多大的要求,那就没多大的影响了

使用特权

评论回复
11
zhangbo1985| | 2017-11-19 23:56 | 只看该作者
这个跟该部分的flash的访问总线及所采用的时钟总线有关系的啦

使用特权

评论回复
12
tongbu2015| | 2017-11-19 23:58 | 只看该作者
Houtz 发表于 2017-11-13 12:34
这个跟主频多大没有关系,是成正比的。后面的属于data flash ,每次取1K需要2086个时钟周期,然后执行,如 ...

这个解释的我参考下的,后边我遇上了好咨询的

使用特权

评论回复
13
Houtz| | 2017-11-22 10:19 | 只看该作者
tongbu2015 发表于 2017-11-19 23:58
这个解释的我参考下的,后边我遇上了好咨询的

好的,有问题多多沟通和交流

使用特权

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

本版积分规则

121

主题

902

帖子

8

粉丝