阅读:5634回复:4
DM9000读取ID失败
EBOOT中在初始化DM9000之前读取其ID一直返回0,下面是程序:
#define BANK 0xA6000000 //系统将片选3连接AEN,此为映射后虚拟地址 #define IOBase (BANK | 0x300) //电路是把SA8和SA9接高电平,SA4-SA7接地,SPEC上有“SA6-SA4 are matched with strap pins TXD2-0。。。”,有点不明白。。。 #define DataBase (BANK | 0x304) uint8 ReadReg(uint8 offset) { *((volatile uint8 *)(IOBase)) = (uint8)(offset); return ((uint8)*((volatile uint8 *)(DataBase))); } int32 Probe(void) { uint32 id; id = ReadReg(0x28) << 0; id |= ReadReg(0x29) << 8; id |= ReadReg(0x2A) << 16; id |= ReadReg(0x2B) << 24; //这里id应该是0x90000A46 return id; } 开发板是周立功的2410开发板,用其提供的启动代码DM9000可以实现下载操作,我想硬件电路应该没有问题吧。。。由于他们不提供源码,我从网上下的关于DM9000的源码,正在研究中,可是现在ID都读不通,读写寄存器都不行:(,哪位兄弟可以帮忙指点一二? |
|
沙发#
发布于:2008-10-22 21:47
奇怪的事情发生了,我用nGCS1的地址(物理地址0x08000300对应的虚拟地址)读ID居然能返回0x2b2a2928,虽然也不对,但是好象是把片内的地址读出来了,网上搜了一下,读出这个值只要修改延时就可以了,现在还不清楚怎样修改,不过我是更糊涂了。。。。郁闷!
|
|
板凳#
发布于:2008-10-23 15:13
仔细研究了一下SPEC,可能是memory controller关于片选3的参数导致这个问题,主要的应该是BWCON和BANKCON3这两个寄存器,目前的设置如 :
BWCON中:ST3=1, WS3=1,DW3=16bits宽 BANKCON3=0x1F7C 简略的看了一下SPEC,不是很明白为什么这么设置,哪位兄弟能否告知这样的设置正确吗? 继续研究中。。。 |
|
地板#
发布于:2008-10-28 15:10
uint8 ReadReg(uint8 offset)
{ *((volatile uint8 *)(IOBase)) = (uint8)(offset); return ((uint8)*((volatile uint8 *)(DataBase))); } 这个函数里面写IOBase和读DataBase之间要加延时的吧, DM9000A的寄存器读取要这样子的 第一步把reg地址位写入dm9000A index端口(即CPU片选地址+0x300) 第二步从DM9000A数据端口读写register的值 中间肯定要加一个延迟的吧 |
|
地下室#
发布于:2011-12-02 17:21
爱欣文科技有限公司提供免费得技术支持,如果有需要我们可以相互探讨。mail:bab_ren@axwdragon.com T:134 2896 8359
|
|
|