Nor Flash电路与驱动程序

1.Nor Flash电路详情

8位的flash( HY29F040是现代公司的一款8-BIT的NOR FLASH)与CPU连接:

从图上可以看出,A0连接A0,相当于An连接An,没有错位连接。

对于16位的Flash( SST39VF160是SST公司的一款16-BIT的NOR FLASH),CPU的A0是没有连接的,相当于被屏蔽掉了,原因何在????????
原因便是对于16位的flash,每次flash收到一个地址,便将该地址的16bit通过D15-D0给CPU,此外ARM的一个地址对应的是一个BYTE,这个
BYTE的意思就是每次ARM发一次数据,就只读一个byte。那么A1与A0连接,正好。

补充说明:

  1。  一般来说,ARM处理器内部要设置相应的寄存器,告诉处理器外部扩展的FLASH的位宽(8-BIT/16-BIT/32-BIT) 。这样,处理器才知道在访问的时候如何从FLASH正确的读取数据。

  2。  有些ARM处理器内部可以设置地址的错位。对于支持软件选择地址错位的处理器,在连接16-BIT FLASH的时候,硬件上可以不需要把地址线错位。读者设计的时候,请参考MCU的数据手册,以手册为准,以免造成不必要的麻烦。

  3。  如果处理器支持内部设置地址错位,在实际访问的时候,送出的地址实际上是在MCU内部做了错位处理,其作用是等效于硬件连接上的错位的。





下面两个例子不错:

例子 1:ARM处理器需要从地址 0x0 读取一个 BYTE

  1 - ARM处理器在地址线An-A0上送出信号0x0;

  2 – 16-BIT FLASH在自己的地址信号An-A0上看到的地址是0x0,然后将地址0x0对应的16-BIT数据单元输出到D15-D0上;

  3 – ARM处理器知道访问的是16-BIT的FLASH,从D7-D0上读取所需要的一个BYTE的数据;

例子 2:ARM处理器需要从地址 0x1 读取一个 BYTE

  1 - ARM处理器在地址线An-A0上送出信号0x1;

  2 – 16-BIT FLASH在自己的地址信号An-A0上看到的地址依然是0x0, 然后将地址0x0对应的16-BIT数据单元输出到D15-D0上;

  3 –ARM处理器知道访问的是16-BIT的FLASH,从D15-D8 上读取所需要的一个BYTE 的数据;














2.下面从两个阶段解剖Nor Flash驱动

1.bootloader阶段
/*
 *************************************************************************
 *
 * Jump vector table as in table 3.1 in [1]
 *	1.set SVC mode
 *	2.关看门狗
 *	3.屏蔽所有中断
 *	4.初始化SDRAM
 *	5.设置堆栈
 *	6.设置时钟
 *	7.将代码从nor flash拷贝到SDRAM
 *	8.跳转到start_armboot
 *************************************************************************
 */
这是uboot启动汇编代码过程,在第7步骤之前,代码都是在nor flash里边执行的,当然nor flash支持代码执行,不用将程序复制到RAM里边。
同时在bootloader里边,暂时还不是操作系统环境,所以对flash的读写最终就是下面这样操作:
#define __arch_getb(a)			(*(volatile unsigned char *)(a))//读
#define __arch_getw(a)			(*(volatile unsigned short *)(a))
#define __arch_getl(a)			(*(volatile unsigned int *)(a))

#define __arch_putb(v,a)		(*(volatile unsigned char *)(a) = (v))//写
#define __arch_putw(v,a)		(*(volatile unsigned short *)(a) = (v))
#define __arch_putl(v,a)		(*(volatile unsigned int *)(a) = (v))










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值