新唐M0 内核 FLASH操作认识和总结

本文不对代码做详细解析。先说结论,和常见问题

结论

结论1:FLASH在操作的时候,需要先“擦除”。然后在“写入”。
结论2:擦除需要一整块擦除。不能只擦除某几个字节。
结论3:写入是可以按照字节这样写入的。但是“结论1”的存在。导致写入也整片写入。否则数据就会丢失。
结论4:写入可以写0 。不能写1.如果要写1.必须先“擦除”。

问题:

如果不按照如上结论来做。会怎样呢?

分析如下。

============================ 验证1===================================
1.验证擦除,到底做了啥?步骤如下
先读出FLASH-》擦除FLASH->读取FLASH
在这里插入图片描述
运行结果
在这里插入图片描述
可以看出擦除其实是写入1。所以读取出来是0xFFFFFFFF。

============================ 验证2===================================
1.验证不按照整块擦除会怎样,步骤如下
先读出FLASH-》擦除FLASH。但是只擦除1个地址0x3000->读取FLASH
在这里插入图片描述
从擦除这个库函数可以看到。必须以块为单位。整块擦除。
在这里插入图片描述
运行结果
在这里插入图片描述
可以看到传入一个地址0x3000后。这一地址对应的512byte都会被擦除。

============================ 验证3===================================
1.擦除的地址,不是传入512byte的块对齐首地址,会怎样。上一步验证传入的0X3000是可以被512整除的。也就是块对齐首地址。但是如果不是传入块对齐首地址,会怎样。如传入地址0X3001。步骤如下。先读出FLASH-》擦除FLASH。但是只擦除1个地址0x3001->读取FLASH。
运行结果:
在这里插入图片描述
和验证2是一样的,库里面会根据传入的地址,找到这一块的首地址。然后擦除。

============================ 验证4===================================
不擦出,直接写入会怎样
验证步骤,先读出,然后写入数据0XFFFFFF。再读出。
在这里插入图片描述如果不擦出,写入0x000000.然后读出来会怎样。
在这里插入图片描述写入0 是可以的。

============================ 验证5===================================
不擦出,直接对某个字节写0.不写1可以吗
验证步骤,先读出,然后写入数据0X0。再读出。
在这里插入图片描述写入0是可以不整片写的。但是写1只能用擦除来完成。

为什么会有以上的怪现象呢?
这个半导体FLASH的结构有关。详细的。我看不是很懂。但大概的意思是。因为工艺和半导体设计原因。这些存储信息的半导体是按照“块”为单位划分成一块块的。当改变某一块的时候。因为需要控制某个总闸。将所有的电子通过“隧道效应”打进去(不确定电子是打进去还是打出来)。这个总闸的改变是区域性的。所以擦除的时候,就会导致整块数据被改变。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值