精华内容
下载资源
问答
  • 采用Verilog编写,已经经过项目验证。 使用方法: 1.拷贝到硬盘。 2.用ISE创建项目,分别加入各个代码文件,即可。
  • 赛恩科技(Cyan)已经开发出6款配备有以太网MAC层的eCOG1X微控制器,并已进入完全投产阶段。为了削减以太网应用中的原料单,赛恩科技还移植和验证了两套免费以太网协议栈的性能;这两套免费协议栈允许eCOG微控制器解决...
  • 1. 产品介绍 特点 - 使用了Atmega128 (8MHz)数据传输速度高于6Mbps。 - 通过使用外部96引脚连接件, AVR&rsquos 的所有引脚都能使用。 - 有效的SPI接口测试程序。 - 提供各种应用程序源代码Loopback, Webserver,...
    1. 产品介绍
    

    特点

    - 使用了Atmega128 (8MHz)数据传输速度高于6Mbps。

    - 通过使用外部96引脚连接件, AVR&rsquos 的所有引脚都能使用。

    - 有效的SPI接口测试程序。

    - 提供各种应用程序源代码Loopback, Webserver, Ping

    - 支持ISP & JTAG 接口。

    规格

    开发环境

    -所有源代码是由GCC编译器编译的。

    - ISP电缆固件编程

    内容

    订单信息

     

    2.      演示软件

    串口控制设置软件:              

    传递测试程序:                 

    3.      工作过程图

    注:切记需将用户机与W5100E01-AVR须连接到同一网段内才能实现通信。

    4.      演示过程

    1)      正确的使用线材将W5100E01-AVR与用户机连接(参考工作过程图)。

    a)      使用串口电缆/串口转USB电缆将用户机与W5100E01-AVR串行借口连接;

    b)      使用UTP电缆(网线)将AP与W5100E01-AVR的RJ-45网口连接;

    c)      用户机使用UTP电缆(网线)与AP相连。用户机与W5100E01-AVR连接到同一台AP上才能实现通信;

    d)      将电源适配器接到W5100E01-AVR的电源借口上,并接通电源;

    2)      若使用了串口转USB线材需要安装相关驱动(详见驱动光盘)。

    3)      成功安装线材驱动,打开设备管理器查看串口信息。

    4)      打开串口配置软件---- Terminal。查看Terminal端口信息,尤其注意Terminal端口号与设备管理器中显示的相同。其他信息(波特率,数据位,停止位,奇偶校验,流量控制)都可以从Terminal直接配置。

    注:若Terminal未能成功的读取串口

    a)      检查是否重复打开Terminal程序,或者检查是否有其他程序占用串口。若没有则执行下一步;

    b)      点击ReScan 重新扫描;若还是无法成功读取串口则执行下一步;

    c)      关闭Terminal,修改设备管理器中串口的端口号(不能修改成已使用的端口),确定之后,重启Terminal程序,点击ReScan 重新扫描端口。

    d)      若还是未能读取串口,关闭Terminal,拔下串口线,再重新插入,修改设备管理器中串口的端口号(不能修改成已使用的端口),确定之后,重启Terminal。

    5)      成功读取端口后,使用Terminal程序配置串口信息如下:

    6)      点击Connect建立串口通信链接。

    7)      查看本机IP地址信息

         DOS命令查看

    a)      点击运行,输入cmd,启动dos命令控制程序

    b)      输入“ ipconfig –all ”查看本机IP信息。

         网络邻居查看

    a)      右击网络邻居图标,点击属性。

    b)      选中Internet 协议版本 4 (TCP/IPv4),点击属性。

    c)      进入IP属性配置页面后,查看信息,若想了解更高级信息,点击高级。

    d)      进入IP高级配置页面,可以添加不同的网段。

    8)      重启W5100E01-AVR,查看Terminal中显示信息。

    9)      若W5100E01-AVR显示信息已是所要设置的信息,则跳过以下W5100E01-AVR设置步骤,直接进入11)演示步骤。

    10)   W5100E01-AVR设置步骤

         注意事项:

    a)      输入不区分英文大小写;

    b)      在发送框中输入信息,敲击回车只是表示发送,不能代表命令输入。若想表示命令输入,须在所发信息后加上回车符号的十六位进制表示“0d0x”,支持回格键修改;

    c)      在输入框输入信息,敲击回车则表示命令输入,无需在填入“0d0x”。另外,在输入框中每输入一个字符都代表字符已经发送,故不支持回格键修改。

         设置步骤

    重启W5100E01-AVR,当Terminal中显示如下时,输入“m”或“M”(7秒钟之内)。进入W5100E01-AVR的配置模式。

    i.       在输入框输入1 进入网络设置(Network Config)页

    各个设置菜单功能:

     

     

    例如:修改Source IP Address

    在输入框中输入1,进入Source IP Address配置模式,在输入框中输入想要设定的参数,如:192.168.11.50 。

     

    在输入框中按级输入“e”,退出配置模式,查看是否设置成功。

    设置成功!

    ii.      在输入框输入2 进入信道设置(Channel Config)页

    各个设置菜单功能:

     

    信道的工作方式设置:

    工作方式配置菜单:

     

    例如:设置1st Channel为TCP Loopback Client (Port 4000)

    在1st Channel配置界面的输入框中输入2:

     

     

    iii.     在输入框中输入5进入Web Server模式

         注意:

    a)      IE浏览器的内置默认端口号为80,故若已经在配置模式中将端口号设置为80,则直接在IE浏览器中输入W5100E01-AVR的IP地址(缺省为:192.168.0.2)就可以进入片内Web页进行配置。

    b)      若在配置模式中没有将端口号设置为80,而是其他值(比如:100),则要想进入片内Web页进行配置则需输入W5100E01-AVR的IP地址和端口号。(如:http://192.168.0.2:100)

         Web Server模式

    11)   设置完成后按级输入“E”退出W5100E01-AVR设置

    12)   打开传递测试程序AX1

    (按上述W5100E01-AVR设置方法,将W5100E01-AVR的1st Channel设为TCP Loopback Server (Port 4000))IP:192.168.11.50)

    a)      进入TCP选项卡

    b)      点击Connect连接, 输入W5100E01-AVR的IP地址以及端口号.

    c)      链接成功后,点击CPUTICK同步计算机与W5100E01-AVR时钟。

    d)      点击File选项卡,选择要传输的测试文件。

    e)      点击∞进入Loopback循环传输。

         注:这里是W5100E01-AVR将电脑传输给的数据再传输回去,故实际传输速度应为显示传输速度的2倍。

    5.      演示完成祝您使用愉快!

     

    如果您有什么疑问请留言或者来信:wiznetbj@wiznettechnology.com,希望本篇文章可以给您带来帮助,谢谢。

    展开全文
  • 三菱机器人标准配置一般为:机器人...来看下控制器操作面板如下图1、状态数字显示屏幕显示程序出错编号,行编号,速度等代码数字信息显示其当前状态。2、对上面状态屏幕进行切换,查看程序编号,行编号,以及速度...

    1f1adad7df35c64b251a256cb3738246.png

    三菱机器人标准配置一般为:机器人本体,机器人控制器以及连接电缆。

    注意:示教器是选项,也就是说标准配置没有示教器,可通过官方提供的软件RT ToolBox3进行在线模式然后操作进行。有兴趣的朋友可以到三菱自动化官方网站进行下载。

    来看下控制器操作面板如下图

    aa97b6e56b9274ff9e6cf65d4a2df54f.png

    1、状态数字显示屏幕

    显示程序出错编号,行编号,速度等代码数字信息显示其当前状态。

    2、对上面状态屏幕进行切换,查看程序编号,行编号,以及速度状态,可以进行来回切换进行显示。

    3、上下可以进行程序编号的选择以及速度的增减设置。

    4、急停按键,紧急或者维修作业时利用其断开伺服电源。

    5、模式切换开关,可以使机器人的操作变为自动或者手动模式

    6、伺服电源接通开关。

    7、启动开关,程序执行时按此键进行启动作业。

    8、RESET为故障复位功能按键,以及程序复位初始位置处功能按键。

    9、伺服电源断电开关

    10、机器人停止运行按键开关。

    11、END按键主要是将执行的程序进行停止,结束重复运行,停止运动。

    12、如果有示教器选项,就把示教器连接到TB连接器上面去。

    13、RS232主要迎来连接我们的电脑,专用接口。

    14、此部位主要是USB接口(用来连接电脑)以及备份电池的存放位置。

    总体来说简单易操作,类似EPSON以及松下等机器人。

    更多阅读信息

    FANUC机器人故障 SRVO-062解除方法

    FANUC机器人电机编码器分析(图解)

    FANUC机器人负载手动设置方法参考

    安川机器人并行IO分配 (查询)

    工业机器人电气设计元件选取规则参考

    安川电机与伺服放大器电路接线图

    ABB机器人减速机漏油检漏测试

    ABB机器人紧凑型控制柜内部结构(图)

    KUKA机器人CCU板信号指示灯(从颜色判断状态)

    工业机器人伺服电机故障分析

    工业机器人电气设计元件选取规则参考

    FANUC机器人抓取程序案例

    FANUC机器人伺服放大器LED故障诊断(图文)

    库卡机器人蓄电池在线检测方法

    FANUC机器人主板启动加载过程状态(故障分析)

    工业机器人可靠性功能测试与分析

    工业机器人撞人事故的真因背后

    kuka机器人平衡缸异常噪音消除方法

    谐波减速机更换所需工具

    如果我是销售,坚决不卖给这样的客户!

    库卡机器人 CCU板卡接口功能与保险丝作用(图文)

    UR机器人如何释放抱闸的

    ABB机器人紧凑型控制柜内部结构(图)

    FANUC机器人零点快速校准流程

    感谢关注,有问题请留言!

    a5baa63bb28bbfd2d40ca85553b5a2e6.png

    展开全文
  • 控制器:Atmel Atmega32u4 外部输入电压(推荐):7V~23V DC 外部输入电压(极限):<24V DC POE输入电压:48V AC/DC(本产品为符合802.3af标准的PD设备) POE单独供电时 5V接口最大输出电流为800MA 数字信号I/O...
  • 也可以用于自己做控制板,完全当做一片以太网扩展来用,很方便。 W5300-iM_LAN 100M以太网模块实物截图: 本iCore2 模块 之 100M 以太网模块特性: 1、名 称:iM_LAN 100M以太网模块; 2、接口芯片:W5300高性能以太网...
  • 赛恩科技(Cyan Technology)新推出的eCOG1X微控制器采用16位哈佛架构,具有24位字代码线性地址空间和16位字数据线性地址空间,内嵌双智能卡控制器、USB 2.0 OTG、10/100以太网MAC、外部存储器接口和存储器管理单元。...
  • 根据中国政府的要求,从2008年起... 赛恩科技(Cyan Technology)的eCOG1X微控制器采用16位哈佛架构,具有24位字代码线性地址空间和16位字数据线性地址空间,内嵌双智能卡控制器、USB 2.0 OTG、10/100以太网MAC、外部存
  •  赛恩科技(Cyan Technology)的eCOG1X微控制器采用16位哈佛架构,具有24位字代码线性地址空间和16位字数据线性地址空间,内嵌双智能卡控制器、USB 2.0 OTG、10/100以太网MAC、外部存储器接口和存储器
  • 高级微控制器 AVR 32

    2012-04-03 10:53:06
    可用的外设包括以太网 MAC、全速 USB 器件和On-the-Go(OTG),以及一个外设DMA 控制器、多层高速总线架构、10位ADC、SPI、SSC、双线接口 (I2C兼容)、UART、通用定时器、脉宽调制器(PWM),以及一整套监控功能。...
  • 1章可编程序控制器(PLC)  1.1基于SoMachine控制平台的PLC硬件基础  1.1.1M218 PLC硬件  1.1.2M238 PLC硬件  1.1.3M241 PLC硬件  1.1.4M251 PLC硬件  1.1.5M258 PLC硬件  1.2SoMachine软件基础  1.3...
  • 基于TCP/IP协议的以太网已成为工业标准,随着以太网的发展,以及嵌入式Web服务器发展为网络中的越来越小的网络节点,为嵌人式web在工业中的应用提供了机会。本文研究的课题就是利用Web浏览器监制USS协议变频。要...
  • 千兆以太网技术与应用

    热门讨论 2011-06-22 21:39:31
    1章 千兆网之前的以太网 1 1.1 以太网发展简史 1 1.1.1 1973-1982:以太网的产生与DIX联 盟 1 1.1.2 1982-1990:10Mb/s以太网发展成 熟 2 1.1.3 1983-1997:LAN桥接与交换 2 1.1.4 1992-1997:快速以太网 2 ...
  • 1.简介 使用zynq7000系列SoC开发以太网功能比较简单,xilinx提供了完整的驱动程序,只需配置设备树中与phy相关的信息即可,本篇文章的重点并非讲解以太网驱动程序本身,而是通过对...phy芯片和以太网控制器之间通过m...

    1.简介

    使用zynq7000系列SoC开发以太网功能比较简单,xilinx提供了完整的驱动程序,只需配置设备树中与phy相关的信息即可,本篇文章的重点并非讲解以太网驱动程序本身,而是通过对以太网驱动程序代码的分析,探索linux phy子系统,包括了mdio总线,phy设备、phy驱动等,同时也能加深对linux设备模型总线、设备和驱动的理解。

    2.主要结构体

    phy芯片和以太网控制器之间通过mdio总线进行控制信息的传输,phy芯片挂接在mdio总线上,并且一个mdio总线上可同时挂接多个phy芯片,通过phy地址进行区分。可以看出,linux phy子系统典型地对应linux的总线、设备、驱动模型。

    2.1 总线

    和大多数总线结构一样,mdio总线结构定义为mdio_bus_type:

    /drivers/net/phy/mdio_bus.c
    
    struct bus_type mdio_bus_type = {
    	.name		= "mdio_bus",
    	.match		= mdio_bus_match,
    	.uevent		= mdio_uevent,
    };
    

    2.2 设备

    设备结构体包括mdio_device、phy_device和mii_bus,其中,mdio_device代表挂接在mdio总线上的mdio设备,phy_device是对mdio_device的进一步封装,专门代表phy设备(属于mdio设备的一种)。mii_bus是代表mdio总线本身的设备,是总线上mdio设备的父设备(parent)。

    /include/linux/mdio.h
    
    struct mdio_device {
    	struct device dev;
    
    	struct mii_bus *bus;
    	char modalias[MDIO_NAME_SIZE];
    
    	int (*bus_match)(struct device *dev, struct device_driver *drv);
    	void (*device_free)(struct mdio_device *mdiodev);
    	void (*device_remove)(struct mdio_device *mdiodev);
    
    	/* Bus address of the MDIO device (0-31) */
    	int addr;
    	int flags;
    	struct gpio_desc *reset_gpio;
    	struct reset_control *reset_ctrl;
    	unsigned int reset_assert_delay;
    	unsigned int reset_deassert_delay;
    };
    
    /include/linux/phy.h
    
    struct phy_device {
    	struct mdio_device mdio;
    
    	/* Information about the PHY type */
    	/* And management functions */
    	struct phy_driver *drv;
    
    	u32 phy_id;
    
    	struct phy_c45_device_ids c45_ids;
    	unsigned is_c45:1;
    	unsigned is_internal:1;
    	unsigned is_pseudo_fixed_link:1;
    	unsigned is_gigabit_capable:1;
    	unsigned has_fixups:1;
    	unsigned suspended:1;
    	unsigned sysfs_links:1;
    	unsigned loopback_enabled:1;
    	
    	/*其余部分......*/
    };
    
    /include/linux/phy.h
    
    /*
     * The Bus class for PHYs.  Devices which provide access to
     * PHYs should register using this structure
     */
    struct mii_bus {
    	struct module *owner;
    	const char *name;
    	char id[MII_BUS_ID_SIZE];
    	void *priv;
    	int (*read)(struct mii_bus *bus, int addr, int regnum);
    	int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
    	int (*reset)(struct mii_bus *bus);
    
    	/*
    	 * A lock to ensure that only one thing can read/write
    	 * the MDIO bus at a time
    	 */
    	struct mutex mdio_lock;
    
    	struct device *parent;
    	enum {
    		MDIOBUS_ALLOCATED = 1,
    		MDIOBUS_REGISTERED,
    		MDIOBUS_UNREGISTERED,
    		MDIOBUS_RELEASED,
    	} state;
    	struct device dev;
    
    	/* list of all PHYs on bus */
    	struct mdio_device *mdio_map[PHY_MAX_ADDR];
    
    	/* PHY addresses to be ignored when probing */
    	u32 phy_mask;
    
    	/* PHY addresses to ignore the TA/read failure */
    	u32 phy_ignore_ta_mask;
    
    	/*
    	 * An array of interrupts, each PHY's interrupt at the index
    	 * matching its address
    	 */
    	int irq[PHY_MAX_ADDR];
    
    	/* GPIO reset pulse width in microseconds */
    	int reset_delay_us;
    	/* RESET GPIO descriptor pointer */
    	struct gpio_desc *reset_gpiod;
    };
    

    2.3 驱动

    驱动结构体主要包括mdio_driver和phy_driver,其关系和mdio_device与phy_device的关系类似。

    /include/linux/mdio.h
    
    /* struct mdio_driver_common: Common to all MDIO drivers */
    struct mdio_driver_common {
    	struct device_driver driver;
    	int flags;
    };
    
    /* struct mdio_driver: Generic MDIO driver */
    struct mdio_driver {
    	struct mdio_driver_common mdiodrv;
    
    	/*
    	 * Called during discovery.  Used to set
    	 * up device-specific structures, if any
    	 */
    	int (*probe)(struct mdio_device *mdiodev);
    
    	/* Clears up any memory if needed */
    	void (*remove)(struct mdio_device *mdiodev);
    };
    
    /include/linux/phy.h
    
    struct phy_driver {
    	struct mdio_driver_common mdiodrv;
    	u32 phy_id;
    	char *name;
    	u32 phy_id_mask;
    	const unsigned long * const features;
    	u32 flags;
    	const void *driver_data;
    
    	/*
    	 * Called to issue a PHY software reset
    	 */
    	int (*soft_reset)(struct phy_device *phydev);
    
    	/*
    	 * Called to initialize the PHY,
    	 * including after a reset
    	 */
    	int (*config_init)(struct phy_device *phydev);
    
    	/*
    	 * Called during discovery.  Used to set
    	 * up device-specific structures, if any
    	 */
    	int (*probe)(struct phy_device *phydev);
    	
     	/*其余部分......*/
    };
    

    3.流程

    3.1 总线和驱动的注册

    总线和通用phy驱动的注册主要在phy_init函数中进行,可以看出这是个系统初始化函数:

    /drivers/net/phy/phy_device.c
    
    static int __init phy_init(void)
    {
    	int rc;
    
    	rc = mdio_bus_init();
    	if (rc)
    		return rc;
    
    	features_init();
    
    	rc = phy_driver_register(&genphy_c45_driver, THIS_MODULE);
    	if (rc)
    		goto err_c45;
    
    	rc = phy_driver_register(&genphy_driver, THIS_MODULE);
    	if (rc) {
    		phy_driver_unregister(&genphy_c45_driver);
    err_c45:
    		mdio_bus_exit();
    	}
    
    	return rc;
    }
    
    int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
    {
    	int retval;
    
    	/* Either the features are hard coded, or dynamically
    	 * determined. It cannot be both.
    	 */
    	if (WARN_ON(new_driver->features && new_driver->get_features)) {
    		pr_err("%s: features and get_features must not both be set\n",
    		       new_driver->name);
    		return -EINVAL;
    	}
    
    	new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY;
    	new_driver->mdiodrv.driver.name = new_driver->name;
    	new_driver->mdiodrv.driver.bus = &mdio_bus_type;
    	new_driver->mdiodrv.driver.probe = phy_probe;
    	new_driver->mdiodrv.driver.remove = phy_remove;
    	new_driver->mdiodrv.driver.owner = owner;
    
    	retval = driver_register(&new_driver->mdiodrv.driver);
    	if (retval) {
    		pr_err("%s: Error %d in registering driver\n",
    		       new_driver->name, retval);
    
    		return retval;
    	}
    
    	pr_debug("%s: Registered new driver\n", new_driver->name);
    
    	return 0;
    }
    
    /drivers/net/phy/mdio_bus.c
    
    int __init mdio_bus_init(void)
    {
    	int ret;
    
    	ret = class_register(&mdio_bus_class);
    	if (!ret) {
    		ret = bus_register(&mdio_bus_type);
    		if (ret)
    			class_unregister(&mdio_bus_class);
    	}
    
    	return ret;
    }
    

    可见总线和驱动的注册最终都调用了linux设备模型中的bus_register函数和driver_register函数。

    3.2 设备注册

    phy子系统设备包括mii_bus设备和phy_device设备,是在以太网控制器驱动注册后进行注册的。xilinx提供的macb以太网控制器驱动遵循典型的网络设备驱动架构,主要是构建net_device结构体并调用register_netdev函数注册。之后便会进入phy芯片的探测和注册流程,主要在macb_mii_init函数中进行。流程如下:

    Created with Raphaël 2.2.0 macb_mii_initmdiobus_allocof_mdiobus_registermacb_mii_probereturn

    3.2.1 mdiobus_alloc

    mdiobus_alloc分配了mii_bus结构体,如前所述,mii_bus结构体代表mdio总线本身,是总线上挂接的mido设备的父设备,其本身又从属于macb控制器,因此它的parent是对应macb的net_device结构体。在该结构体中还提供了mdio总线的读写方法。

    3.2.2 of_mdiobus_register

    of_mdiobus_register注册mii_bus结构体并扫描phy设备。

    Created with Raphaël 2.2.0of_mdiobus_register mdiobus_registerof_mdiobus_register_phy设备树中phy节点信息是否遍历完?returnyesno

    mdiobus_register最终会调用device_register将mii_bus设备注册进设备模型,之后获取设备树中记录的phy节点信息并调用of_mdiobus_register_phy探测并创建phy_device设备。

    Created with Raphaël 2.2.0 of_mdiobus_register_phy get_phy_devicephy_device_registerreturn

    get_phy_device调用get_phy_id读取phy芯片的id号,然后调用phy_device_create。phy_device_create函数分配了phy_device结构体并对其进行初始化。

    /drivers/net/phy/phy_device.c
    
    struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
    				     bool is_c45,
    				     struct phy_c45_device_ids *c45_ids)
    {
    	struct phy_device *dev;
    	struct mdio_device *mdiodev;
    	int ret = 0;
    
    	/* We allocate the device, and initialize the default values */
    	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
    	if (!dev)
    		return ERR_PTR(-ENOMEM);
    
    	mdiodev = &dev->mdio;
    	mdiodev->dev.parent = &bus->dev;
    	mdiodev->dev.bus = &mdio_bus_type;
    	mdiodev->dev.type = &mdio_bus_phy_type;
    	mdiodev->bus = bus;
    	mdiodev->bus_match = phy_bus_match;
    	mdiodev->addr = addr;
    	mdiodev->flags = MDIO_DEVICE_FLAG_PHY;
    	mdiodev->device_free = phy_mdio_device_free;
    	mdiodev->device_remove = phy_mdio_device_remove;
    
    	/*......*/
    	mutex_init(&dev->lock);
    	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
    	/*......*/
    	if (!ret) {
    		device_initialize(&mdiodev->dev);
    	} else {
    		kfree(dev);
    		dev = ERR_PTR(ret);
    	}
    
    	return dev;
    

    可见,phy_device_create中设置了phy_device设备的父设备为mii_bus设备,设置phy_device设备对应的总线为mdio_bus_type。
    值得注意的是,创建phy_device设备后,of_mdiobus_register_phy将phy_device中device结构体的of_node成员设置为设备树中的phy节点,以便后续可以通过设备树节点直接查找到phy_device结构体。

    /drivers/of/of_mdio.c
    
    static int of_mdiobus_register_phy(struct mii_bus *mdio,
    				    struct device_node *child, u32 addr)
    {
    	/*......*/
    	
    	phy = get_phy_device(mdio, addr, is_c45);
    	
    	/*......*/
    	
    	/* Associate the OF node with the device structure so it
    	 * can be looked up later */
    	of_node_get(child);
    	phy->mdio.dev.of_node = child;
    	phy->mdio.dev.fwnode = of_fwnode_handle(child);
    	
    	/*......*/
    	
    	/* All data is now stored in the phy struct;
    	 * register it */
    	rc = phy_device_register(phy);
    	
    	/*......*/
    }
    

    然后,在phy_device_register中首先调用mdiobus_register_device将该phy_device添加进mii_bus的mdio_map数组中,最终调用device_add将phy_device注册进驱动模型并初始化该phy_device的phy状态机。
    在linux设备模型中,device_add是一个重要的函数,它会调用kobject_add将device注册进sysfs,然后调用bus_add_device和bus_probe_device。bus_add_device将设备挂接到其总线(这里即mdio_bus_type)的设备列表中。bus_probe_device将遍历总线上已注册的所有驱动程序,调用总线的match函数检查驱动是否能和该设备匹配。若匹配则将设备和驱动程序绑定,然后调用驱动的probe函数。在笔者所做的项目中,使用的phy芯片并不能在这一步匹配上。

    3.2.3 macb_mii_probe

    macb_mii_probe初始化和启动phy硬件,其主要调用了of_phy_connect函数。而of_phy_connect函数在通过设备树节点信息获取对应的phy_device设备后最终调用了phy_attach_direct函数。

    Created with Raphaël 2.2.0phy_attach_direct d->driver = &genphy_driver.mdiodrv.driverphy_probedevice_bind_driverphy_init_hwphy_resumereturn

    phy_attach_direct判断phy_device是否绑定了phy驱动,如果没有的话则将通用phy驱动genphy_driver作为phy_device的驱动,然后调用genphy_driver的probe函数,即phy_probe函数进行初始化处理,随后调用device_bind_driver将设备和驱动正式绑定。最后调用phy_init_hw和phy_resume初始化和唤醒Phy硬件使其开始工作。至此,phy设备的注册就告一段落了。

    4 总结

    通过对linux phy子系统的结构体和流程进行分析可以发现,linxu phy子系统是一个典型的总线、设备和驱动架构,总线和phy驱动在系统初始化时注册,而设备则是在以太网控制器驱动注册函数中根据设备树的信息进行创建和注册。注册后设备模型会调用总线的match进行设备和驱动的匹配,若未能匹配成功则使用通用phy驱动。

    5 参考资料

    源码:linux-5.5.2和xilinx-linux-master

    展开全文
  • 粉尘监测仪采用STM32控制粉尘传感器并将数据通过串口传输到ZigBee终端设备,ZigBee终端设备通过ZigBee网络传输到ZigBee协调,ZigBee协调通过串口传输到Gokit2,Gokit2连接到路由器最终通过以太网连接到云服务器...
  • 基于TCP/IP协议的以太网已成为工业标准,随着以太网的发展,以及嵌入式Web服务器发展为网络中的越来越小的网络节点,为嵌人式web在工业中的应用提供了机会。本文研究的课题就是利用Web浏览器监制USS协议变频。要...
  • 赛恩科技(Cyan)已经开发出6款配备有以太网MAC层的eCOG1X微控制器,并已进入完全投产阶段。为了削减以太网应用中的原料单,赛恩科技还移植和验证了两套免费以太网协议栈的性能;这两套免费协议栈允许eCOG微控制器解决...
  • 其中ETH232GH、ETH232GL1是带光电隔离的以太网/串口转换,实现了以太网、电源、串口的三方隔离。 我们对国内外多种以太网串口服务器进行了比较试验,ETH232系列是少数能够成功用起来的产品之一,而且是最容易用...
  • 控制无线继电视频: ENC28J60 以太网开发板资源介绍: 1.采用miniUSB供电(5V);128 2.主控芯片为STM32F103RBT6,以太网芯片ENC28J60; 3.集成的传感器:温度芯片、温湿度传感器、咪头、光敏电阻、红外接收头、NRF24...
  • TCP/IP详解 卷1:协议--源代码

    热门讨论 2012-10-19 12:27:56
    该资料是《TCP/IP详解 卷1:协议》的源代码 对应的书籍资料见: TCP/IP详解 卷1:协议(09年度畅销榜TOP50)(08年度畅销榜TOP50) http://download.csdn.net/detail/fksec/4657587 基本信息 原书名: TCP/IP ...
  • 1.EI 可以通过SOCKET的方法进行通讯,即控制什么时候开始拍照检测,并将检测的数据 返回。 2,利用上述的SOCKET方法(EI 带的例程),写了一个软件:一方面和PLC通讯,另一方面和EI软件通讯。 3,跟...
  • SEED-HPS6455的主要特点有:  DSP处理器:TMS320C6455BZTZ2,主频1200MHz; ...FPGA DDR2控制器测试 ADC/DAC PLL测试 DSP 控制LED DSP DDR2控制器测试 DSP MAC控制Gbit PHY 实时FFT PCI接口测试
  • Allwinner H2 + / H3以太网控制器 环回以太网控制器 文件系统: 虚拟文件系统(VFS) 临时文件系统(TmpFS) Linnenbank文件系统(LinnFS) 网络(IP,UDP,ICMP,ARP) POSIX,ANSI C库 动态和共享内存 全自动...
  • 180 MHz ARM:registered: Cortex:trade_mark:-M3 LPC1857微控制器:1 MB闪存,136 kB SRAM,16 kB EEPROM SCTimer/PWM子系统 Quad SPIFI接口 两个12 Mbps USB控制器 两个CAN 2.0B控制器 10/100以太网 图形LCD控制器 ...
  • Java访问权限控制代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...
  • 书中所有程序代码1章 51单片机开发基础 第一篇 输入输出系统 第2章 单片机实现7段数码管显示 第3章 基于MAX7219的8位 第4章 单片机实现液晶显示 第5章 单片机实现电子密码锁 第6章 单片机实现简单间乐发生...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 202
精华内容 80
关键字:

以太网控制器代码1