问题引入:不知道你会不会有这样的疑问:为什么在发送解锁命令时,我们不用右移一位,而发送扇区地址时却要右移一位(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位数据。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 《走进SAP(第2版)》——第2章 企业软件的SAP之路2.1 企业资源计划(ERP)...
  2. uwsgi bind(): Permission denied [core/socket.c line 230]
  3. 如果检测指定的Windows服务是否启动
  4. vue打包完index.html空白,解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题-20210315083204.pdf-原创力文档...
  5. wince 6.0 嵌入式开发指导
  6. Python数据挖掘与机器学习技术入门实战
  7. python下载晚上excel_Python自动操控excel,一小时解决你一天的工作
  8. 数据结构之图的存储结构:十字链表法
  9. Spark RDD、DataFrame原理及操作详解
  10. python输出生日程序_Python中:利用七段数码管输出自己的生日及系统当前时间
  11. oracle时间间隔分钟数,如何掌握Oracle 中的时间间隔型数据
  12. ssh连接Linux很慢,且ssh传输文件很慢的解决方案
  13. 学生宿舍管理项目开发计划书_第六组学生宿舍管理系统项目计划书
  14. 移动端的头部标签和meta
  15. C# 获取结构体长度 指针转结构体 指针转结构体数组
  16. vue 实例化几种方式_第二节:Vue实例化
  17. 教你撸一个网页聊天室
  18. 一文带你读懂点击劫持详解+实验
  19. ae绘图未指定错误怎么办_设计高手总结47个快捷键50个CAD使用技巧,助你神速绘图拒绝加班!...
  20. 单点登录与第三方登录 + CSRF-XSS-DNS-DDOS-SQL攻击

热门文章

  1. C# 不支持关键字: “.;database”。
  2. 基于RBAC模型的通用企业权限管理系统
  3. 教师计算机网络培训工作总结,教师培训工作的自我总结
  4. 启航考研计算机课程,计算机考研专业课如何备考
  5. 为什么linux的新得立软件下载,linux,debian_蝶变(Debian)_Xfce_新立得软件管理_安装不上软件了,怎么处理?,linux,debian - phpStudy...
  6. 825. 适龄的朋友
  7. 《MySQL——加锁规则(待补全,有些没看懂)》
  8. LeetCode 206. 反转链表 思考分析
  9. ruby array_Ruby中带有示例的Array.cycle()方法
  10. Java Collections list()方法与示例