【问题标题】:trying to read and write to a specific register of ethernet switch using uboot尝试使用 uboot 读取和写入以太网交换机的特定寄存器
【发布时间】:2021-06-26 21:38:39
【问题描述】:

我是 linux/u-boot 的新手,通常只是读写特定的寄存器。

我有一个 KSZ9897 以太网交换机,我的目标是使用 u-boot i2c 命令将位 [15:13] 设置为 001,以将交换机置于正确的测试模式。

以下屏幕截图是我尝试读取/写入的寄存器:

KSZ9897 datasheet

这部分的从机地址是1011_111 = 0x5F

我试图读取/写入的 16 位寄存器的地址是 [0xN112-0xN113]

PHY 寄存器为 0x09(我不确定这与图片是否相符,但这可能是我遇到问题的原因)

使用 u-boot,我正在发送以下命令:

 #i2c md 0x5F 0xN112.2 0x10

它读回以下内容:

0000: 00 98 97 00 00 00 00 00 00 00 00 00 00 00 00 4c ......L

我怀疑这只是读取从 0x0000 开始的前 16 个地址值。我知道这一点是因为 98 和 97 值与应该位于地址 0x0001 和 0x0002 的默认值相匹配。

谁能告诉我我在这里做错了什么以及如何访问寄存器 0x​​09?我想我正在使用正确的 u-boot 语法,但显然有些东西不在这里。任何帮助将不胜感激。

【问题讨论】:

    标签: ethernet i2c u-boot microchip


    【解决方案1】:

    i2c命令错误,因为第三个参数必须是16进制数而N不是hexa,switch datasheet告诉:

    地址字段“N”指定端口号。 “N”的有效值对于某些寄存器为 1 到 7,对于 MAC 端口特定寄存器为 6 到 7,对于 PHY 特定寄存器为 0 到 5。

    你应该这样写:i2c md 0x5f 0x1112 1,最后一个参数是你读取的字节数。

    【讨论】:

    • 这很有意义。我应该意识到 N 不是有效的六进制数。
    • 我现在还有一个关于写入特定位的问题。我的目标是将 [0 0 1] 写入地址 0x1112 的位 [15:13]。我相信我应该正确使用 .2 地址修饰符,因为这个地址位置是 0xN112-0xN113?要编写这些位,我的命令会是什么样子?当我使用时,我似乎只能写入第一位:#i2c mw 0x05f 0x1112.2 0x01 10 它显示:1112:01 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 ..... .......0... 写第 15 位对您来说是否合适?如果是这样,我将如何写入第 14 位和第 13 位?
    • 只需读出,修改位(使用按位运算符)并回写,最后一个参数应为 1,因为您一次只能写入一个寄存器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2019-12-24
    • 2015-07-03
    相关资源
    最近更新 更多