IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> mdio bcm5482访问 -> 正文阅读

[嵌入式]mdio bcm5482访问

查看硬件原理图,5482通过mdio访问自己的寄存器,M4通过cpld对5482进行初始化操作(复位/解复位)

?

可以看到bcm5482的MDC和MDIO用的是port P 的pin4和pin5,所以基地址为GPIO_PORTP_BASE. 对应的分别是引脚4和引脚5,所以由此可以封装出基于gpio的mdio读写功能函数

实际控制:

mdio的作用:

Mac->phy就是mac层通过mdio控制访问phy层的PMD数据的.

Mdio协议了解:

MDC要求由MAC输出,是非周期性的,即不要求提供固定频率的时钟,对于PHY芯片则作为输入,以在上升沿触发MDIO的读写

?

mdio的发送数据分析:

PRE:帧前缀域,为32个连续“1”比特,这帧前缀域不是必要的,某些物理层芯片的MDIO操作就没有这个域。

OP:帧操作码,比特“10”表示此帧为一读操作帧,比特“01”表示此帧为一写操作帧。

PHYAD:物理层芯片的地址,5个比特,每个芯片都把自己的地址与这5个比特进行比较,若匹配则响应后面的操作,若不匹配,则忽略掉后面的操作。

REGAD:用来选择物理层芯片的32个寄存器中的某个寄存器的地址。

TA:状态转换域,若为读操作,则第一比特时MDIO为高阻态,第二比特时由物理层芯片使MDIO置“0”。若为写操作,则MDIO仍由MAC层芯片控制,其连续输出“10”两个比特

DATA:帧的寄存器的数据域,16比特,若为读操作,则为物理层送到MAC层的数据,若为写操作,则为MAC层送到物理层的数据。

MDIO的初始化以及读写函数封装:

#include <stdio.h>
#include <stdint.h>

#define MDC_PORT_BASE	GPIOP
#define MDC_PIN 	GPIO_PIN_4
#define MDIO_PORT_BASE 	GPIOP
#define MDIO_PIN 	GPIO_PIN_5

#define MDC_Set() {GPIOPinWrite(MDC_PORT_BASE, MDC_PIN, 0x10);usleep(100);}
#define MDC_Clr() {GPIOPinWrite(MDC_PORT_BASE, MDC_PIN, 0x0);usleep(100);}
#define MDIO_Set() {GPIOPinWrite(MDIO_PORT_BASE, MDIO_PIN, 0x20);usleep(100);}
#define MDIO_Clr() {GPIOPinWrite(MDIO_PORT_BASE, MDIO_PIN, 0x0);usleep(100);}
#define MDIO_Get()	{GPIOPinRead(MDIO_PORT_BASE, MDIO_PIN);usleep(100);}

define MDC_OUtput() {GPIOPinTypeGPIOutputWrite(MDIO_PORT_BASE, MDC_PIN);usleep(100);}
define MDIO_OUtput() {GPIOPinTypeGPIOutputWrite(MDIO_PORT_BASE, MDIO_PIN);usleep(100);}
define MDIO_INput() {GPIOPinTypeGPIInputWrite(MDIO_PORT_BASE, MDIO_PIN);usleep(100);}
#define MDIO(x) if(x){MDIO_Set();}else{MDIO_Clr();}

void bit_set(uint8_t b)	
{	
	MDC_Clr();	
	MDIO(b);
	MDC_Set();		
}

void bit_get(uint8_t *pb)	
{	
	MDC_Clr();	
	MDIO_Set();	
	udelay(1);	
	*(pb) = (uint8_t)MDIO_Get();
	MDC_Set();	
	udelay(1);	
}

void phy_gpio_init()
{
	unsigned int i; 
	MDIO_INput();
	MDIO_OUtput();
	MDC_OUtput();
	
	//Preamble
	MDIO_Set(1);
	for(i = 0; i < 32; i++)
	{
		MDC_Set();
		MDC_Clr();
	}
	
	MDIO_INput();
}

uint16_t mdio_write(uint8_t phyaddr, uint8_t regaddr, uint16_t data)
{
	int i;
	unsigned int frame = 0;
	
	//ST + write + phy_addr + regaddr + TA
	frame = 0x4000 | 0x1000 | ((phyaddr & 0x1f) << 7) + ((regaddr & 0x1f) << 2) + 0x0002;
	
	MDC_OUtput();
	MDIO_INput();
	for(i = 0; i < 14; i++)
	{
		bit_set(frame &(0x8000 >> i);
	}

	for(i = 0; i < 14; i++)
	{
		bit_set(data &(0x8000 >> i);
	}
	return 0;
}

uint16_t mdio_read(uint8_t phyaddr, uint8_t regaddr, uint16_t* data)
{
	int i;
	unsigned int frame = 0;
	
	//ST + write + phy_addr + regaddr + TA
	frame = 0x4000 | 0x1000 | ((phyaddr & 0x1f) << 7) + ((regaddr & 0x1f) << 2) + 0x0002;
	
	MDC_OUtput();
	MDIO_INput();
	for(i = 0; i < 14; i++)
	{
		bit_set(frame &(0x8000 >> i);
	}
	
	MDIO_OUtput();
	MDC_Set();
	MDC_Clr();
	
	//data
	for(i=0;i<16;i++)
	{
		*data <<= 1;
		bit_get(&b);
		if(b)
			*data |= 0x01;
	}
	return 0;
}

那么封装出来的mdio_read和mdio_write又做什么用呢

主要用作访问bcm5482 phy的相关寄存器。这个时候回到bcm5482的手册查看

?

和1548的phy有些许类似,而里面的phy从0开始。

举例: mdio_read(0,0,&data);

mdio_write(0,0,b100),写100M到bcm5482相应的phy中。?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:14:20  更:2022-10-31 12:14:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 16:02:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码