关于NOR FLASH地址左右移的问题

问题引入:不知道你会不会有这样的疑问:为什么在发送解锁命令时,我们不用右移一位,而发送扇区地址时却要右移一位(nor_cmd函数内部已经左移一位),这里先补充说明一下说明是cpu角度和nor角度:

cpu角度: CPU访问的最小单元是byte ,在它眼里我们的NOR FLASH是2M * 8bit
nor角度: 我们的NOR FLASH是16位宽的,最小单元是2byte,所以它认为它自己是1M * 16bit的

我们通过NOR FLASH的芯片手册得知,要实现解锁功能:要往地址0X555写入0XAA等等几个操作,因为我们是通过NOR的手册查看到的,那么这里肯定是从NOR角度看到的地址,也就是说我们要往第0X555个16位的地址里写入0XAA,因为地址线是错开的缘故,我们CPU必须把地址左移一位后再发生给NOR,这样才能真正地把0XAA写到NOR的第0X555地址里去。

 

而发送扇区地址的时候,因为我们人操纵的是CPU,所以我们的角度和CPU是一样的,我们也认为NOR是2M * 8bit,而不是1M * 16bit,比如我们要清除地址为0X001F0000时,0X001F0000代表的是第0X001F0000个8bit的地址,因为地址线是错开的原因,我们直接发送CPU角度的地址出去就好,但又因为nor_cmd函数里已经左移一位了,所以我们要提前右移一位以抵消左移的操作。(为什么把NOR看成是2M * 8bit的时候就直接把地址发送出去而不用左移一位呢,请看下面的“参考”)

 

参考

ARM与16位宽的NOR FLASH的连接, NOR FLASH地址线 (A0-A19),处理器的地址线要(A1-A20),即错开一位。
当软件要读取地址3上的8位数据时,硬件是这样进行的:
① "Memory Controller"发出0b0011的地址信号,NOR FLASH的A0-A19线上的信号是:0b001
② NOR FLASH在数据总线D0~D15上提供一个16位的数据,这是NOR FLASH中的第2个"最小数据单元"
③ "Memory Controller"读入这个16位数据
④ "Memory Controller"把这个16位数据的高8位返回给CPU,这就是一个8位数据。

 

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
NAND flash和NOR flash是两种不同类型的闪存技术。 NAND flash是一种高数据存储密度的解决方案,适用于存储大量数据的应用。它的读取是以一次读取一块的形式进行,通常一次读取512个字节。由于采用了较为廉价的技术,NAND flash在生产成本上具有优势。然而,用户不能直接在NAND flash上运行代码,因此很多使用NAND flash的开发板会添加一个小的NOR flash来运行启动代码。 相反,NOR flash具有与我们常见的SDRAM类似的读取方式,用户可以直接运行存储在NOR flash中的代码。因此,NOR flash可以减少SRAM的容量,从而节约成本。然而,NOR flash的写入和擦除速度较慢,这在性能上存在一定的局限性[3]。 综上所述,NAND flash和NOR flash在存储方式、读取方式和性能上有所不同,适用于不同的应用场景。NAND flash适用于需要高数据存储密度的应用,而NOR flash适用于需要直接运行存储在闪存中的代码的应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [NAND flash和NOR flash的区别详解](https://blog.csdn.net/sonbai/article/details/8453349)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值