YT8531 YT8521驱动调试(二)

这篇具有很好参考价值的文章主要介绍了YT8531 YT8521驱动调试(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

参考

YT8531 YT8521驱动调试(一)_大牛攻城狮的博客-CSDN博客

原理图

也参考上述提到博客

不同点

接一,针对 YT8521

其实两个phy的外围接口电路涉及基本上移植,不通的就是phy地址的设计

但是YT8521实际使用过程中,需要配置两个寄存器

如下所示

mdio eth0 0x1e 0xa001
mdio eth0 0x1f 0x8160

翻了一下手册,这个寄存器地址是

YT8531 YT8521驱动调试(二)

 YT8531 YT8521驱动调试(二)

调试的问题最终还是发现原理图的设计有问题,只是通过上述MDIO指令可以规避

一个是mode_sel的选择是否正确

一个是cfg_ldo电压选择是否正确

这上述配置,在原理图设计的时候都可以通过IO,YT8521的管脚进行选择

例如如下设计

YT8531 YT8521驱动调试(二)

YT8531 YT8521驱动调试(二)

 这里还设计一个问题就是在系统中使用mdio指令

mdio指令一般在uboot中使用的多,如下使用方法

mdio - MDIO utility commands

Usage:
mdio list                       - List MDIO buses
mdio read <phydev> [<devad>.]<reg> - read PHY's register at <devad>.<reg>
mdio write <phydev> [<devad>.]<reg> <data> - write PHY's register at <devad>.<reg>
mdio rx <phydev> [<devad>.]<reg> - read PHY's extended register at <devad>.<reg>
mdio wx <phydev> [<devad>.]<reg> <data> - write PHY's extended register at <devad>.<reg>
<phydev> may be:
    <busname>  <addr>
    <addr>
    <eth name>
<addr> <devad>, and <reg> may be ranges, e.g. 1-5.4-0x1f.

=>


=> mdio list

这里提供一种linux系统mdio的配置方法

使用下面代码描述了在用户层访问smi/mdio总线, 读写phy芯片寄存器的通用代码。Linux内核2.6以上通用。需要根据自己的交叉编译环境,进行交叉编译,进行搭建交叉编译环境

如下所示,提供一个可以使用makefile的编写,需要替换自己的交叉编译环境

arm_cross_gcc = /home/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc


objects = mdio.o
mdio: $(objects)
	$(arm_cross_gcc) -o mdio $(objects)


%.o : %.c
	$(arm_cross_gcc) -c $<

.PHONY:clean
clean:
	rm mdio $(objects)
	@echo clean finish

将下面代码编译后,将可执行文件mdio

如下图所示

YT8531 YT8521驱动调试(二)

 

使用方法举例:

mdio eth0 1 读取phy寄存器1的数值

mdio eth0 0 0x1120 将0x1120写入 phy寄存器1

eth0 为mac层控制器的名称, 一般为eth0 或mgmt0

mdio.c代码如下,看起来还是比较容易理解的,主要是使用linux系统mii IO_CTL

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <linux/mii.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/ioctl.h>

#include <net/if.h>

#include <linux/sockios.h>

#include <linux/types.h>

#include <netinet/in.h>


#define reteck(ret) \

if(ret < 0){ \

printf("%m! \"%s\" : line: %d\n", __func__, __LINE__); \

goto lab; \

}


#define help() \

printf("mdio:\n"); \

printf("read operation: mdio reg_addr\n"); \

printf("write operation: mdio reg_addr value\n"); \

printf("For example:\n"); \

printf("mdio eth0 1\n"); \

printf("mdio eth0 0 0x12\n\n"); \

exit(0);


int sockfd;


int main(int argc, char *argv[])

{


if(argc == 1 || !strcmp(argv[1], "-h")){

help();

}


struct mii_ioctl_data *mii = NULL;

struct ifreq ifr;

int ret;

memset(&ifr, 0, sizeof(ifr));

strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);


sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);

reteck(sockfd);

//get phy address in smi bus

ret = ioctl(sockfd, SIOCGMIIPHY, &ifr);

reteck(ret);

mii = (struct mii_ioctl_data*)&ifr.ifr_data;


if(argc == 3){

mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0);


ret = ioctl(sockfd, SIOCGMIIREG, &ifr);

reteck(ret);

printf("read phy addr: 0x%x reg: 0x%x value : 0x%x\n\n", mii->phy_id, mii->reg_num, mii->val_out);

}else if(argc == 4){

mii->reg_num = (uint16_t)strtoul(argv[2], NULL, 0);

mii->val_in = (uint16_t)strtoul(argv[3], NULL, 0);


ret = ioctl(sockfd, SIOCSMIIREG, &ifr);

reteck(ret);


printf("write phy addr: 0x%x reg: 0x%x value : 0x%x\n\n", mii->phy_id, mii->reg_num, mii->val_in);

}


lab:

close(sockfd);

return 0;


}

 这样处理后,将mdio放到开发板文件系统的/sbin或者/bin下就可以使用mdio指令,进行愉快的调试了。

当然也可以在启动设置项,配置本文开头提到的0xa001寄存器地址了。文章来源地址https://www.toymoban.com/news/detail-478043.html

到了这里,关于YT8531 YT8521驱动调试(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 方波参考测试信号PI控制调试

    要调试方波参考测试信号的PI控制,可以按照以下步骤进行操作: 确保系统已经正确连接,并且您已经设置了方波参考测试信号的频率和幅值。 配置PI控制器。根据您的控制系统要求,选择适当的PI控制器参数,例如比例增益(Kp)和积分时间(Ki)。这些参数可以根据系统的

    2024年02月10日
    浏览(36)
  • 【实践篇】领域驱动设计:DDD工程参考架构

    不同团队落地DDD所采取的应用架构风格可能不同,并没有统一的、标准的DDD工程架构。有些团队可能遵循经典的DDD四层架构,或改进的DDD四层架构,有些团队可能综合考虑分层架构、整洁架构、六边形架构等多种架构风格,有些在实践中可能引入CQRS解决读模型与写模型的差异

    2024年02月05日
    浏览(48)
  • MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(二)栅极驱动参考

    栅极驱动参考 1.PWM直接驱动 2.双极Totem-Pole驱动器 3.MOSFET Totem-Pole驱动器 4.速度增强电路 5.dv/dt保护 1.PWM直接驱动 在电源应用中,驱动主开关晶体管栅极的最简单方法是利用 PWM 控制其直接控制栅极,如 图 8 所示。 直接栅极驱动最艰巨的任务是优化电路布局 。 如 图 8 中所示,

    2024年01月18日
    浏览(50)
  • STM32 调试TM7711驱动原理图驱动代码

    本文使用工程代码如下 (1条消息) STM32调试TM7711驱动原理图驱动源代码,参考如下博客,有原理图设计资源-CSDN文库 项目选用TM7711,还是很令人吃惊的,主要是有如下几个理由 第一就是便宜 第二精度高 STM32的ADC精度不够,才12bit,TM7711的精度可以,可以提供单通道 24bit 高精度

    2024年01月16日
    浏览(49)
  • Apollo星火计划学习笔记——参考线平滑算法解析及实现(以U型弯道场景仿真调试为例)

    Apollo星火计划课程链接如下 星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2 星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12 参考线在Planning模块的位置     导航规划的路线一般由三个部分组成:Routing、参考线以及轨迹。      Routing: 全局路径

    2024年02月12日
    浏览(36)
  • mtk sensor 驱动调试

      MTK Sensor 分为AP和SCP两大部分,AP是主芯片,SCP是协处理器,都可以负责处理sensor数据。所以在MTK在驱动调试时经常会说sensor是挂AP侧还是挂scp侧。    在AP侧的sensor的调试不是很复杂,一般的步骤是找器件原厂对应的驱动,描述清楚是MTK的哪颗芯片,内核时什么版本。我之前

    2024年02月01日
    浏览(34)
  • 雷赛驱动器调试

    用RS232通讯线连接PC和驱动器 打开参数总表   ① 恢复出厂设置 ② 将Pr4.02改成0x83,使能伺服驱动器 ③ 保存参数 ④ 下发参数到驱动器 ⑤ 显示成功后,断电重启。   连接485,设置串口:波特率9600(默认),8N1。 MODBUS协议: ID为1为例(驱动器上旋钮波动开关设置ID),发送

    2024年02月11日
    浏览(41)
  • 【嵌入式Linux驱动】驱动开发调试相关的关系记录

    https://www.processon.com/mindmap/64537772b546c76a2f37bd2f

    2024年02月02日
    浏览(52)
  • linux驱动调试之Debugfs

    本期主题: linux驱动调试之Debugfs 往期链接: linux设备驱动中的并发 linux设备驱动中的编译乱序和执行乱序 linux设备驱动之内核模块 linux字符驱动 linux字符驱动之ioctl部分 linux字符驱动之read、write部分 在内核的开发过程中,我们希望有一些能够在用户空间获取信息的简单方法

    2024年02月14日
    浏览(49)
  • visual studio 2019 调试驱动

    搭建驱动开发环境 搭建环境需要两台机器,本地机器用来代码开发,一台虚拟机用来测试和安装驱动 ,搭建驱动开发环境参考。 visual studio 添加调试机器 驱动工程的属性 - Driver Installer - Deployment, 点击…按钮添加目标机器用来安装和测试驱动。 进入添加配置窗口,添加机器

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包