在s3c2440数据手册中如图所示:
外设Flash数据位宽为8bit时,(Memory Cotroller 的地址线 )A0——A0(外设Flash 的A0);
外设Flash数据位宽为16bit时,(Memory Cotroller 的地址线 )A1——A0(外设Flash 的A0);
外设Flash数据位宽为32bit时,(Memory Cotroller 的地址线 )A2——A0(外设Flash 的A0);
原因:
CPU的地址线(LADDR0~LADDR20)对应的最小数据单元是字节,即8bit;
在实际应用中,所用到的外设Flash 通常数据位宽有8bit、16bit、32bit,CPU要按照8bit的数据位宽准确获取数据,肯定就是CPU和Flash 存在中间层解决了这个问题,就是Memory Controller 。
根据外设Flash的数据位宽,通过硬件处理,按照每个地址读取8bit的数据处理方式。如数据位宽16bit的NOR Flash,如图所示:
一、从Nor flash读取数据
1、每次获取1byte数据
a、当CPU要获取地址 0 上的数据时,Memery Controller发出地址0b00000000000000000000,NOR Flash 收到地址0b00000000000000000000,返回数据线(LDATA0~LDATA15)上的第一个数据给CPU的Memery Controller,Memery Controller选择其中的低8位给CPU。
b、当CPU要获取地址 1 上的数据时,Memery Controller发出地址0b00000000000000000001,NOR Flash 收到地址0b00000000000000000000,返回数据线(LDATA0~LDATA15)上的第一个数据给CPU的Memery Controller,Memery Controller选择其中的高8位给CPU。
2、每次获取2byte数据
当CPU要获取地址0,1上的数据时,Memery Controller发出地址0b00000000000000000000,NOR Flash 收到地址0b00000000000000000000,返回数据线(LDATA0~LDATA15)上的第一个数据给CPU的Memery Controller,Memery Controller选择这个数据给CPU。
3、每次获取4byte数据
当CPU要获取地址0 ,1 ,2 ,3上的数据时:
a、Memery Controller发出地址0b00000000000000000000,NOR Flash 收到地址0b00000000000000000000,返回数据线(LDATA0~LDATA15)上的第一个数据给CPU的Memery Controller,Memery Controller读入这个数据。
b、Memery Controller发出地址0b00000000000000000010,NOR Flash 收到地址0b00000000000000000001,返回数据线(LDATA0~LDATA15)上的第二个数据给CPU的Memery Controller,Memery Controller读入这个数据,并把两个16bit数据组合成一个32bit的数据返回给CPU。
二、向NOR Flash写数据
1、每次写1byte数据
a、当CPU要向地址 0 上写数据时,Memery Controller发出地址0b00000000000000000000,NOR Flash 收到地址0b00000000000000000000,CPU将8bit的数据传给Memery Controller,Memery Controller将数据发送给NOR Flash数据线的低8位(LDATA0~LDATA7)。
b、当CPU要向地址 1 上写数据时,Memery Controller发出地址0b00000000000000000001,NOR Flash 收到地址0b00000000000000000000,CPU将8bit的数据传给Memery Controller,Memery Controller将数据发送给NOR Flash数据线的高8位(LDATA8~LDATA15)。
2、每次写2byte数据
当CPU要向地址 0,1上写数据时,Memery Controller发出地址0b00000000000000000000,NOR Flash 收到地址0b00000000000000000000,CPU将16bit的数据传给Memery Controller,Memery Controller将数据发送给NOR Flash数据线(LDATA0~LDATA15)。
2、每次写4byte数据
当CPU要向地址0 ,1 ,2 ,3上写数据时:
a、Memery Controller发出地址0b00000000000000000000,NOR Flash 收到地址0b00000000000000000000,CPU将32bit的数据传给Memery Controller,Memery Controller将数据低16bit发送给NOR Flash数据线(LDATA0~LDATA15)。
b、Memery Controller发出地址0b00000000000000000010,NOR Flash 收到地址0b00000000000000000001,Memery Controller将数据高16bit发送给NOR Flash数据线(LDATA0~LDATA15)。
总结:
1、外设数据位宽是8bit时,CPU的LADDR0——LADDRx与外设的LDATA0——LDATAx直接相连;
2、外设数据位宽是16bit时,CPU的LADDR1——LADDRx与外设的LDATA0——LDATAx直接相连,不管CPU的LADDR0是0还是1,外设得到的地址都是LADDR1——LADDRx,对应同一个16bit数据,Memery Controller选择或者组合这个数据;
3、外设数据位宽是32bit时,CPU的LADDR2——LADDRx与外设的LDATA0——LDATAx直接相连,当CPU的LADDR0、LADDR0是 00、01、10、11时,外设得到的地址都是LADDR2——LADDRx,对应32bit数据,Memery Controller选择或者组合这个数据。