注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
wangmxe的个人空间 https://home.eeworld.com.cn/space-uid-91642.html [收藏] [复制] [分享] [RSS]
日志

u-boot移植网络接口部分问题总结

已有 3401 次阅读2010-1-10 11:47 |

      这几天尝试着在我的开发板上移植了u-boot,当串口、flash都没问题以后,在网络接口上却出了很多问题,经过很多次的修改和编译,问题最终都得到解决。现在把移植过程中要注意的问题分享给大家,希望能对大家有所帮助,在移植过程中少走弯路。
    首先说一下我的开发板网络部分的配置:
        网络接口芯片:RTL8019AS
        地址空间:连接在s3c44b0的bank3
        数据总线宽度:8位
在移植时下面这些部分需要注意:
       1.网络芯片所在的bank的数据总线要和网络芯片数据位宽相同,对于RTL8019AS,当它的96脚IOCS16B接一个上拉电阻的话,它工作在16位模式,否则工作在8位模式。一定要看开发板上这个电阻在不在,有些开发板设计的时候有,但是没有焊上。确定了数据总线位宽以后,要在board/对应的开发板目录下lowlevel_init.S中MEMORY_CONFIG:下面的第一个数据进行修改,这个数据是(BUS WIDTH & WAIT CONTROL REGISTER)BWSCON寄存器的值,根据ARM芯片资料,把网络芯片所在的bank的数据总线宽度设置成网络芯片工作的位宽,如果数据总线设置不对,在用tftp下载时会出现packet too big的警告错误。
       2.使能对应bank的片选信号nGCS,这个要看nGCS在哪个IO口上。以我的为例,nGCS3在GPB8,那么就要设置PCONB寄存器,把PB8设置为nGCS3功能,具体设置值参考ARM芯片资料。这个寄存器的设置在board/对应开发板目录下的对应开发板的c文件里面board_init()函数下。
       3.网络芯片中断设置,要把和网络芯片中断引脚相连的IO口的中断功能使能,并把这个中断屏蔽掉。u-boot没有用到这个中断,这个中断供linux用。该项在board_init()函数里面。具体寄存器和设置值参考ARM芯片资料。
       4.确定网络芯片IO端口的基地址,这要看IOS3-0(85,84,82,81脚)是否接上拉电阻(一定要看开发板上这些电阻是否接了),如果接的话那么对应的引脚为1,否则为零。然后用IOS3-0的值去查RTL8019AS的芯片手册,在CONFIG1: RTL8019AS Configuration Register 1 (04H; Type=R except Bit7=R/W)  这个寄存器里有。例如我的开发板上IOS3-0都没有接上拉电阻,那么IOS3-0为0000,然后芯片资料,0000对应的IO基地址为300H。我的开发板上RTL8019AS 接在bank3,bank3的起始地址为0x06000000,所以网络芯片的IO端口基地址为0x06000300。这个值在include/configs/ 对应的开发板头文件下修改。以我的为例#define RTL8019_BASE  0x06000300。
       5.修改网络芯片的驱动程序头文件,在driver/目录下。如果网络芯片的SA0-SA4对应ARM的ADDR0-ADDR4,那么所有的寄存器偏移地址不需要偏移。即 :
#define  RTL8019_REG_00          (RTL8019_BASE + 0x00)
#define  RTL8019_REG_01          (RTL8019_BASE + 0x01)
#define  RTL8019_REG_02          (RTL8019_BASE + 0x02)
#define  RTL8019_REG_03          (RTL8019_BASE + 0x03)
              .
              .
              .
如果网络芯片的SA0-SA4对应ARM的ADDR1-ADDR5,那么所有的寄存器偏移地址都需要向左移一位。
即 :
#define  RTL8019_REG_00          (RTL8019_BASE + 0x00 << 1)
#define  RTL8019_REG_01          (RTL8019_BASE + 0x01 << 1)
#define  RTL8019_REG_02          (RTL8019_BASE + 0x02 << 1)
#define  RTL8019_REG_03          (RTL8019_BASE + 0x03 << 1)
              .
              .
              .
如有问题请邮件联系wangmxe@gmail.com。转载请注明!!
发表评论 评论 (2 个评论)
回复 soso 2010-1-11 08:24
谢谢分享。:)
回复 violet089 2010-1-17 20:00
这样的文章,才值得读。谢谢分享!

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章