一般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位数据。

 

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