搜索
bottom↓
回复: 4

一个大侠调试网卡的最好资料--8019as

[复制链接]

出0入0汤圆

发表于 2007-2-26 17:16:20 | 显示全部楼层 |阅读模式
连通8019过程详述

希望本文对正在调试或曾经遇到过问题的兄弟有所帮助.可能不少高手已经调通了。

五月中我买了块44B0的开发板,熟悉了软硬件及跑跑UCOS后我开始想操作板上的8019AS了,因为以前看老古的网页对此比较感兴趣,在电脑上对8029也搞通过,觉得应该不会有太多问题.可在应用时出现很多意料不到的问题,在此列出并说说我的解决办法.

首先确定好你的8019连接方式,看原理图找到片选,这样在软件里好设置BANK的参数.我的是GCS3,访问地址是0X6000000.刚开始我对这些地址访问总是失败,好郁闷,后来仔细看了电路图,找到一个错误:

8019的IOS线与ADDR配置线不一致.我的板上IOS2接高其余接低,对应地址译码是200H,可SA4-7,10-19都是接低,SA8,SA9接高,实际地址是300H,方便修改我把IOS2也接低了. 之后可以从0X6000000访问访问8019了.注意对这类外部IO访问不要用CACHE,而且访问它们时加上volatile,如我读ISR的内容是 inportb(ISR), inportb的宏定义为

#define inportb(port) *((volatile U8 *)(port))

这之后我用16位操作摸式读写控制寄存器的内容,发现读到高半字节总为FF,估计是8019访问控制寄存器只能8位的操作,可是在ARM里配置BANK3为16位了,若以8位方式读写奇数地址数据会引起异常,我的解决办法是把网卡的IOCS16B也接地了,按8位操作,并且配置BANK3的数据位宽为8位.另外一个办法是把44B0的A1-A5接8019的SA0-SA4,还是可以按16位操作.我的板也不能这样改了.

再之后我可以都访问期间到控制寄存器了,可是我试着读写网卡RAM又不对了,反复调试N久,REMOTE DMA读出来的内容和写的内容根本不一样,反复写啊读啊打印出来啊就是不对,这里还要告诉大家做这种调试时不要开MEMEORY窗口观察那些寄存器的内容,原因想想吧!后来我发现8019上电后是处于POWER DOWN状态的,因为我的8019旁边有个93C46,8019会从它里面读数据来初始化,因为93C46是空的即0XFF,这样就使8019POWER DOWN了.这个原因是我想设置LED时看8019资料才发现的.(我想那个93C46是不是多余的呢?).之后我把PWOER DOWN 及SLEEP位全清除了,呵呵,一个灯终于亮起来了!清位时有讲究的,要看看资料.

然后我再读写8019的RAM时总算是对了,这时我开始进一步控制,把我们宿舍的网线接到板上的网口中,把网卡初试化好后不停检查BNRY和CURR的值来看收到数据没有,具体操作可以看看老古的网页.我终于收到数据了,打印出来就是一些最基本网络协议啦.本来在这个时候已经出现过问题了,当什么包都没进来时,我的检测程序还是会不停的打出数据表示收到包,当时觉得奇怪,不过没进一步处理,觉得这个东西真的很麻烦啊.后来想干脆用USB算了,我板上有个D12的位置空在那里,我又对它比较熟,所以准备转搞USB,不幸的是我粗手大脚把买的芯片连板上的焊盘都焊坏了,要不然我就在这跟大家讨论USB了.

中间又停顿了一段时间,因为我又买了代博的4510板,搞了一阵4510觉得他的网络挺好用,我也专门改编了个BIOS在上面用网卡下载数据用以引导和烧FLASH,感觉真爽!后来想把那个BIOS移植到44B0来,其实还是比较方便的,改改启动和网络接口就行.

又开始控制8019了,此时又暴露许多问题.按以前的办法老是没数据时读出数据来,真是奇怪,我后来改用读ISR的接收成功标志来判断是否有新数据来了,结果发现初始化后只有第一个包可以报告介绍到,(我的BIOS是命令驱动的,每进去一次都初始化一次)比如我在主机上PING开发板的时候,只接到ARP REQUEST包,建议大家调试时装个SNIFFER,我装的SPY SNIFFER,不过用了十天就过期了,这样在主机端可以看到网卡收发的数据.然后又反复调试并在论坛发了求助贴,再后来发现下一次进网卡接收数据程序读CR后会读到0X23,因为我切换页的操作是先读CR,只改变页位再写进CR,如果是0X23的话就把网卡停止工作了!!!为什么会变成0X23的?我还是不明白,后来想的解决办法是设一个静态变量,初始化前为0,完成后为1,换页操作时,为1的话就直接把CR的0位清掉而不是只改页位.还好这样也搞掂了!



然后我再作读操作时,每个包都能正确显示接收到了,此时出现的问题是我接收完数据包再处理时,即根据不同的协议做出反应时,发现发出去的包除长度不同外,前面都是一样的.如我PING开发板的时候,第一个是ARP REQUEST,网卡返回ARP REPLY,这一步正确,主机第二个包是ICMP ECHO REQUEST,而我本应返回ICMP ECHO REPLY, 可到了主机后还是第一个ARP REPLY,只是长度与我要发的ICMP ECHO REPLY一样!我把发包前数据打印出来,是和我要发的一样啊,我发的过程是先写到网卡RAM,设置发送长度和发送起始页后再向CR写发送命令,过程都对,于是又反复调试,终于发现要在写网卡RAM前先向CR写个停止REMOTE DMA的命令0X22,这样才发送出我要的数据了.于是,PING通开发板的过程结束了!按理说在写网卡RAM前REMOTE DMA应该是结束的了,可还是要这一步,真不明白.

PING成功后,信心倍增,只差一步了,我的TFTP接收程序是现成的,改都不用改了,直接往上一用,即在主机端执行情况TFTP -I XXX.XXX.XXX.XXX PUT FILENAME,让开发板接收就行,出现的结果又不对, 顺利发了几个包后,就停顿了,后来出现超时而结束.只好又打印数据检查结果,



发现读网卡RAM也有问题,每次读出BNRY的值不一定就是我上次读完最后写入的值,这样与CURR比较和定位开始读的页自然会出错!我要疯了,居然还有这种怪问题来骚扰我!开时PING的时候都不会有这种现象,这里居然出现!过阵又想了个办法,设置一个静态变量而不用BNRY判断最后读完包所在的页面,但是每次读完最后还是要写BNRY.这回又被我蒙好了!再试TFTP传送,又有问题,虽然可以传完,可每次都不顺利,发几个包又停了等半天又可以继续,比串口还慢,真气人,后来看看SNIFFER里的状态,每次停顿后又将上次的包发一次,估计是主机没收到应答包,那就是板端没接收到或没正确处理了,又打印调试,果然是有的包没应答,不知为何,搞了好一会又用和处理发送一样的方法,在读网卡RAM前写个停止DMA的命令到CR,呵呵,这会很快就顺利接收完了!

我再用接收到的数据写FLASH,再启动写入的程序,结果运行不了,于是又用JTAG读出FLASH与写入文件比较,发现有些地方不对啊,协议通讯都正常,数据却会有出入,难道接受超过一个PAGE的包会出错?再次改写读包程序,以前我是先读完一页,再有就读剩下的,改成了先读四个字节,判断接收长度,再一次读完剩下所有的.改完再调试,OK!OK!下载程序到RAM再运行,或烧入FLASH都好了,兴奋啊!

   至此对8019的操作我觉得算是正常了,虽然有很多问题我还不明白,但也能运行良好了.把我的调试经历详细写给大家看,希望不要嫌我啰嗦.其中有什么不当之处请指正!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-6-3 15:59:49 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-11-24 00:09:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-15 12:25:04 | 显示全部楼层
楼主的帖子很好,顶~!

出0入0汤圆

发表于 2013-9-28 19:37:33 | 显示全部楼层
好,记下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表