打印

急急急!!!关于AT91SAM9260开发板的问题

[复制链接]
2547|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hrb_lingyb|  楼主 | 2007-8-14 00:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我有一块AT91SAM9260开发板,然后照着开发板一模一样又作了一块自己的开发板,除了将NAND FLASH换

成NOR FLASH之外,其它都一样。我换的NOR FLASH是KH29LV640DT-B (4M x 16bit),16位数据总线。

我使用AT91SAM9260的NCS6做NOR FLASH的片选,NCS6的BANK地址为0X7000 0000,NCS6是A13(即P13)的

外围B功能(peripheral B function).
我使用A13(PC13)做NOR FLASH的CE#。
我可以在我做的板子上下载和正确地运行U-BOOT,但它总是取得错误的NOR FLASH厂商ID号和设备ID号。

这就是我的问题。我问过我公司的一位资深硬件人员,他说我做的开发板的电路是没有问题的。
正确的厂商ID号和设备ID号都应该为0XC2,但是我获得的总是0XC。

下面是我写的关于NOR FLASH(在U-BOOT里面)的主要代码:

 
#define AT91C_SM_NWE_SETUP      (0 << 0)
#define AT91C_SM_NCS_WR_SETUP   (0 << 8)
#define AT91C_SM_NRD_SETUP      (0 << 16)
#define AT91C_SM_NCS_RD_SETUP   (0 << 24)
#define AT91C_SM_NWE_PULSE      (5 << 0) //lingyb Write
#define AT91C_SM_NCS_WR_PULSE   (7 << 8) //lingyb cs Write
#define AT91C_SM_NRD_PULSE      (5 << 16) //lingyb Read
#define AT91C_SM_NCS_RD_PULSE   (7 << 24) //lingyb cs Read
#define AT91C_SM_NWE_CYCLE      (12 << 0) //lingyb Write
#define AT91C_SM_NRD_CYCLE      (12 << 16) //lingyb Read
#define AT91C_SM_TDF            (1 << 16)
 
#define FLASH_BASE              0x70000000
typedef volatile unsigned char vu_char;
 
unsigned long nor_init (void)

 vu_char* addr; 
 
  /* Configure SMC CS6 */
  AT91C_BASE_SMC->SMC_SETUP6 = (AT91C_SM_NWE_SETUP | AT91C_SM_NCS_WR_SETUP |
                                AT91C_SM_NRD_SETUP | AT91C_SM_NCS_RD_SETUP);
                                                               
  AT91C_BASE_SMC->SMC_PULSE6 = (AT91C_SM_NWE_PULSE | AT91C_SM_NCS_WR_PULSE |
                                AT91C_SM_NRD_PULSE | AT91C_SM_NCS_RD_PULSE);
 
  AT91C_BASE_SMC->SMC_CYCLE6 = (AT91C_SM_NWE_CYCLE | AT91C_SM_NRD_CYCLE);
 
  AT91C_BASE_SMC->SMC_CTRL6 = (AT91C_SMC_READMODE | AT91C_SMC_WRITEMODE |
                               AT91C_SMC_NWAITM_NWAIT_DISABLE | 
                               AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS | AT91C_SM_TDF);
 
 /* enable the nor flash chip select */
 AT91C_BASE_PIOC->PIO_PDR = AT91C_PIO_PC13;
 AT91C_BASE_PIOC->PIO_BSR = AT91C_PIO_PC13;
 
printf("AT91C_BASE_PIOC->PIO_ABSR & AT91C_PIO_PC13=0x%x  ",AT91C_BASE_PIOC->PIO_ABSR & 

AT91C_PIO_PC13);//lingyb
printf("AT91C_BASE_PIOC->PIO_PSR & AT91C_PIO_PC13=0x%x  ",AT91C_BASE_PIOC->PIO_PSR &  

AT91C_PIO_PC13 );//lingyb
 
    /* get manufacturer ID and device ID */
    addr = (vu_char*)FLASH_BASE;
  addr[0x555] = 0xAA;
  addr[0x2aa] = 0x55;
  addr[0x555] = 0x90;
  ID_manuf  = (ulong)addr[0];
  ID_device = (ulong)addr[1];
  /* restore read mode */
  addr[0x0000] = 0xF0;
 
printf("Manuf. ID @ 0x%08lx: 0x%08lx ", (ulong)addr, ID_manuf);
printf("Device ID @ 0x%08lx: 0x%08lx ", (ulong)(&addr[1]), ID_device);
 
}

我实在是找不到是哪里出错了?难道是还有什么寄存器我没有设置?或者是SMC_PULSE6 和 SMC_CYCLE6的
时序我没有设对?我已经试过了SMC_PULSE6 和 SMC_CYCLE6时序的很多种组合,但获得的厂商ID总是0XC


有哪位大侠能帮到我吗,真的是非常感激!!!

相关下载

相关帖子

沙发
wangkj| | 2007-8-14 07:03 | 只看该作者

md 10000000

if all date is 0xff?

使用特权

评论回复
板凳
szembed| | 2007-8-14 07:51 | 只看该作者

nor flash接到片选6?

nor flash接到片选6?

那就要重新培植这个片选6了,这个里面配置起来比较麻烦。

使用特权

评论回复
地板
hrb_lingyb|  楼主 | 2007-8-14 08:49 | 只看该作者

szembed,非常感谢您的回复!!

szembed:
   非常感谢您的回复。那您能不能指导一下怎么配置这个NCS6呢?因为我们的硬件已经作出来了,可能不好改了。谢谢!

使用特权

评论回复
5
hrb_lingyb|  楼主 | 2007-8-14 08:54 | 只看该作者

wangkj,感谢您的关注

md 命令的结果如下

md 10000000
30003000 39bc39bc 39bc39bc 39bc39bc 
 39bc39bc 39bc39bc 39bc39bc 39bc39bc
 .... ......... ...... ......  ...
 39bc39bc 39bc39bc 39bc39bc 39bc39bc


md 70000000
 39bc39bc 39bc39bc 39bc39bc 39bc39bc
 39bc39bc 39bc39bc 39bc39bc 39bc39bc
 .... ......... ...... ......  ...
 39bc39bc 39bc39bc 39bc39bc 39bc39bc

使用特权

评论回复
6
wangkj| | 2007-8-14 09:06 | 只看该作者

nor flash没配置的前提下读出来的都是ff

如果不是,可能你的硬件连接有问题!
这是9200的经验,如果是9260的话不知道是不是这样。

使用特权

评论回复
7
hrb_lingyb|  楼主 | 2007-8-14 14:38 | 只看该作者

to wangkj

wangkj:
   我在我的板子上试过,md 70000000 和 md 40000000 得出的结果都是一样的:
39bc39bc 39bc39bc 39bc39bc 39bc39bc
39bc39bc 39bc39bc 39bc39bc 39bc39bc
.... ......... ...... ......  ...
39bc39bc 39bc39bc 39bc39bc 39bc39bc
其中40000000是NCS3的BAND地址,而NCS3是NAND FLASH专用的片选。我们没有装上
NAND FLASH,NCS3是空闲的

使用特权

评论回复
8
wangkj| | 2007-8-14 14:59 | 只看该作者

0XC2,但是我获得的总是0XC??

你得到的是多少?
增加调试语句:得到类似结果,然后猜测原因
Manufacturer ID: 0089
Manufacturer: Intel (not supported yet)
Device ID: 0018
Unknown Device ID: 0018
还有就是ncs的配置寄存器的值是否正确。
可能是这的原因。

使用特权

评论回复
9
hrb_lingyb|  楼主 | 2007-8-16 21:00 | 只看该作者

感谢各位的关注

非常感谢各位的关注,这个问题我请教了另一位高深人士,现在已解决。
现把一些关键信息给出如下:
该高深人士只是改了一下时序,同时又将vu_char改为vu_short问题就解决了,
说是什么A0地址线没使用,输入0XAAA到总线上就变成0X555。目前问题虽已
解决,但其中的道理我还没弄懂。但由于别的事情太忙,所以弄懂这个原理
就得等到以后较清闲时再做了。谢谢各位的关注!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

1

粉丝