网口芯片SMI接口实现
来源:互联网 发布:淘宝口红代购ysl 编辑:程序博客网 时间:2024/05/01 19:45
最近在用P178G,需要对内部寄存器进行控制,实现各个PHY的开关与VLAN配置,为了替代最初模拟开关实现的“伪”开关,通过ds得知可以使用SMI接口进行读写寄存器,控制IC工作状态。
时序与格式如图:
该芯片前置码与其他很多芯片的32Bit高电平不同,按32bit实现也可以通用。常规SMI各个位域说明如下:
PRE:帧前缀域,为32个“1”比特,这帧前缀域不是须要的,某些物理层芯片的MDIO操纵就没有这个域。
OP:帧操纵码,比特“10”默示此帧为一读操纵帧,比特“01”默示此帧为一写操纵帧。
PHYAD:物理层芯片的地址,5个比特;
REGAD:用来选择物理层芯片的32个存放器中的某个存放器的地址;
TA:状况转换域,若为读操纵,则第一比特时MDIO为高阻态,第二比特时由物理层芯片使MDIO置“0”。若为写操纵,则MDIO仍由MAC层芯片控制,其输出“10”两个比特。
DATA:帧的存放器的数据域,16比特,若为读操纵,则为物理层送到MAC层的数据,若为写操纵,则为MAC层送到物理层的数据。
IDLE:帧停止后的余暇状况,此时MDIO无源驱动,处高阻状况,但一般用上拉电阻使其处在高电平,即MDIO引脚须要上拉电阻。
示例Code:
void SMI_Write(unsigned char phy_add, unsigned char reg_add, unsigned int data){unsigned int i;ISR_DIS(); //interrupt disabled for (i = 0; i<32; i++)//send preamble,32 1 {SMI_1();}{//01 //send start SMI_0();SMI_1();}{//01 //send op code,write SMI_0();SMI_1();}for (i = 0; i<5; i++)//send phy address {if (phy_add & 0x10)SMI_1();//1 elseSMI_0();//0 phy_add <<= 1;}for (i = 0; i<5; i++)//send reg address {if (reg_add & 0x10)SMI_1();//1 elseSMI_0();//0 reg_add <<= 1;}{//10 //send turn around SMI_1();//1 SMI_0();//0 }for (i = 0; i<16; i++)//send data {if (data & 0x8000)SMI_1();//1 elseSMI_0();//0 data <<= 1;}<pre name="code" class="cpp"> ISR_EN()<span style="font-family: Arial, Helvetica, sans-serif;">; //interrupt enabled </span>}
0 0
- 网口芯片SMI接口实现
- SMI接口简介(基于IP113F芯片的学习)
- MDIO/MDC(SMI)接口
- smi接口介绍
- MDIO/MDC(SMI)接口
- SMI接口,SMI帧结构,MDC/MDIO
- MDIO/MDC(SMI)接口总结
- SMI
- 接口芯片
- 以太网 串行管理接口 SMI MDIO
- 以太网 串行管理接口 SMI MDIO
- SMI总线接口,SMI帧结构在MDC和MDIO接口上的流程简述
- USB 接口芯片
- 常用USB接口芯片
- 串行接口芯片16550
- USB HID接口芯片
- 芯片与软件的接口
- 可编程串行接口芯片Intel8251A
- 【散文】 醉月湖畔,为谁染红妆
- Perl split函数用法指南 / /同' '
- openstack核心路由和扩展路由及路由对应的api函数调用流程分析
- HTML5 Audio/Video 标签,属性,方法,事件汇总
- 函数对象-摘自《C++沉思录》Andrew Koenig
- 网口芯片SMI接口实现
- POJ 2255 二叉树的重建
- 埃迪·加马拉 - 文学经理
- iOS 导航栏的一些使用属性记录(备忘)
- PHP Linux定时任务设置
- 地热发电101
- 经纬财富:辽源市场的变化,需要技术的支持
- 计算机网络(四)
- sprintf函数的用法