在2416开发板上移植CS8900源代码

lan120576664 2009-11-17 09:58:01
由于三星的开发板没有带cs8900驱动
所以自己需要自己移植这部分驱动
我在2416开发板上移植cs8900到wince5.0
在PB5.0编译已经成功,并生成了cs8900.dll(在\WINDOWS目录下可以见到)
我在PB5.0的setting->build option中只选择了Enable Eboot Space in Memory这一项
(因为听人家说好像setting->build option中有一项会跟cs8900冲突)

但是在os启动后cs8900在初始化的时候失败了
从DNW中可以看到如下打印信息:
InitEthDevice Port ok.
Signature Error 0
Eisa Number Error 0
CS8900:CSInit failure!!
...全文
276 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanwenqun2 2010-06-12
  • 打赏
  • 举报
回复
帮顶了,这个很有意思
海阔任龟游 2010-06-05
  • 打赏
  • 举报
回复
路过 帮顶
lan120576664 2009-11-20
  • 打赏
  • 举报
回复
谢谢xilidecai兄的指导。本人出差了几天,一来就病倒了。下周上班再回去试试xilidecai兄的方法。
xilidecai 2009-11-18
  • 打赏
  • 举报
回复
不但不应该屏蔽,相反,我个人认为应该选起,KITL模块其初始化阶段是在OALKitlInit()函数执行过程中调用CS8900Init函数的。
换个角度说,我的板子自带的BSP是既支持CS8900又支持KITL的,这个肯定不是问题的根源。
而且从你的错误信息来看,
InitEthDevice Port ok.
Signature Error e3a0 signature成员出错,它指示启动参数的数据有效性,bootloader将其赋值为SGRA,你检查下pBSPArgs共享内存区的起始地址存放的是不是有效的启动参数数据,也就是说是不是这四个字符。这个结构体定义在在oal_args.h文件里,实现在OEMP在latformInit函数中。
Eisa Number Error 1000 这个说明检测芯片不存在,其依据是读取PacketPage中便宜地址为0的产品ID寄存器,如果读取EISA_NUMBER寄存器返回的16位数值是0X630E,择CS8900芯片存在,反之。
guopeixin 2009-11-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lan120576664 的回复:]
顶帖,不要沉下去
啊啊啊!!
[/Quote]
这两天也在搞网卡驱动,不过和你用的不一样,顶你了
lan120576664 2009-11-18
  • 打赏
  • 举报
回复
顶帖,不要沉下去
啊啊啊!!
lan120576664 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 veabol 的回复:]
你的是三星官方的BSP吗?drivers下的CS8900eboot不是吗?没研究,不清楚是不是
[/Quote]
cs8900eboot只是用与eboot下载nk用的
cs8900应该是在操作系统上用的驱动
zhujinqiang 2009-11-17
  • 打赏
  • 举报
回复
帮顶。
博说医械研发 2009-11-17
  • 打赏
  • 举报
回复
你的是三星官方的BSP吗?drivers下的CS8900eboot不是吗?没研究,不清楚是不是
zwtchy123 2009-11-17
  • 打赏
  • 举报
回复
bang ding
lan120576664 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lgy198612 的回复:]
验证bsp可不可以用,以前碰到的CS8900:CSInit failure!!就是这个问题
[/Quote]
lgy198612兄,你说“验证bsp可不可以用”的意思是??
你是说BSP包能不能够跑起来还是什么?
lan120576664 2009-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xilidecai 的回复:]
从你的打印信息看,是执行了Driver/CS8900目录下的CS8900.C文件中的
if (CSInit() == FALSE)
    {
    RETAILMSG(1, (TEXT("CS8900:CSInit failure!!\r\n")));
return FALSE;
            }
           
return TRUE;
代码。
往上推,在int CSInit()函数中,CS8900Init函数先对全局变量g_pCS8900赋值,接着检测CS8900以太网控制器芯片是否在目标平台上真是存在。接下来,函数执行两个步骤:
1.等待CS8900芯片软件复位后完成芯片的初始化
2.等待CS8900芯片外置用于存放初始化配置信息的EEPROM存储器可被访问。
忘了说一点,你的KITL启动没有?
[/Quote]
我的打印信息是
+CS8900:DriverEntry
InitEthDevice Port ok.
Signature Error e3a0
Eisa Number Error 1000
CS8900:CSInit failure!!
而在CS8900.C文件中
int CSInit()
{
// Find CS8900 chip.
if (findCS() == FALSE)
return FALSE;

DEBUGMSG(1, (TEXT("Find CS8900 OK\r\n")));

/* Reset CS8900 chip. */
if (resetCS() == FALSE)
return FALSE;

DEBUGMSG(1, (TEXT("reset CS8900 OK\r\n")));

/* Initialize CS8900 chip. */
if (initCS() == FALSE)
return FALSE;

DEBUGMSG(1, (TEXT("CS8900 init OK\r\n")));

return TRUE;
}
那就是我的cs8900的芯片是没有找到。。。
怎么会这样呢?
我用的是在没有问题的bsp包拷贝过来的cs8900驱动,开发板也成功跑人家的系统且带成功驱动了cs8900的。

还有xilidecai兄,你的“KITL启动没有”是指setting->build option中的ENABLE KITL这项是否有选么?
这一项我是没有选的呀,我听人家说kitl好像会跟cs8900冲突呢~所以没有选上。
lgy198612 2009-11-17
  • 打赏
  • 举报
回复
验证bsp可不可以用,以前碰到的CS8900:CSInit failure!!就是这个问题
xilidecai 2009-11-17
  • 打赏
  • 举报
回复
从你的打印信息看,是执行了Driver/CS8900目录下的CS8900.C文件中的
if (CSInit() == FALSE)
{
RETAILMSG(1, (TEXT("CS8900:CSInit failure!!\r\n")));
return FALSE;
}

return TRUE;
代码。
往上推,在int CSInit()函数中,CS8900Init函数先对全局变量g_pCS8900赋值,接着检测CS8900以太网控制器芯片是否在目标平台上真是存在。接下来,函数执行两个步骤:
1.等待CS8900芯片软件复位后完成芯片的初始化
2.等待CS8900芯片外置用于存放初始化配置信息的EEPROM存储器可被访问。
忘了说一点,你的KITL启动没有?
lan120576664 2009-11-17
  • 打赏
  • 举报
回复
顶起
不要沉贴!

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧