norflash芯片手册command如下:

下面是2240对norflash的 一些操作:

擦除:

烧录:

读取:

问1:同样是操作norflash,为什么cpu发出norflash芯片手册中解锁等命令时,传参时addr不需要右移,cpu烧录起始地址或发送要擦除扇区地时就得右移呢

注意:nor_cmd函数里已经左移一位了

答1:

我们通过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的时候就直接把地址发送出去而不用左移一位呢,这就和cpu内存控制器有关了)

总结就是角度不同,发送扇区地址的时候,我们是站在cpu内存控制器位筛选后的角度,即此时我们将norflash看做2M * 8bit,而NOR FLASH的芯片手册中的解锁功能是站在norflash自己的角度来要求CPU地址总线发出地址的,它自认为自己是1M * 16bit

问2:(addr >> 1) << 1 可能会丢位

提前右移一位以抵消左移的操作,即(addr >> 1) << 1 ,举个例子:
假如我们想把0x11作为起始烧录地址
addr = 0x11 , 则 ((addr >> 1) << 1) = 0x10
细心点会发现,哎?右移一位导致丢位了啊!!
再看
addr = 0x10 , 则 ((addr >> 1) << 1) = 0x10
也就是说,输入addr=2或3(CPU角度的 norflash 为 2M * 8bit),起始烧录地址都对应 1M * 16bit 的 norflash的1(本来是 1 0 ,但 norflash 的 A0 接了CPU的 A1)
为什么要限制?

答2:(注意:为方便说明,我们将起始内存单元称之为第零个内存单元)

之所以这样,是因为我们操作的norflash 是16bit 宽度的,连接如下,可以发现是错位连接的


这是一种好的烧录习惯,作此限制可以保证我们的起始烧录地址或起始擦除地址是16bit 对齐的

问3:为什么把NOR看成是2M * 8bit进行读取访问的时候就直接把地址发送出去而不用左移一位呢

答3:

针对问题3,**内存控制器**绝对是劳苦功高: 示意图如下:

addr = 0x11 由于norflash的A1接CPU的A0,所以norflash看到的实际上是它1M *16bit的第1个16bit单元,在数据经内存控制器返回CPU时,内存控制器用A0=1,去挑出nor第一个16bit的低8位(注意:这里的示意图为低位在前,仅为了方便观察;实际也有可能是高位在前,如果是高位在前,则内存控制器用A0=1,去挑出nor第一个16bit的高8位)
我们将16bit位宽的norflash看做2M * 8bit, addr = 0x11 ,我们也的确访问到了norflash第3个8bit单元
同理,假如addr = 0x10,我们也的确访问到了2M * 8bit的norflash的第2个8bit单元
所以,这种错位连接实际上保留了内存控制器选择内存单元的权利,即:内存控制器利用被错开的A0去选择内存单元的高低位。

本文参考了韦东山老师的讲解已及关于NOR FLASH地址左右移的问题,特此感谢
如有问题,欢迎评论区指出批评。

辨析NOR FLASH地址左右移的问题相关推荐

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

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

  2. LeetCode 1427. 字符串的左右移

    文章目录 1. 题目 2. 解题 1. 题目 给定一个包含小写英文字母的字符串 s 以及一个矩阵 shift,其中 shift[i] = [direction, amount]: direction ...

  3. 【LeetCode】1427、字符串的左右移

    [声明] 如果有侵权,请联系作者删除侵权部分. 如果有错误,请联系作者修改错误部分. 如果有转载,请标明出处. [难度] 简单 [题目] 给定一个包含小写英文字母的字符串 s 以及一个矩阵 shift ...

  4. 使用PHP提取视频网站页面中的FLASH地址

    这几天工作中需要写个程序对于一个视频网站地址,如优酷的某个地址,提取出其中的FLASH地址来. 然后我用PHP实现了这个功能,我觉得用PHP来做这项工作简直是一种享受!使用其提供的强大的HTML页面处 ...

  5. html flash地址,PHP如何实现将视频html地址转换成flash swf地址

    PHP如何实现将视频html地址转换成flash swf地址 发布时间:2021-06-22 14:55:41 来源:亿速云 阅读:52 作者:小新 这篇文章主要介绍了PHP如何实现将视频html地址 ...

  6. 字符串循环左|右移实现(C|C++)

    一.字符串循环右移K位 (1)图解思考 (2)代码实现 时间复杂度O(n) | 空间复杂度O(1) // 三次翻转实现 #include <iostream> #include <c ...

  7. 为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程

    STM32F103ZE芯片存储空间的地址映射关系图. 在MDK编译程序设置ROM和RAM地址时候发现: IROM1为片上程序存储器,即片上集成的Flash存储器,对该处理器Flash大小为512KB, ...

  8. RISC-V MCU将常量定义到指定的Flash地址 -- 以CH32V103为例

    Keil MDK开发ARM 内核的MCU时,将常量定义到指定的Flash地址中,使用 _attribute_( at(绝对地址) )即可,如: const u32 myConstVariable_1[ ...

  9. STM32从Flash地址0x08000000的启动重映射

    在初写STM32程序时,遇到一个困惑,STM32的Flash在MDK里被设置为起始地址0x0800 0000,而CM3手册规定芯片复位时要从0x0000 0000地址开始取出中断向量 ,那STM32怎 ...

  10. 简单获取各大视频网站的flash地址

    最近做网站的时候遇到一个需求:给定一个视频地址,获取它的swf地址.例如,给一个优酷的视频地址:http://v.youku.com/v_show/id_XNDg4MzY5ODU2.html,想获取它 ...

最新文章

  1. PyTorch之前向传播函数自动调用forward
  2. java 写日志太快_Log4j2 快速入门 —— 定期/定大小生成日志文件(三)
  3. 利用 BASE64Encoder 对字符串进行加密 BASE64Decoder进行解密
  4. jquery file upload ajax上传图片 简单使用
  5. Why with_indobjects is not available in product search
  6. 一个男人关心的东西决定他的层次(转)
  7. lds天线技术流程图_音箱耳机入门,蓝牙真无线耳机中的LDS天线 「Soomal」
  8. 前端学习(2947):node.js使用
  9. 【学习笔记】数据链路层——随机访问介质访问控制(ALOHA、CSMA、CSMA/CD、CSMA/CA),截断二进制指数规避算法
  10. donotage标记、MTU及MTU不匹配问题、OSPF邻居状态记录
  11. python中的内置函数返回元素_Python内置函数_________用来返回数值型序列中所有元素之和。...
  12. Java之品优购部署_day01(10)
  13. gps高斯utm_UTM坐标系统与高斯
  14. whale 帷幄:数字化营销运营 全渠道数字化精益营销管理平台
  15. sql根据经纬度计算距离
  16. mac常见问题(二) MAC需要安装杀毒软件吗?
  17. 全球及中国军用海岸雷达行业研究及十四五规划分析报告
  18. OBB包围盒及其碰撞检测算法(一)
  19. java基于ssm的论坛贴子网站ssm论坛项目发帖子网站论坛系统论坛源码
  20. 专业系统维护:CleanMyMac X for mac

热门文章

  1. 架构 理论 定律 总结
  2. 安卓源码目录最全解析
  3. 2019银保监计算机类真题,2019中国银保监会招聘考试全真模拟卷(计算机类)
  4. shell 值判断,大于0,等于0,小于0,大于等于0,小于等于0,不等于0
  5. 【Zookeeper面试篇】什么是羊群效应,公平锁怎么实现
  6. kubernetes-dashboard v2.0.0-beta3 部署
  7. request域中放入参数几种方法
  8. VS2008当前页面脚本发生错误
  9. BitTorrent 原理简介
  10. godaddy域名转入步骤