[MCU] 【BIGTREETECH CB1】控制网口指示灯的亮灭和亮度

tagetage   2023-2-1 20:02 楼主

    BIGTREETECH CB1开发板上有一个百兆网口,网口有2个指示灯,这2个指示灯在没有网线插入的状态下是常亮的,而我又是用WiFi进行通讯和调试,根本不用有线网口,那这2个网口指示灯就显得有些“碍眼”,如果能控制这2个LED灯的亮灭甚至是亮度,就能显示系统或者程序的某些状态,就能起到通知作用。

01.jpg

绿灯和黄灯的作用:
关于以太网口的指示灯的形式和指示功能,并没有统一的成文标准规定,但是灯的作用是显示网络是否正常工作的。
绿灯:绿色灯表示Link up,即绿色灯常亮代表网口连接正常。
黄灯:黄色灯表示Activity,即闪烁代表有数据传输。

这次的软件我选择用busybox中的devmem
BusyBox介绍:
BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的shell。

devmem软件介绍:
在调试中常有直接操作寄存器或者某一物理地址的需求,Busybox中提供了devmem。通过它可以读写物理内存。它的实现借助mmap和/dev/mem,通过mmap将/dev/mem物理地址映射到用户空间,devmem就可以像操作虚拟地址一样进行读写。

/dev/mem介绍:
/dev/mem是物理内存的全镜像。可以用来访问物理内存,可以直接读取和修改寄存器的值,通过读写内存的方式操作GPIO寄存器,使用起来速度比sysfs方式更快。

1,安装devmem
devmem有2个版本,一个是BusyBox软件合集中,名字叫做devmem,另一个叫devmem2,但在Debian中我试验安装了devmem2是不能正常使用的,部分寄存器无法读取,后来查资料发现是系统的问题,见这里“devmem2在Debian上的Bug

所以我这里就只能安装BusyBox软件了。
sudo apt-get install busybox

2,查找硬件电路图
RJ45网口电路

02.jpg

连接器接口底板

03.jpg

连接器接口核心板

04.jpg

处理器IO

05.jpg

经过查询电路可知,网口绿灯由PH3控制,网口黄灯由PH2控制,低电平有效。

3,查询需要设置的寄存器
devmem控制网口指示灯,需要设置的寄存器有:
GPIO基地址0x0300B000

06.jpg

PH_CFG0 (Offset: 0x00FC)PH Configure Register 0 (Default Value: 0x7777_7777)
PH口功能配置寄存器 地址为0x0300B0FC

07.jpg

PH_DAT (Offset: 0x010C)PH Data Register (Default Value: 0x0000_0000)
PH口数据寄存器 地址为0x0300B10C

08.jpg

PH_DRV0 (Offset: 0x110) PH Multi-Driving Register 0 (Default Value: 0x0015_5555)
PH口多重驱动等级寄存器 地址为0x0300B110

09.jpg

先读一下这3个寄存器,看看值是多少

10.jpg

0x77177722---后面数第2,3位是设置PH2,PH3的功能,7代表IO禁止,将它改为1,输出功能。
0x00000000---比特位代表数值,所以PH2,PH3要置1的话要设成0x0000000C
0x00155555---比特位的4,5位代表PH2的驱动能力,比特位的6,7位代表PH3的驱动能力。经过测试比特位设置为00时LED为最亮,设置为11时LED关闭。
编写一个小脚本来循环显示LED亮度。
#----------------------------------------------------
#!/bin/bash
sudo busybox devmem 0x0300B0FC w 0x77171122
sudo busybox devmem 0x0300B10C w 0x0000000C
while [ ture ]
do
  sudo busybox devmem 0x0300B110 w 0x00155505
  sleep 0.5s
  sudo busybox devmem 0x0300B110 w 0x00155555
  sleep 0.5s
  sudo busybox devmem 0x0300B110 w 0x001555A5
  sleep 0.5s
  sudo busybox devmem 0x0300B110 w 0x001555F5
  sleep 0.5s
done
#-----------------------------------------------------
视频:

led

 

总结:
这次试验让我了解devmem这个软件的强大,可以直接读取,修改寄存器,内存等,是非常好的一款调试工具,但是不能胡乱修改,要不系统的部分功能可能丧失或系统死机。这次可以控制网口LED的亮度是因为H616有Multi-Driving Register寄存器,如果其他的CPU没有的话就只能用这方法控制LED亮灭了。网口的LED和亮灭和网口的功能没有关系,如果LED关闭,插上网线还是可以正常联网的,就是没有了LED指示了。

回复评论 (1)

厉害,学些了。!!!!!

点赞  2023-2-2 10:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复