• Flash的不同位宽与CPU地址线的接线问题?


    一般Flash都有8、16、32等这些不同的位宽,当然说白了就是Flash的数据线位数。

    在Flash与CPU的地址线的连接问题时:不同位宽的有不同的连接方法:

    一般是:位宽为8时CPU的ADDR0与Flash的A0相连,其他的按顺序依次往下连接;

               位宽为16时CPU的ADDR1与Flash的A0相连,其他的按顺序依次往下连接;

               位宽为32时CPU的ADDR2与Flash的A0相连,其他的按顺序依次往下连接;

     

    怎么对应起来的呢?    参考博客:http://blog.csdn.net/linweig/article/details/5556819

    以位宽为16的Flash为例:

    所以此时的连线是:CPU的ADDR1与Flash的A0相连,其他的按顺序依次往下连接;

    以CPU读操作为例:

    CPU想进行8位操作时,它将16位数据中的高8位或者低八位返给CPU;
    CPU想进行16位操作时,它直接把这16位数据返给CPU;
    CPU想进行32位操作时,它发起2次读操作,把结果组合成32位返回给CPU。

    当然有人会问:他怎么知道把低八位或者高八位数据返给CPU,怎么把两个16位数据组成32位数据给CPU呢?

    因为有个中间层被称为“Memory Controller”,CPU要进行读写操作时,“Memory Controller”根据NOR FLASH的位宽和CPU读写操作的位数

    来进行上面的操作。

    “Memory Controller”会帮助我们做这些事情,举例为证:
    1. 软件要读取地址0上的8位数据时,硬件是这样进行的:
      ① “Memory Controller”发出0b000000000000000000000的地址信号,NOR FLASH的A0-A19线上的信号是:0b00000000000000000000
      ② NOR FLASH在数据总线D0~D15上提供一个16位的数据,这是NOR FLASH中的第1个“最小数据单元” 
      ③ “Memory Controller”读入这个16位数据
      ④ “Memory Controller”把这个16位数据的低8位返回给CPU,这就是一个8位数据。

    2. 软件要读取地址1上的8位数据时,硬件是这样进行的:
      ① “Memory Controller”发出0b000000000000000000001的地址信号,NOR FLASH的A0-A19线上的信号是:0b00000000000000000000
      ② NOR FLASH在数据总线D0~D15上提供一个16位的数据,这是NOR FLASH中的第1个“最小数据单元” 
      ③ “Memory Controller”读入这个16位数据
      ④ “Memory Controller”把这个16位数据的高8位(注意,前面的低8位)返回给CPU,这就是一个8位数据。

    3. 软件要读取地址2上的8位数据时,硬件是这样进行的:
      ① “Memory Controller”发出0b000000000000000000010的地址信号,NOR FLASH的A0-A19线上的信号是:0b00000000000000000001
      ② NOR FLASH在数据总线D0~D15上提供一个16位的数据,这是NOR FLASH中的第2个“最小数据单元” 
      ③ “Memory Controller”读入这个16位数据
      ④ “Memory Controller”把这个16位数据的低8位返回给CPU,这就是一个8位数据。

     

    对于操作其他的位数,大致与上面是一样的。

     

  • 相关阅读:
    Linux安装nginx
    Linux安装vsftp服务
    maven的Tomcat插件使用
    Mybatis逆向工程生成代码
    千里之行,始于足下
    java 通过反射获取注解
    天气预报需要用到的jar包
    JDBC 利用反射 配置文件
    从网页下载图片的代码
    装箱/拆箱 对象排序
  • 原文地址:https://www.cnblogs.com/deng-tao/p/5470896.html
Copyright © 2020-2023  润新知