willforce的专栏

来源:百度文库 编辑:神马文学网 时间:2024/04/29 12:09:08
关于smsc lan91c111
使用这块网卡芯片需要注意的几个问题
1,Transmit control register 中的SWFDUP是用于控制duplex模式的,而FDUPLX不是
2,Autonegotiation 的使用问题,需要严格按照文档的要求,每次等待1.5秒以上
3,MMU, 91c111使用了较为先进的内存管理方式,当处理器想要使用它发送数据时,需要先分配内存,得到一个Packet Number,并需要从 Allocation Result Register中取出,填入Packet Number Register,然后还要写Pointer Register, 然后把要发送的数据写入91c111中的SRAM,执行MMU的ENQUEUE PACKET NUMBER TO TX FIFO命令,并等待发送完成。
这里有几个概念:
a,Packet Number,对于发送是指从MMU申请到的Packet Number值,对于接收,这个packet number其实也是从MMU申请的,只是,不是由处理器控制申请的,而是由CSMA/CD模块申请的。
b,TX/RX area指的是和Packet Number相对应的SRAM中的内存
c,FIFO Ports Register, 里面放的是Packet Number
d,Pointer Register 是指当前Packet Number 所对应的那段SRAM的指针
4,Multicast Table Registers 由8个寄存器构成,同Recivie Frame Status 寄存器中的Hash Value共同使用,用于地址filter
Hash Value = Most 6 Significant Bit(Destination Address from received packet)
Hash Value 中的Bits 5, 4, 3, 选择8个Multicast Table Registers中的一个(不妨叫做A),Bits 2,1,0选择A中的一个位,如果该位置位,则,filter 通过,否则,不通过。
5,Phycial Register需要使用 Management Interface 寄存器按照文档要求,串行设置
[点击此处收藏本文]
发表于 2004年09月25日 9:32 PM
Rosa 发表于2004-09-26 11:01 PM
有见解
天山 发表于2004-10-14 3:55 PM
我在调这块片子,现在发现读各个bank的寄存器没问题,写大部分的寄存器也没问题,但是写bank1的control register和bank2的interrupt mask register却死活写不进去,还能给点建议啊?谢谢
于超 发表于2005-04-04 10:51 AM
你好!
目前我正在写SMSC LAN91C113I在嵌入式应用中(bootloader)的驱动程序。
驱动程序可以正常初始化,自动协商模式,正常收包发包。
但是有两个主要问题:
1,发包时在向该网卡MMU请求分配帧的存储区经常超时失败,但是有些时候又是正常的。
2,收包时经常发生OverRun中断。
我希望能够得到这两方面异常原因的相关知识,以及解决办法。
期待你的回信!
于超
2005.04.02
willforce 发表于2005-05-02 9:08 PM
不知道现在才回答你是不是已经有点晚了。对于1,发包时在向该网卡MMU请求分配帧的存储区经常超时失败,但是有些时候又是正常的。基本上可以使用如下方法解决:即在初始化的时候申请一个packet的存储空间,并把这个packet number处在一个全局变量里,数据发送结束以后,不要释放这个数据包,而是直接把这个packet number 写到fifo port register里面,直接使用。
对于2,不知你的系统中使用的处理器和你使用的是中断模式还是查询模式,如果网络上的广播数据包较多的时候,使用查询模式,并且处理器的负担较重的时候,就会发生这种情况。根本的解决方法是,提高处理器对于网卡的处理能力。
beans 发表于2005-05-27 3:49 PM
老兄,我也碰到这个MMU ALLOC失败的问题了.在采用auto release模式的时候,能成功分配2-4次吧,在手动release模式,基本第二次就不成功了.
按照你说的方法,我就是不再释放分配来的内存,当然,也不再申请,就用那一个,但是还是不行,第二次发送之后再去检测smc_check_mmu_allocate_complete,就已经失败了.不知道为什么.
也可能是我理解的有问题,你说的那个fifo port register是个只读的寄存器啊,不是真的要写那个,然后让smc_rcv来释放吧??
希望您能够详细讲一下关于这个问题您的解决方法,拜托了 ^^
lians 发表于2005-06-16 6:01 PM
在使用lan91c111时发现在网络的传输或读取操作结束后mir寄存器的值不会恢复到0x0404,即一直保持最后一次被占用的状态。不知道是什么原因引起的。在电路设计上是不是会造成mir寄存器工作不正常。这个问题困扰了我很长时间,如果你知道的话,还请不吝赐教呀 ;)