打印

s3c2410 与cs8900的问题

[复制链接]
4278|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hero415|  楼主 | 2007-12-13 16:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位,大虾,我做了一块2410的板,s3c2410 与cs8900的电路和三星开发板一样,
s3c2410 a0-a19-----------cs8900 sa0-sa19
        d0-d15-----------       d0-d15
        a24做IO/MEM方式的控制线。
        ngcs3-------------------alen
现在有些疑惑,
1.我在初始化s3c2410的时候,将bank3初始化为8位还是16位数据宽度呢?
2.初始成16位,好像应该将s3c2410的a1-a20和cs8900的sa0-sa19接在一起吧?
3.初始成8位数据宽度,单字节操作又很麻烦?
不知道各位是如何处理的,谢谢啦!

相关帖子

沙发
阿南| | 2007-12-13 18:46 | 只看该作者

参考一下:

void Test_CS8900(void){
    rBWSCON = rBWSCON & ~(0xf << 12) | (0xd << 12);//nGCS3=nUB/nLB(sSBHE),nWAIT,16-bit
    rBANKCON3 = (0 << 13) | (3 << 11) | (7 << 8) | (1 << 6) | (0 << 4) | (3 << 2) | 0;
    EthPPP = 0;
    Uart_Printf("CS8900A ChipID1 is %x ", EthPPD0);//打印ID
    EthPPP = 2;
    Uart_Printf("CS8900A ChipID2 is %x ", EthPPD0);
}

使用特权

评论回复
板凳
hero415|  楼主 | 2007-12-14 09:23 | 只看该作者

thanks

谢谢阿南斑竹。我这就试一下。

使用特权

评论回复
地板
lvivik| | 2007-12-14 14:20 | 只看该作者

请教

看到你的笔记了。我现在正在研究s3c2410板子上的vivi,内核,文件系统的移植,由于板子是我们自己做的,不是公司提供的开发板,所以在移植过程中出现了很多的问题,还请多多阿南斑竹多多指教啊!!
我们硬件的设计跟原开发板差不多,没有usb,我在移植的过程中用的是开发板中提供的vivi,内核镜像和文件系统镜像,但是启动的时候不断的报错说找不到usb,于是我在源程序中将关系usb存储设备的注释掉了,结果编译后,移植,启动报错:

使用特权

评论回复
5
hero415|  楼主 | 2007-12-18 09:45 | 只看该作者

还是不行啊,老大

这几天看了一些资料,
反复试过了各种设置,如总线宽度,时钟周期,cache等,还是读不出来,郁闷!代码如下,请各位指点一下小弟。一般情况显示id=0x62,真郁闷。

#define CS8900_BASE (0x18000000+1<<24+0x0300)

#define CS8900_REG U16
#define CS8900_OFF 0x02
  
#define CS8900_BUS16_0  *(volatile U16 *)(CS8900_BASE+0x00)
#define CS8900_BUS16_1  *(volatile U16 *)(CS8900_BASE+0x01<<1)

  
  #define CS8900_RTDATA *(volatile U16 *)(CS8900_BASE+0x00*CS8900_OFF)
#define CS8900_TxCMD  *(volatile U16 *)(CS8900_BASE+0x02*CS8900_OFF)
#define CS8900_TxLEN  *(volatile U16 *)(CS8900_BASE+0x03*CS8900_OFF)
#define CS8900_ISQ    *(volatile U16 *)(CS8900_BASE+0x04*CS8900_OFF)
#define CS8900_PPTR   *(volatile U16 *)(CS8900_BASE+0x05*CS8900_OFF)
#define CS8900_PDATA  *(volatile U16 *)(CS8900_BASE+0x06*CS8900_OFF)
#define ISQ_RxEvent     0x04
#define ISQ_TxEvent     0x08
#define ISQ_BufEvent    0x0C
#define ISQ_RxMissEvent 0x10
#define ISQ_TxColEvent  0x12
#define ISQ_EventMask   0x3F

/* bus interface registers */
#define PP_ChipID    0x0000  /* Chip identifier - must be 0x630E */
#define PP_ChipRev   0x0002  /* Chip revision, model codes */



/* packet page register access functions */

unsigned short get_reg_init_bus (int regno)
{
    /* force 16 bit busmode */
    volatile unsigned short c;

    c = CS8900_BUS16_0;
    c = CS8900_BUS16_1;
    c = CS8900_BUS16_0;
    c = CS8900_BUS16_1;
    c = CS8900_BUS16_0;

    CS8900_PPTR = regno;
    c=(unsigned short) CS8900_PDATA;
    Uart_Printf(" cs8900a id=%x",c);
    return (c) ;
}

unsigned short get_reg (int regno)
{
    CS8900_PPTR = regno;
    return (unsigned short) CS8900_PDATA;
}


void put_reg (int regno, unsigned short val)
{
    CS8900_PPTR = regno;
    CS8900_PDATA = val;
}


int CMDnetid(int argc, char *argv[])
{
//    rBWSCON = rBWSCON & ~(0xf << 12) | (0x09<< 12);//nGCS3=nUB/nLB(sSBHE),nWAIT,16-bit
//    rBANKCON3 = (0 << 13) | (3 << 11) | (7 << 8) | (1 << 6) | (0 << 4) | (3 << 2) | 0;

    Uart_Printf(" mmu init");
    MMU_Init();
    
    rBWSCON=(rBWSCON & 0xffff0fff) |0x00009000;
    rBANKCON3=0x00000700;

    if (get_reg_init_bus (PP_ChipID) != 0x630e) 
    {
        Uart0_Printf (" CS8900 Ethernet chip not found?!");
        return ;
    }
    else
        {
        Uart0_Printf (" CS8900 Ethernet chip have found!");
        }

    return 0;
}

使用特权

评论回复
6
hero415|  楼主 | 2007-12-18 14:42 | 只看该作者

这一段代码,可以了

#define CS8900_BASE    (*(volatile unsigned short*)0x19000000)
#define EthIOAddr       (*(volatile unsigned short*)0x19000300)
#define EthPPP          (*(volatile unsigned short*)0x1900030a)
#define EthPPD0         (*(volatile unsigned short*)0x1900030c)
void Test_CS8900(void){
    rBWSCON = rBWSCON & ~(0xf << 12) | (0xd << 12);         //nGCS3=nUB/nLB(sSBHE),nWAIT,16-bit
    rBANKCON3 = (0 << 13) | (3 << 11) | (7 << 8) | (1 << 6) | (0 << 4) | (3 << 2) | 0;
    EthPPP = 0;
    Uart_Printf("CS8900A ChipID1 is %x ", EthPPD0);//打印ID
    EthPPP = 2;
    Uart_Printf("CS8900A ChipID2 is %x ", EthPPD0);
}
在论坛里搜了一下,用阿南斑竹的一小段代码,可以读出id1=630e,id2=a00,
但是根据手册,id2的值有点对不上,
B version 0 0111=>ID2=0700
C version 0 1000=>ID2=0800
D version 0 1001=>ID2=0900
有点奇怪,不知道是手册有误,还是最新其他版本?

使用特权

评论回复
7
阿南| | 2007-12-18 16:45 | 只看该作者

re lvivik:好像给您回过邮件了吧

re hero415:id2=a00,应该是正确的,其它版本的

使用特权

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

本版积分规则

4

主题

14

帖子

0

粉丝