网卡dm9000的执行过程(u-boot版本:u-boot-1.1.6):
在board.c里面有eth_initialize(gd->bd);
eth_initialize的实现在eth.c里面,但是eth_initialize函数里面没有dm9000的初始化eth_init
常见有nfs,tftp,ping命令会用到网络设备,可以从这里入手。
U_BOOT_CMD(
ping, 2, 1, do_ping,
"pingt- send ICMP ECHO_REQUEST to network hostn",
"pingAddressn"
);
而其处理函数do_ping如下:
int do_ping (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
if (argc < 2)
return -1;
NetPingIP = string_to_ip(argv[1]);
if (NetPingIP == 0) {
printf ("Usage:n%sn", cmdtp->usage);
return -1;
}
if (NetLoop(PING) < 0) {
printf("ping failed; host %s is not aliven", argv[1]);
return 1;
}
printf("host %s is aliven", argv[1]);
return 0;
}
看上面红色标注的NetLoop,在net.c里面实现
eth_halt(); //Stop the interface.
#ifdef CONFIG_NET_MULTI
eth_set_current();
#endif
if (eth_init(bd) < 0) { //调用初始化函数,如果定义了cs8900,则使用cs8900的eth_init函数,这里使用dm9000
eth_halt();
return(-1);
}
NetLoop函数的原型,参数是proto_t结构体指针
int NetLoop(proto_t protocol)
而proto_t有:
typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP } proto_t;
以上表明,当使用bootp,tftp,ping,nfs等命令的时候会调用NetLoop,进而对各种网卡进行对应于配置的初始化。
以上,是顶层对dm9000的调用过程,下面再看dm9000x.c执行过程
入口eth_init
1、RESET device 复位 ,检测网络连接类型
2、NIC Type: FASTETHER, HOMERUN, LONGRUN NIC类型
3、GPIO0 on pre-activate PHY 设置GPIO
4、Set PHY 设置工作模式
5、Program operating register设置寄存器
上一篇:u-boot-1.1.6 设置新分区支持设备树
下一篇:移植u-boot-1.1.6之NOR的支持
推荐阅读最新更新时间:2024-11-13 10:38
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LT1086CT-3.3 的参考设计
- DC913A,使用 LTC3773EUHF 高性能、三相、三路输出同步降压型开关稳压控制器的演示板
- 基于STM32L4和ST4SIM的蜂窝状物联网探索套件
- NCV5663 低输出电压、超快 3.0 A 低压差线性稳压器的典型应用
- NCP380LSNAJAGEVB,笔记本USB开关评估板
- 【训练营】wifi插座+996490A
- NCP382LD15AAGEVB:单输入双输出高侧配电开关评估板
- LT1767EMS8-3.3 12V 至 3.3V 降压转换器的典型应用电路
- 适用于STM32F031K6 MCU的STM32 Nucleo-32开发板,支持Arduino nano连接
- AD8627AKSZ-R2单极输出精密放大器典型应用电路