Chinaunix

标题: SMSC LAN91C111 Ethernet Driver Development [打印本页]

作者: voidjackjiang    时间: 2011-03-03 17:13
标题: SMSC LAN91C111 Ethernet Driver Development
本帖最后由 voidjackjiang 于 2011-03-04 10:58 编辑

Description:
     Ethernet Chip: SMSC LAN91C111
     SoC: OMAP3530
     Environment: g-bios, linux kernel
作者: spanthrive    时间: 2011-03-04 10:17
【Owin】设备ID还没有读出来。
昨天看了Omap3530的原理图,找到了地址、数据、读写和片选pin脚。
阅读了LAN91C的datasheet,分析了block diagram,初步了解了设备的组成拓扑结构,并进一步的分析了pin脚的functions,对结构中的PHY、MAC关系,DMA和MMU的作用有了更深刻的认识。
作者: janezhao123    时间: 2011-03-04 10:20
工作进展:
       根据LAN91C111和omap3530的 datasheet 配置GPMC_CONFIGx_5,enable ncs5, 选择16位模式,计算出片选区域的基址,然后选择LAN91C111的BANK3模式,读取REV数值。
结果为0,读取失败。
      原因分析:基址选择有误。
      提问:LAN91C111中944页的gpmc_we(oe)是否要配置,如何配置。
作者: tszcgf    时间: 2011-03-04 10:23
第一天进展:
1:导读了omap3530,LAN91C111 datasheet;
2:理清了SMSC LAN91C111内部原理结构(MAC,PHY,MII,EEPROM),及操作方式;
3:明白了SOC是怎样片选到LAN91C111,及如何控制访问到LAN91C111;
4:设备ID尚未读出,估计读写方式错误。
作者: jchxpll    时间: 2011-03-04 10:43
Michael:

omap3530 register配置:
GPMC_CONFIG: 配置LIMITEDADDRESS
GPMC_CONFIG1_i: 配置MUXADDDATA,DEVICETYPE,DEVICESIZE
GPMC_CONFIG7_i: 配置MASKADDRESS(128M),CSVALID(enable)
GPMC_PREFETCH_CONFIG1: 配置ENGINECSSELECTOR(cs5)

对于LAN91C111,通过配置Bank select Register选择Bank3, 读取Revision Register即可到ID,但现在读取的值为0,不知何处出的问题,正在查找......
作者: louismaxwit    时间: 2011-03-04 10:46
The progress of project:

1.Read OMAP353x technical reference manual and LAN91C111 spec.

2.Analyze the block diagram of LAN91C.

3.Analyze the connection of the sock and the ethernet device, but not finished.

4.Ready to read the id of LAN91C, not finished.
作者: louismaxwit    时间: 2011-03-04 17:19
本帖最后由 louismaxwit 于 2011-03-05 14:49 编辑

Development Environment:

Ethernet chip: SMSC LAN91C111

SOC: OMAP3530

Environment: g-bios




The progress of project:

1.Finish reading ID of LAN91C.

  According to the omap353x and LAN91C specs, we could found that followings:

  a. The addressable of memory which GPMC controlled have been divided into eight banks.

  b. try to chip-select bank1, so we should choose to set GPMC_CONFIG1_1 register and GPMC_CONFIG7_1 register.

  c. set the chip-select base address and region size in GPMC_CONFIG7_1 register.

  d. set the bank number which we choosed from MAC registers into the bank select register.

  e. read the chip id from the corresponding register in LAN91C.
作者: jchxpll    时间: 2011-03-05 09:46
读了n遍LAN91C111 Datasheet,仍没有发现如何读取PHY ID。。。。。。
作者: louismaxwit    时间: 2011-03-05 19:45
Development Environment:

Ethernet chip: SMSC LAN91C111

SOC: OMAP3530

Environment: g-bios




The progress of project:

  Continued reading LAN91C spec ......
作者: StarYing-maxwit    时间: 2011-03-08 09:41
终于可以回帖了。现在已经实现了数据包的接收,PHY ID暂时先不读了
作者: voidjackjiang    时间: 2011-03-08 09:45
Ethernet的receive和send packet功能基本实现,今天的主要任务是完善代码,向net core注册。
作者: tszcgf    时间: 2011-03-08 10:00
The progress of project:
1,It can receive a packet, if server send a packet.
2,Transfer capabilities will be realize today.
作者: janezhao123    时间: 2011-03-08 17:16
LAN91可以 正常的收发多个包,调试中遇到一些问题,分享一下:
(1)发包的时候要发alloc mem 命令。
(2)读取收到包的数据时,按16字节读取,此时将packet size / 2, 再发送该包时,size要与除2前保持一致
(3)配置寄存器时,选择bank和配置顺序影响代码调试。
(4)读写寄存器,收发程序都应封装成函数,实现模块化管理 。
作者: sterling_zhou    时间: 2011-03-08 17:19
进展情况:

1、收包完成后再实现发包功能,要注意的问题是先分配相关的memory并把发送的命令写入register;
2、在low level层实现driver,并向子系统注册;
作者: louismaxwit    时间: 2011-03-08 17:20
Development Environment:

Ethernet chip: SMSC LAN91C111

SOC: OMAP3530

Environment: g-bios




The progress of project:

  LAN91C can recieve and send data successfully.

  debug experience:
    a. recieve data uninterrupted.

        Fix bug:  send data one time, but recieved data uninterruptly. I thought that fifo operation may be wrong.
        so checked the fifo operation code. And found the register address is written wrong. Corrected it. Then
        run the qemu monitor to load g-bios. Tested successfully.
作者: spanthrive    时间: 2011-03-08 17:26
收包/发包对 MMU register 的操作不同

1.收包时,要先向 MMU register 发送command,之后才能receive info,收到data后release rx buffer;

2.发包时,和收包时相反,先把 data 写到 data register 中, 然后向 MMU register 置发送命令,开始传输数据到目标终端。
作者: jchxpll    时间: 2011-03-08 21:04
已实现send和receive,并注册到subsystem,可正常tftp。

在send的函数中,一定要注意packet的size,需要包含CRC BYTES、CONTROL BYTE、LAST DATA BYTE。
作者: janezhao123    时间: 2011-03-08 21:12
LAN91已注册到子系统, tftp可以load image
作者: StarYing-maxwit    时间: 2011-03-08 22:50
回寝室经过小心的DEBUG,问题也就都解决了。虚拟机和主机互相ping得通了,这是一件值得高兴的事儿,这也是必须的。
    这使我进一步了解并熟悉网卡的工作原理以及G-bios里编写驱动程序的规范,对子系统有了更加深刻的认识。
    编程过程一定要注意coding style, 如果一开始就注意coding style其实可以避免很多错误




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2