你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 flash写问题

[复制链接]
ikxlf 提问时间:2019-7-24 14:25 /
有什么办法可以测试在操作一块flash的时候,刚好完成了一半就被另外一块地址的flash操作打断了的这种情况? ,主要是想看这样操作是否可以以及操作会出现什么异常?启动模式SRAM或者 flash 都可以, 不知道有没有高手帮忙解答一下。
收藏 评论12 发布时间:2019-7-24 14:25

举报

12个回答
七哥 回答时间:2019-7-24 15:18:33
完全相同的两片外部Flash就可以,只要你不读就行。
ikxlf 回答时间:2019-7-24 15:23:54
toofree 发表于 2019-7-24 15:18
完全相同的两片外部Flash就可以,只要你不读就行。

我相同时写内部的flash,主要想验证一下是否内部flash支持不同地址同时读写操作
废鱼 回答时间:2019-7-24 15:23:55
楼主,我不太理解这个同时。代码运行都是有顺序的,很难实现同时操作。最好能描述一下想做什么。
ikxlf 回答时间:2019-7-24 15:35:47
安 发表于 2019-7-24 15:23
楼主,我不太理解这个同时。代码运行都是有顺序的,很难实现同时操作。最好能描述一下想做什么。 ...

我的目的是这样的:我可以简单地把内部flash比如说256k的空间地址为0x08000000-0x08040000,  如果我把代码烧写到RAM中,也是从RAM中启动,这样的话整个flash区域我都可以随意操作,现在问题来了,如果我想同时写flash空间的两个地址 不知道这样是否可以,最关键的是我不知道咋样实现同时操作,除非是双核的MCU可能能完全做到这个所谓的同时,我看到NXP的 MCU似乎可以这么操作,  后来我做做过这样的测试  就是开启一个中断,中断中不停的对一个地址或者一块地址flash 擦除读写操作,主程序中对另外一块地址进行不停的读操作,我就长时间的跑,看看会不会发生异常比如Hard_fault错误,结果长时间都不会发生错误,我把中断时间改为毫秒级别,还是没看到错误,后来我就在memory窗口打开了我要读取的flash地址查看对应地址数据,结果很多次都报错了,所以这样是不是可以证明,不能同时操作不同地址falsh空间,否则容易造成总线错误,最终导致的是Hard_fault错误呢,   因为中断这个方法感觉不是很靠谱(毕竟我记得ST的flash在读写擦除flash时候似乎不响应中断),  而我之所以可以测出Hard_fault错误,原因可能是keil软件和code同时在操作falsh导致了这个Hard_fault。。。 提出这个问题的目的是看大家有没有更好的办法测试一下这个结论?
七哥 回答时间:2019-7-24 17:31:24
本帖最后由 toofree 于 2019-7-24 17:38 编辑

无论什么操作,都无法实现,同一时间同时读或写同一地址段的两个地址空间的,必须是分时复用。
你这么试,以为是同时操作,实际内部已做了仲裁,进行了分时调度。你开个中断,就以为是同时了?中断执行的时候,主程序是不执行的。退出中断后,主程序才能继续执行。

就算是双核操作,也是有前提的,必须是两片独立的地址空间,必须是两组独立的系统总线。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

butterflyspring 回答时间:2019-7-24 17:35:32
从芯片结构和擦写功能上看,是实现不了的。而且FLASH擦写原理上讲,接口电路升压是不可能再操作的。所以你的这个想法看起来是行不通的。在手册上关于FLASH部分有介绍。少数芯片有双BANK的架构,只是方便用户程序中断能连续而已。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

ikxlf 回答时间:2019-7-24 20:15:02
toofree 发表于 2019-7-24 17:31
无论什么操作,都无法实现,同一时间同时读或写同一地址段的两个地址空间的,必须是分时复用。
你这么试, ...

分析的很有道理,受教了,多谢,我也是最近研究了那个s32k116  恩智浦的MCU  看到他们的两个flash  分别在两个bank上,可以同时操作一些功能,所以我想在ST上试试看行不行
ikxlf 回答时间:2019-7-24 20:15:32
butterflyspring 发表于 2019-7-24 17:35
从芯片结构和擦写功能上看,是实现不了的。而且FLASH擦写原理上讲,接口电路升压是不可能再操作的。所以你 ...

你是不是用过恩智浦的MCU  s32k系列的就是两个bank
wenyangzeng 回答时间:2019-7-24 21:33:10
单线程CPU如何同时执行2个任务?再怎么操作也是分时进行的。
废鱼 回答时间:2019-7-25 09:32:11
楼主,进入Hard_fault后,可以根据寄存器查找进去前的代码运行到那里。可以线确定一下进入的原因。
ikxlf 回答时间:2019-7-25 11:30:28
安 发表于 2019-7-25 09:32
楼主,进入Hard_fault后,可以根据寄存器查找进去前的代码运行到那里。可以线确定一下进入的原因。 ...

你好,请教一下,怎么样根据寄存器找到进入hard_fault原因呢
废鱼 回答时间:2019-7-25 15:13:18
楼主,要学会应用网络。自己搜一下:stm32 hardfault_handler

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版