您的位置:首页 > 其它

asm以太网驱动调试笔记

2017-03-16 10:24 381 查看
《asm9260以太网驱动调试笔记》

关键词:MAC / PHY芯片驱动
 

问题:板卡ip设置为192.168.2.214,主机ip为192.168.2.53,板卡ping主机能有包发出去,能用抓包工具抓到,主机也相应了,回了自己的mac地址。但是,没能ping通,分析:怀疑是板卡的receive部分问题。
(214的mac地址不匹配是刚才改掉了)





2. 问题:对receive部分加打印,第一次进中断ETH_DMASR(中断状态寄存器)值为0x00670040

对应:22:20,19:17,16,6位

发现19:17位第一次为011:( Running: Waiting for receive packet),但是并没有进行处理,再一次进中断时为100:( Suspended: Receive descriptor unavailable)显示描述符不可用。
第22:20位为110: (Suspended; Transmit descriptor unavailable or transmit buffer underflow)也是一个奇怪的现象,之前中断时禁用的,没有使能,能正常发包,开启中断后,发包失败了,状态位显示是发送描述符不可用。
分析:打开RX中断ping包发不出去,关闭后能发出去,研究中断标志寄存器。



再次关闭中断,在TX部分查看ETH_DMASR(中断状态寄存器)。对应:6804C4(0110 1000 0000 0100 1100 0100)
(2:TBUS,在下一步会将其清除),(6,7:RS,RBUS,与接收有关先不考虑),(10:ETS,发送的数据已完全转移到FIFO中),(19:17:RPS,接收描述符不可用),(22:20:TPS,传输描述符不可用)

分析:紫芯的ETH_DMASR(中断状态寄存器)里面的22:20用于详细描述TX描述符状态,当状态为不可用时(即描述符还在被使用)(2.TBUS)置位,。19:17位详细描述RX描述符,当状态为不可用时(即描述符还在被使用)(7.RBUS)置位。16位类似总中断,当0,2,6,14位置位时,它都会置1。



板卡刚启动后显示的,研究一下:660404(0110 0110 0000 0100 0000 0100)
(22:20:发送描述符不可用),(19:17:Waiting for receive packet等待包,此时还没ping,没有包发过了),(10:发送数据已经装载完毕??什么数据),(2:发送描述符不可用)



开启中断后,690004(0110 1001 0000 0000 0000 0100)
(22:20:发送描述符不可用),(19:17:接收描述符不可用,开启了接收中断,显示有包过来了),(16:有中断了),(2:发送描述符不可用)



之前的进中断还有个现象,会不断进中断(置位RX中断标志位后还是反复进中断),后来为了不让其反复进中断,对ETH_DMASR(中断状态寄存器)写0xffff,还是反复进中断,再写0xffffffff就不会了。

 

End.        

问题解决,开始时候是因为没开RX中断,能发包,但是不能收包(当DMA收到receive包后会产生中断,通知CPU来接收)。

后来开启中断后,不断进中断(因为使能了16. NIS,6. RS位,要想启动RX中断,NIS位必需也要置位)后来进中断后只清了6.RS位,但是!!!!!!NIS位没有置位,还没有意识到,后来老进中断就干脆全清0xffffffff,但是驱动中其他部分也需要读取ETH_DMASR进行操作,就导致了开启中断后,发包都发不出去。

总结:之前的一个概念没理清,SylixOS中是通过中断方式通知CPU已经收到receive包让其过来接收。中断方面是IER使能+ISR置位后才进中断,如果不断进中断应该查看已使能的位是否清零并详细看中断状态寄存器。



ping速度很慢,接下来需要优化,加快通信速度。猜测可能是缓冲区给少了。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  驱动