完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
擦(erase)
Flash 的编程原理都是只能将 1 写为 0,而不能将 0 写为 1。所以在 Flash 编程之前,必须将对应的Page擦除,而擦除的过程就是把所有位都写为 1 的过程。是寄存器控制的。都是0xFFFFFFFF才能被写入 1.擦除的单位是page,一个page可能是256B也可能是512B。 2.擦除的地址需要提前进行页对齐。 实现目标 擦除一个page的数据 流程: (1)设置寄存器为page擦除状态 (2)加载一个无效数据dummy,任意值到目标区域上 (3)激活寄存器高电平状态 (4)加一个while死循环,等待高电平状态消失,高电平状态消失说明擦写完成 (5)使能寄存器的鉴别模式 (6)读出所有数据和0xFFFFFFFF比较 (7)数据相符,关闭寄存器verify模式,返回success。失败重复上面所有步骤 (8)失败次数达到门限值,关闭寄存器verify模式,返回fail Note:在高电平操作之后,硬件已经记住了目标的擦除page,所以只会是目标page是表现出verify模式 |
|
|
|
写(write)
需要注意: 1.以word为写入单位 2.写前需要提前擦除。写入前,必须是0xFFFFFFFF。 实现目标写一个buffer的数据(需要注意操作的时候要按照具体芯片文档说明来操作,比如关闭一些时钟和中断) 流程: (1)设置底层寄存器为写状态 (2)加载一个word的数据到buffer上 (3)通过设置寄存器设置为高电平状态 (4)等待高电平状态消失,判定为写结束 (5)数据比对,比对成功则写成功 (6)重复前面的步骤进行第二个一直到第n个word的写操作 |
|
|
|
更新(update)
Update!=Write Write是目标区域是空白,然后写入数据;Update是在目标区域已经存在数据的情况下,把目标区域的数据给覆盖更新成新数据 这样一说是不是很清晰了呢? 按照已知的特点,flash是无法一次擦除,多次写入的。要想写入数据必须重新对目标区域进行擦除。而擦除一擦除就是一整个page,因此需要对数据进行备份到ram中,再擦除,再写入。把flash的擦和写结合一下就是upade了。 实现目标update,nword 流程: (1)目标地址dst,Upade数据来源地址src,长度n个word,计算目标地址和page起始地址的偏移长度offset (2)复制备份数据到ram中 (3)在ram中把数据update掉 (4)擦除page (5)把ram buffer中的数据到目标区域,整个page都重新写入 |
|
|
|
只有小组成员才能发言,加入小组>>
809 浏览 0 评论
1161 浏览 1 评论
2535 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2719 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1107浏览 3评论
198浏览 2评论
464浏览 2评论
378浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
459浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 17:35 , Processed in 1.177360 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号