从 /proc/device-tree/i2c@XXXXX/clock-Frequency 读取 I2C 总线频率

问题描述 投票:0回答:2
我正在开发一些用户空间验证工具。其中我需要验证 i2c 频率。

在我的 DT 文件中,我设置了

clock-frequency = <400000>;

,然后我从用户空间的 
/proc/device-tree/i2c@XXXXX/clock-frequency
 读回它。但我得到了一些垃圾数据。

输出:

root@mymachine:~# od -bc /proc/device-tree/i2c\@XXXXXX/clock-frequency 0000000 000 006 032 200 \0 006 032 200 0000004

它是压缩形式吗?如果是的话我该如何解压?

file

命令的输出:

root@nvidia:/proc/device-tree# file i2c\@7000*/clock-frequency i2c@7000XXXX/clock-frequency: TTComp archive data i2c@7000XXXX/clock-frequency: raw G3 data, byte-padded i2c@7000XXXX/clock-frequency: TTComp archive data i2c@7000XXXX/clock-frequency: raw G3 data, byte-padded i2c@7000XXXX/clock-frequency: TTComp archive data i2c@7000XXXX/clock-frequency: TTComp archive data
    
embedded-linux i2c device-tree
2个回答
1
投票
它没有被压缩,它只是一个原始的二进制无符号 32 位 int 存储的大端字节序。四个字节以八进制显示:0、6、32、200,以十进制显示为 0、6、26 和 128,32 位 int 为 6*65536 + 26*256 + 128 = 400000 .

有很多方法可以解开这个问题;来自 python,在我的 RPi 2 上,当前 i2c 频率为 100000:

>>> import struct; struct.unpack(">I", open('/proc/device-tree/soc/i2c@7e205000/clock-frequency').read()) (100000,)
    

0
投票
尝试使用以下命令显示输出:

od

-txz -Ax /proc/device-tree/i2c@XXXXXX/时钟频率

如果你的时钟频率设置为 100KHz,你应该得到这样的结果:

000000a0860100

000004

交换字节序后,你应该得到:

0x186a0 = 十进制为 100KHz

© www.soinside.com 2019 - 2024. All rights reserved.