am335x phy led problem
问题描述
连接网线的情况下,每次进行软件"reboot",网口的LINK LED能够正常的熄灭,而ACTIVE LED却是亮的。
reboot重启之后,LINK的灯正常变亮,而ACTIVE的灯却灭了.在有数据传输的时,能够正常的闪烁。
将网线拔了,LINK灯灭,ACTIVE灯亮。
如果一直插上网线,每次reboot之后,ACTIVE的灯的没数据通信时,一次是亮的,下一次reboot又灭了,这样交替出现。
Tony Liu, 2016-6-8, Shenzhen
参考链接
Bone A6 (and others) PHY LEDs after reboot
AM335x: Cannot set PRM_RSTTIME register under Linux
Not so warm restart of AM3358 via software?
[U-Boot] am335x_evm: Fix Ethernet LED issue on BeagleBone
Not asserting RESETIN_OUT on beaglebone
AM335x Warm Reset Output Falling time
问题分析
初步分析phy芯片没有复位。测量复位引脚。
由于LAN8710的nRST引脚需要保持低电平时间最小为100us才能够复位。
而连接的AM335x的nRESTIN_OUT引脚输出低电平的时间为700ns左右。
经过SN74LVC1G07DBV开漏输出缓冲器之后,时间也才1us,远没有达到复位的要求,导致复位异常。
解决方法
在datasheet中有提及可以是指寄存器来延长nRESTIN_OUT低电平的时间。
Technical Reference Manual的8.1.7.4 Global Warm Reset有详细介绍。
PRM_RSTTIME.RSTTIME1设置即可
8.1.13.5.2 PRM_RSTTIME Register
在uboot中设置,进行验证
OK335X# md 0x44e00f04 4
44e00f04: 00001fff 00000003 78000017 00000003 ...........x....
OK335X# mw 0x44e00f04 0xffff
OK335X# md 0x44e00f04 4
44e00f04: 00001fff 00000003 78000017 00000003 ...........x....
OK335X# reset
这样最大的信号已经延长到12us左右,但是远没有达到100us,但是ACTIVE LED正常。
可是这样的设置并没有kernel中生效。最后定位到,reboot命令,调用的am335x的 omap_prcm_arch_reset函数
reboot操作启动设置PRM_RSTCTRL Register的RST_GLOBAL_COLD_SW,将其置1,这样一来直接设置的寄存器值都覆盖为默认值,设置就没有效果。
更改为设置RST_GLOBAL_WARM_SW即可,只会讲一部分的寄存器设置为默认值,我设置的PRM_RSTTIME的值并没有因为reboot命令而设置为默认值。
arch/arm/mach-omap2/prcm.c
void (*arch_reset)(char, const char *) = omap_prcm_arch_reset;
static void omap_prcm_arch_reset(char mode, const char *cmd)
{
s16 prcm_offs = 0;
unsigned int val;
if (cpu_is_omap24xx()) {
omap2xxx_clk_prepare_for_reboot();
prcm_offs = WKUP_MOD;
} else if (cpu_is_am33xx()) {
prcm_offs = AM33XX_PRM_DEVICE_MOD;
/* add by Tony, 2016-6-7 */
//将PRM_RSTTIME.RSTTIME1寄存器的值设置成最大0xff,这样一来复位时就会延长低电平波形的长度,延长至12us左右。
omap2_prm_set_mod_reg_bits(0xff,
prcm_offs, AM33XX_PRM_RSTTIME_OFFSET);
//omap2_prm_set_mod_reg_bits(OMAP4430_RST_GLOBAL_COLD_SW_MASK,
// prcm_offs, AM33XX_PRM_RSTCTRL_OFFSET);
//更改
omap2_prm_set_mod_reg_bits(OMAP4430_RST_GLOBAL_WARM_SW_MASK,
prcm_offs, AM33XX_PRM_RSTCTRL_OFFSET);
} else if (cpu_is_omap34xx()) {
prcm_offs = OMAP3430_GR_MOD;
omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0));
} else if (cpu_is_omap44xx()) {
omap4_prminst_global_warm_sw_reset(); /* never returns */
} else {
WARN_ON(1);
}
......
}
当然这不是长远之计,正确的做法是:
- 采用GPIO引脚来控制phy的reset,只要reboot时保证对应的gpio为低电平。
- 将nRST直接上拉,不进行复位。
- 采用硬件上的更改,想详情请留意参考链接第一条。
am335x phy led problem的更多相关文章
- 转:AM335x启动流程(BootRom->MLO->Uboot)
http://blog.chinaunix.net/uid-28458801-id-3486399.html 参考文件: 1,AM335x ARM Cortex-A8 Microprocessors ...
- 常用PC服务器LSI阵列卡配置
通常,我们使用的DELL/HP/IBM三家的机架式PC级服务器阵列卡是从LSI的卡OEM出来的,DELL和IBM两家的阵列卡原生程度较高,没有做太多封装,可以用原厂提供的阵列卡管理工具进行监控:而HP ...
- [TI-Sitara]启动流程
前段时间在准备AM437x启动相关的一些事情,对MLO.SPL等事情也是有些糊涂,于是分享下面这篇文章 转自:http://blog.csdn.net/psvoldemort/article/deta ...
- AM335x内核模块驱动之LED
在Ubuntu的任意可操作的文件才建立text目录 在text中建立zyr-hello.c: #include<linux/kernel.h> #include<linux/modu ...
- am335x -- led 控制
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h&g ...
- am335x gpio分析
/************************************************************************ * am335x_gpio * 本文主要记录am33 ...
- arm Linux 驱动LED子系统 测试
Linux内核在3.0以上引入了设备树概念(具体哪个版本不清楚)在编译内核后需要将与之对应的dtb文件也下载人板子上才能使内核与硬件关联起来. dtb文件是有dts文件编译后生成的:例如 /* * C ...
- csuoj 1507: 超大型LED显示屏
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1507 1507: 超大型LED显示屏 时间限制: 1 Sec 内存限制: 128 MB 提交: ...
- 转!!MAC和PHY的区别
一块以太网网卡包括OSI(开方系统互联)模型的两个层,物理层和数据链路层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准.数据编码和电路等,并向数据链路层设备提供标准接口.数据链路层 ...
随机推荐
- cocos2dx 3.1从零学习(五)——动画
动画是游戏中最重要的表现部分,本篇仅仅是初步学习大部分动画的用法.没有什么原理性的东西,可是样例有非常多,假设有不熟的地方要练一下. 特别是Spawn和Sequence的组合使用,什么时候使用Spaw ...
- 腾讯 OCR 情况
OCR技术之检测篇 https://cloud.tencent.com/developer/article/1101342 OCR技术之数据篇 https://cloud.tencent.com/de ...
- [hihoCoder] #1081 : 最短路径·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 万圣节的早上,小Hi和小Ho在经历了一个小时的争论后,终于决定了如何度过这样有意义的一天——他们决定去闯鬼屋! 在鬼屋门口 ...
- 【Android】20.2 视频播放
分类:C#.Android.VS2015: 创建日期:2016-03-11 一.简介 本节例子和上一节的音频播放例子相似,也是最简单的示例,比如并没有考虑视频播放过程中电话打入的情况,也没有考虑复杂的 ...
- node js 调试方法
1. node-debug tutorial 大家对nodejs调试应该都比较头疼,至少我这个不用IDE写js的人很头疼这个,其实node的生态圈非常好 有非常好的工具和非常潮的开发方式 这里总结了3 ...
- 浅谈CPU,GPU,TPU,DPU,NPU,BPU
https://www.sohu.com/a/191538165_777155 A12宣传的每秒5万亿次运算,用计算机语言描述就是5Tops. 麒麟970 NPU,根据资料是 1.92Tops. 麒麟 ...
- mac下framework联编需要设置的
点击target,然后,在Build Phases里的空白处用鼠标点一下(艹 变态) 这时,点最上面菜单:Editor/Add Build Phases/Add Copy Files Build Ph ...
- Filter method example
The Scala List class filter method implicitly loops over the List/Seq you supply, tests each element ...
- 让input变成不可编辑状态的方法
有时候,我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如使<input type="text" name="input1" value=&qu ...
- js图片转base64并压缩
/* 2015-09-28 上传图片*/ function convertImgToBase64(url, callback, outputFormat){ var canvas = document ...