搜索
bottom↓
回复: 20

STM32F030 有關FLASH寫入 發生錯誤的問題

[复制链接]

出0入0汤圆

发表于 2019-2-23 17:05:13 | 显示全部楼层 |阅读模式
本帖最后由 陳聖文 于 2019-2-23 17:07 编辑

小弟在使用兩顆MCU互傳資料的程式
傳輸本身正常
但是要大量寫入FLASH時卻變成異常
請各位幫我檢查是否有錯誤
給小弟意點建議

按照我的設計
主機傳指令給從機後
從機會在時間內傳送其要求的資料(1024 bytes的資料量)
然後主機成功接收資料後就會存進FLASH

目前畫面可以看到
主控的畫面(P0)的部分程式
是抓取來自從機的USART傳過來的資料
然後有開始接收資料後(顯示於P0的最右側的接收暫存器)
跳入從機的畫面(P1)的程式碼
--以上都正常,不正常的在下面--
  等待接收完畢後一次2bytes存放進主機的FLASH
  但是有機會變成一堆0x0000
  單步執行不會出現
    連續執行直到檢測到0x0000
    暫停後  再在執行會恢復正常
  如果不檢測0x0000
    則會一路0x0000到底(如圖P0所示)


以下是主控的畫面(P0)

以下是從機的畫面(P1)



如果我找到問題也會在此寫上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入442汤圆

发表于 2019-2-23 17:11:28 来自手机 | 显示全部楼层
flash写入需要数个ms,你加延时和状态检测了没?

出0入0汤圆

 楼主| 发表于 2019-2-23 17:26:51 | 显示全部楼层
wye11083 发表于 2019-2-23 17:11
flash写入需要数个ms,你加延时和状态检测了没?


有檢查是否忙碌中
直到忙碌結束才會在燒錄下一筆資料
P1的第107行

出0入0汤圆

 楼主| 发表于 2019-2-23 17:31:30 | 显示全部楼层
wye11083 发表于 2019-2-23 17:11
flash写入需要数个ms,你加延时和状态检测了没?

檢測到不忙碌後壞再延遲60uS
問題還再

DATASHEET上面寫說
寫入時間約是53.5uS

出0入442汤圆

发表于 2019-2-23 17:38:06 | 显示全部楼层
陳聖文 发表于 2019-2-23 17:31
檢測到不忙碌後壞再延遲60uS
問題還再

那样你把你的写入地址打印出来,专查写入地址吧。我经常遇到SPI被烧成砖的情况(我做FPGA),基本上分析都是写错SPI地址了。这个可能性非常大。

出0入0汤圆

 楼主| 发表于 2019-2-23 17:54:12 | 显示全部楼层
wye11083 发表于 2019-2-23 17:38
那样你把你的写入地址打印出来,专查写入地址吧。我经常遇到SPI被烧成砖的情况(我做FPGA),基本上分析 ...

加上用USART回傳資料
結果就正常了@@
莫非是要等更久?

出0入0汤圆

 楼主| 发表于 2019-2-23 18:15:01 | 显示全部楼层
實測...
延遲150uS即可
不符合規格書@@

出0入442汤圆

发表于 2019-2-23 18:28:10 来自手机 | 显示全部楼层
陳聖文 发表于 2019-2-23 18:15
實測...
延遲150uS即可
不符合規格書@@

你最好别这么整。时间长了一定会出问题。芯片一致性。

还有,你这种情况建议给st发case。

出675入8汤圆

发表于 2019-2-23 22:22:11 来自手机 | 显示全部楼层
stm32f030的flash好像只能写1000次

出0入30汤圆

发表于 2019-2-23 22:47:30 | 显示全部楼层
flash写一般需要2ms

出0入0汤圆

发表于 2019-2-24 14:24:32 | 显示全部楼层
除非是硬件BUG,否则理论上是不需要延时的。不管写入还是擦除,在这段时间内MCU实际上是跑不了程序的,程序判断是否写入/擦除完成,只要检测BSY标志和出错标志就好。

出0入0汤圆

 楼主| 发表于 2019-2-25 08:52:19 | 显示全部楼层
ycheng2004 发表于 2019-2-23 22:47
flash写一般需要2ms

那個是擦除囉
30ms
擦掉一頁或是全部擦掉(程式自殺)

出0入0汤圆

 楼主| 发表于 2019-2-25 09:13:28 | 显示全部楼层
本帖最后由 陳聖文 于 2019-2-25 09:15 编辑
xml2028 发表于 2019-2-23 22:22
stm32f030的flash好像只能写1000次


那是很老舊的文檔囉
最小擦寫次數1000次

不過後續多改到10k才是最小擦寫次數

搬個網址
https://blog.csdn.net/niepangu/article/details/46409555

我自己的DATASHEET裡面有寫
只是我不太肯定在哪一段(開發的時候有瞥見)
反正大到我根本不想去記他

出0入0汤圆

 楼主| 发表于 2019-2-25 09:17:57 | 显示全部楼层
wye11083 发表于 2019-2-23 18:28
你最好别这么整。时间长了一定会出问题。芯片一致性。

还有,你这种情况建议给st发case。 ...

好,我再研究看看
總之結果再發給各位

我實在不想說...
台灣的FAE根本廢物
TMD的都只會用套件

出0入0汤圆

 楼主| 发表于 2019-2-25 09:19:22 | 显示全部楼层
sme 发表于 2019-2-24 14:24
除非是硬件BUG,否则理论上是不需要延时的。不管写入还是擦除,在这段时间内MCU实际上是跑不了程序的,程序 ...

擦寫的時候
核心不能跑?

那何必還要檢測BSY呢?

出0入0汤圆

 楼主| 发表于 2019-2-25 10:29:33 | 显示全部楼层
我發現我程式內有尚未提到的部分

Wayne_FLASH___RX裡面
等待接收器完全停止
解鎖FLASH保護
開始寫入FLASH
鎖上保護鎖

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-2-25 17:27:14 | 显示全部楼层
陳聖文 发表于 2019-2-25 09:19
擦寫的時候
核心不能跑?

实际上BSY是用于通过SWD或者SRAM烧写FLASH时用的,当然为了统一,手册中就没有区分了,检测BSY即使多此一举,也不会导致问题。

出0入8汤圆

发表于 2019-2-25 17:58:45 | 显示全部楼层
陳聖文 发表于 2019-2-25 09:19
擦寫的時候
核心不能跑?


能跑 应该是擦写时,CPU不能访问flash,但是 RAM是没问题得。 不过 因为flash有缓存,具体还得看手册得说明。

出0入0汤圆

发表于 2019-2-25 20:21:13 | 显示全部楼层
xml2028 发表于 2019-2-23 22:22
stm32f030的flash好像只能写1000次

谢谢,我还在F1x的思维以为是10K次,这下有的情况要慎重了。

出0入16汤圆

发表于 2019-2-25 21:03:30 | 显示全部楼层
一次写操作是按4个byte来操作的,你只写两个字节剩下的两个字节就被写0了,下一步再写也不可能把那两个字节从0改成其它内容的了。
另外记得以前遇到过写地址不是按四字节对齐的话可能会跳入hardfault的

出0入30汤圆

发表于 2019-2-27 08:54:04 | 显示全部楼层
本帖最后由 ycheng2004 于 2019-2-27 09:03 编辑
sme 发表于 2019-2-25 17:27
实际上BSY是用于通过SWD或者SRAM烧写FLASH时用的,当然为了统一,手册中就没有区分了,检测BSY即使多此一 ...


AVR写内部EEPROM,CPU可以运行其他程序
STM8S003写内部flash时,CPU不可以运行其他程序,
但STM8S105等MCU可以写内部flash,CPU可以运行其他程序,读同时写,
STM32F030,读与写可以同时运行吗?
大家觉得STM8与STM32是flash还是EEPROM?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 06:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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