OpenEdv-开源电子网

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

使用stm32f103ret6实现1ms存储20字节到外部flash中,使用什么芯片好一些

[复制链接]

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
发表于 2021-8-16 22:08:37 | 显示全部楼层 |阅读模式
50金钱
如题。目前暂时使用该芯片+nor flash的w25q128,本来想跑文件系统,但是发现用文件系统存储数据实在是太慢太慢了,后来用数据直接存,使用前flash全部擦除为ff,不会有数据,但是还是担心遇到坏块,这样存储的数据就有断点了。请教各位大神,如何选flash芯片实现1ms存储数据,连续1小时左右,基本容量要在32M以上,

最佳答案

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

1ms 20字节,20K/s flash应该是可以满足要求,你有没有用RAM做缓冲?比如你的flash是1024字节一页,不要收到20字节就写,在缓存里面存够1024在页擦除,然后写入,减少频繁的擦写,校验,应该能有效的提高写入速度。 更进一步,你可以在接收数据的时候预先校验好页是否已经擦除过,如果没有擦就先擦掉等待数据写入 这样你只需要在一秒以内擦除20k读20k校验是否0xff 写20k读20k校验,写入是否成功,总共80k/s数据读写,市面上大部 ...
qq1950361006,互帮互助,共同进步。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2021-8-16 22:08:38 | 显示全部楼层
本帖最后由 y284858 于 2021-8-17 14:36 编辑

1ms 20字节,20K/s flash应该是可以满足要求,你有没有用RAM做缓冲?比如你的flash是1024字节一页,不要收到20字节就写,在缓存里面存够1024在页擦除,然后写入,减少频繁的擦写,校验,应该能有效的提高写入速度。
更进一步,你可以在接收数据的时候预先校验好页是否已经擦除过,如果没有擦就先擦掉等待数据写入
这样你只需要在一秒以内擦除20k读20k校验是否0xff 写20k读20k校验,写入是否成功,总共80k/s数据读写,市面上大部分flash应该都能满足这个要求。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2021-8-16 22:11:24 | 显示全部楼层
因为板子尺寸有限制,目前就用w25q128小芯片做为存储暂时测试,但是问题仍要解决,不知道用nand flash会不会实现这么快的速率存储,因为nand flash坏块较多还要判断坏块,估计得上文件系统操作nandflash
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

2

主题

592

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1458
金钱
1458
注册时间
2019-7-28
在线时间
137 小时
发表于 2021-8-17 10:19:46 | 显示全部楼层
帮顶     
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8688
金钱
8688
注册时间
2020-5-11
在线时间
4174 小时
发表于 2021-8-17 13:42:20 | 显示全部楼层
w25q128容量看来不够啊,要不用SD卡?
专治疑难杂症
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2021-8-17 14:13:04 | 显示全部楼层
挂一片低功耗内存 加个电池。
回复

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2021-8-17 14:53:47 | 显示全部楼层
y284858 发表于 2021-8-17 14:28
1ms 20字节,20K/s flash应该是可以满足要求,你有没有用RAM做缓冲?比如你的flash是1024字节一页,不要收 ...

以W25Q256为例

页编程时间典型值0.7ms,写入20K 需要3.5ms,使用块擦除典型时间120ms,使用RAM缓存之后,你有足够的时间进行擦写校验。
W25Q256.png
回复

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2021-8-17 15:08:35 | 显示全部楼层
本帖最后由 y284858 于 2021-8-17 15:10 编辑
y284858 发表于 2021-8-17 14:53
以W25Q256为例

页编程时间典型值0.7ms,写入20K 需要3.5ms,使用块擦除典型时间120ms,使用RAM缓存之 ...

不太清楚你的RAM使用情况,RET6有64k RAM 如果你的设备不是很复杂应该是有足够的空间做RAM 缓冲,
你先全片擦除再写也可以,如果你担心有坏块那就需要做管理,在写入后读出校验是非写入成功,做一个坏块标记的管理
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2021-8-17 23:50:47 | 显示全部楼层
LcwSwust 发表于 2021-8-17 13:42
w25q128容量看来不够啊,要不用SD卡?

sd卡环境不允许,有振动,而且时间长了怕不靠谱
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2021-8-17 23:52:31 | 显示全部楼层
simms01 发表于 2021-8-17 14:13
挂一片低功耗内存 加个电池。

是啊,如果是挂一个内存,加个电池,就可以用掉电检测,然后把内存的东西一下子存起来的方式了,但是目前这个方案一个是没用过,第二个是时间比较紧,第三个就是板子很小,50*50mm圆形,估计很难实现这部分电路
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2021-8-17 23:59:25 | 显示全部楼层
y284858 发表于 2021-8-17 15:08
不太清楚你的RAM使用情况,RET6有64k RAM 如果你的设备不是很复杂应该是有足够的空间做RAM 缓冲,
你先 ...

目前基本使用的就是这个方式,手头有的是128,暂时用这个调试,数据采样率目前设置为200k,以1秒的时间定时存储,一次就是200*n个字节,这样除去1秒的采集时间,每次存储间隔相差90ms左右,暂时就这样了,等买的256到了,在更换,上位机我做了一个检验,使用前先全片擦除,然后全片读取,如果全都是ff,这个板子就是能用的,否则就不能用更换板子,板子有个好处就是每次是空数据,然后等待开机,类似于黑匣子,一次性的黑匣子,存满了就等着读取,然后再次擦除判断好坏,给下次用。
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2021-8-18 00:01:34 | 显示全部楼层
感谢大家的热心回答,我目前还有一个问题,这个w25q128/256  的 nor flash是不是出厂基本是没有坏块的,不像是nand flash工艺问题,处理很麻烦,然后这个nor flash如果真的出现了坏块,读取出的数据是ff还是00,这个问题比较重要,再次感谢大家的热心回答,和宝贵的建议。
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2021-8-18 10:36:25 | 显示全部楼层
kbq1950361006 发表于 2021-8-18 00:01
感谢大家的热心回答,我目前还有一个问题,这个w25q128/256  的 nor flash是不是出厂基本是没有坏块的,不 ...

我有一个思路你可以试试,在你写的时候带校验,例如一页1024字节,那么你留出4字节做校验,前面1020保存数据,
校验方式可以根据你的mcu计算性能综合来选,基本CRC16应该可以了,
写入之后读出来校验是否写入成功,不成功就写到下一个块,
读出来的时候用同样的方式对前面1020字节数据做计算然后跟写入时的校验数据对比,如果一致那么这个数据就是对的,如果失败则读取数据是错误的直接丢弃读下一个
这样即使中间有坏了的块应该也不受影响,
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2021-8-18 11:45:18 | 显示全部楼层
y284858 发表于 2021-8-18 10:36
我有一个思路你可以试试,在你写的时候带校验,例如一页1024字节,那么你留出4字节做校验,前面1020保存 ...

这样是个办法,可以对坏块跳过处理,这个我得测试下,每次 写入一个区域,在读取出来判断写入的对不对,如果这个时间超过50ms,我就得放弃了,因为本身要求对所有数据都是以一定频率采集的存储的,目前我已经相当于在200hz的中间有个1hz的断点(100ms),在断点更长时间就不能接受了
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

6

主题

211

帖子

0

精华

高级会员

Rank: 4

积分
833
金钱
833
注册时间
2019-12-17
在线时间
157 小时
发表于 2021-8-18 17:05:33 | 显示全部楼层
kbq1950361006 发表于 2021-8-18 11:45
这样是个办法,可以对坏块跳过处理,这个我得测试下,每次 写入一个区域,在读取出来判断写入的对不对, ...

如果crc16校验采用查表方式,加上读写应该是很快的,具体的时间没有测试过,你可以测试一下。
回复

使用道具 举报

4

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2014-10-26
在线时间
29 小时
发表于 2021-8-20 11:41:08 | 显示全部楼层
LZ可以看看循环式日志式记录,以前在门禁设备上使用。
系统上电时需要找到数据的头位置和尾位置。数据写在尾位置,同时尾位置向后移。若尾位置接近头位置,把头位置扇区擦除。
好处是写入是不用等待删除。缺点是数据需要从尾位置找起。

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-24 16:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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