jicheng0622

【原创】解析什么是Read 1s命令

0
阅读(5703)

    接上篇余热,继续低头码字(小说的感觉又来了啊有木有,呵呵)。

    最近在看Kinetis的Reference Manual的时候发现一个有意思的命令,即Read 1s。乍一看以为是读1秒的意思(你不要跟我说现在小米都出2s了iPhone都出5s了,这个“1s”太落伍了吧,咳咳,我只能说你手机看多了吧,我可不想落下个给手机做广告的嫌疑,呵呵),不过一结合上下文的话这意思可就差的十万八千里了,无奈之下只能安下心来仔细琢磨一会儿(说实话,这E文读的真是累啊,呵呵,要我说啊,为什么国内的科研水平相比于国外上不去,其中一部分原因是现在的科学文献几乎一色的E文,国人别说理解透彻,首先认全单词都得半天,汗,这效率可想而知了,哎,咳咳,当然我并不是反对英文的重要性,稍微替广大技术发烧友们吐槽一下,呵呵),这才发现其中奥妙,觉着挺有意思的,我google了一下还没有人正式的提到过这个问题,所以还是觉着有必要在这里分享出来,仅供参考。

    首先解释一些这个“1s”,其中“s”其实是英文复数的意思,也就是说很多个1,咳咳,这下长见识了吧,看来“1s”还是个多义词来,原来E文也是博大精深的嘛,哈哈。好了,言归正传,既然1s是多个1的话,那Read 1s就是读多个1出来,而且这个命令又是在Flash模块里用的,我们会联想到什么呢,呵呵,估计很多人都已经猜到了。我们都知道,flash存储器由于其架构的原理,对其读写尤其是写来说有两个过程,即先擦除然后再写,而每个字节被擦除后是为1的(我们对flash的写只能是由1写成0,是不能由0写成1的,这是原理性的问题,也解释了为什么我们写数据的时候要先擦除再写,这下知道原因了吧,呵呵),这下我们再联想Read 1s指令就有点“昭然若揭”了吧,结合文档中的内容我们不难理解“Read 1s”命令其实就是用来确认和验证某段Flash区是否被正确擦除了(全擦除了就读回来的全是1,有一个没擦除干净就会返回擦除错误)。下面我们来看一下K60 RM中的一段指令描述:

image

    从上图我们可以看到,K60有三个“Read 1s”命令,分别为Read 1s Block(验证某块是否被擦除)、Read 1s Section(验证某段区域是否被擦除)和Read 1s All Blocks(验证所有的块是否被擦除)。至于这几个命令的用处可就大了,在高安全领域的应用,假入我们想写一些重要敏感的数据到某段Flash区中,在对flash擦除之后,为了保险起见可以启动这个命令对擦除的区域进行验证,只有完全擦除了才能写进去,不然擦除的时候漏掉某个地址的字节,而这个字节数据又恰好要被用到,那就有可能发生错误。至于其他应用,靠大家自己去琢磨了,呵呵。

    这里我只是简单的说了说这个Read 1s命令,如果大家不理解可以去Kinetis RM上去慢慢啃慢慢理解,当然也欢迎博客下面留言,欢迎交流。不多说了,再聊,未完待续~