关于我的工程师论文,我遇到了一个小问题。 我正在使用树莓作为与自定义芯片进行通信的接口-我正在使用i2c工具(i2cdetect i2cget和i2cset)。 芯片-之所以称为定制芯片,是因为我不了解制造商和型号(芯片本身被黑色液体覆盖,因此无法识别)。我找到了负责通信的引脚(因此我找到了Vcc GND SDA和SCL)。使用i2cdetect,我发现芯片的地址为0x73。
我想使用i2cdump从芯片读取某些内容,但是数据一直在变化,并且看起来每个读取的差异都不同:
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: XX 00 XX 00 00 XX 00 XX XX 00 XX XX 00 XX XX XX X.X..X.XX.XX.XXX
10: XX 00 00 XX 00 00 XX XX XX 00 00 XX XX XX XX 00 X..X..XXX..XXXX.
20: XX XX 00 XX XX 00 00 XX XX 00 XX XX XX 00 00 XX XX.XX..XX.XXX..X
30: 00 00 00 00 XX XX 00 XX 00 00 00 00 XX 00 XX 00 ....XX.X....X.X.
40: 00 00 XX 00 00 XX XX XX 00 00 00 XX XX XX XX 00 ..X..XXX...XXXX.
50: XX XX 00 00 XX XX XX XX 00 00 XX 00 XX XX XX 00 XX..XXXX..X.XXX.
60: XX 00 00 00 XX XX XX XX 00 XX XX XX 00 XX XX XX X...XXXX.XXX.XXX
70: 00 00 00 00 XX 00 XX 00 00 XX 00 XX XX XX XX XX ....X.X..X.XXXXX
80: 00 XX XX XX 00 XX 00 XX 00 00 XX 00 00 XX XX XX .XXX.X.X..X..XXX
90: 00 00 00 XX 00 XX XX XX XX 00 00 XX XX XX XX 00 ...X.XXXX..XXXX.
a0: XX 00 00 XX 00 00 XX XX XX 00 00 XX XX XX 00 XX X..X..XXX..XXX.X
b0: XX 00 00 XX XX XX 00 XX XX XX 00 XX XX XX XX 00 X..XXX.XXX.XXXX.
c0: XX XX XX XX XX 00 00 00 XX 00 00 00 XX XX 00 XX XXXXX...X...XX.X
d0: XX XX XX XX XX XX XX XX 00 XX XX XX 00 XX XX 00 XXXXXXXX.XXX.XX.
e0: XX XX XX XX XX XX XX XX 00 XX XX XX 00 XX XX XX XXXXXXXX.XXX.XXX
f0: 00 00 XX XX 00 XX 00 00 00 00 XX XX 00 XX 00 00 ..XX.X....XX.X..
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: XX 00 00 XX XX 00 00 XX XX XX XX XX XX XX XX XX X..XX..XXXXXXXXX
10: 00 00 XX XX XX XX XX XX XX XX XX XX XX 00 00 XX ..XXXXXXXXXXX..X
20: XX XX 00 XX 00 XX XX 00 XX XX XX 00 XX XX XX XX XX.X.XX.XXX.XXXX
30: XX XX XX XX XX XX 00 XX XX 00 XX 00 00 00 XX XX XXXXXX.XX.X...XX
40: 00 XX XX XX XX XX XX XX XX 00 00 XX XX 00 XX 00 .XXXXXXXX..XX.X.
50: XX 00 XX 00 XX XX XX 00 XX XX XX 00 00 00 XX XX X.X.XXX.XXX...XX
60: XX XX XX XX XX XX XX XX 00 00 XX XX 00 XX XX 00 XXXXXXXX..XX.XX.
70: 00 00 XX 00 XX XX XX 00 XX 00 XX XX XX 00 00 XX ..X.XXX.X.XXX..X
80: XX XX XX 00 00 XX XX XX XX 00 XX XX XX XX XX XX XXX..XXXX.XXXXXX
90: 00 XX 00 XX 00 XX 00 00 XX XX XX XX XX XX XX XX .X.X.X..XXXXXXXX
a0: 00 XX XX 00 XX 00 XX 00 00 XX XX XX XX XX XX XX .XX.X.X..XXXXXXX
b0: XX XX XX 00 XX 00 XX XX XX XX XX XX XX 00 00 XX XXX.X.XXXXXXX..X
c0: 00 XX 00 XX XX XX XX 00 00 00 XX XX 00 00 XX 00 .X.XXXX...XX..X.
d0: 00 XX XX XX XX XX XX XX XX XX XX 00 XX 00 00 XX .XXXXXXXXXX.X..X
e0: XX XX 00 XX XX XX XX 00 00 XX XX 00 XX XX XX 00 XX.XXXX..XX.XXX.
f0: 00 XX 00 XX 00 XX XX XX XX 00 XX 00 XX 00 XX XX .X.X.XXXX.X.X.XX
我在Arduino上也有某种嗅探器。因此,我模拟了相同的地址(0x73),并连接到使用该芯片的计算机。我看到必须进行某种身份验证才能解锁芯片以进行读取,因为每次机器向芯片发送以下消息时:
- --MESSAGE---
CC
B9
--END MESSAGE--
Request
- --MESSAGE---
E5
87
D4
D5
B2
76
--END MESSAGE--
Request
- --MESSAGE---
FE
8B
--END MESSAGE--
Request
- --MESSAGE---
17
75
25
F0
49
1A
--END MESSAGE--
Request
- --MESSAGE---
30
45
--END MESSAGE--
Request
- --MESSAGE---
49
2B
7A
29
DE
5
--END MESSAGE--
Request
- --MESSAGE---
62
17
--END MESSAGE--
Request
- --MESSAGE---
7B
19
4F
0
E3
B6
--END MESSAGE--
Request
- --MESSAGE---
94
E1
--END MESSAGE--
Request
- --MESSAGE---
AD
CF
98
8D
C0
E
--END MESSAGE--
Request
也许可以解释一下嗅探器的工作原理。它显示到达我们所连接地址的所有消息(数据包)为(0x73)。 例如,如果嗅探器的地址为0x73,我们发送以下命令:
i2cget -y 1 0x73 0xff
我们将得到这样的答案:
- --MESSAGE---
FF
--END MESSAGE--
Request
当我们发送时:
i2cset -y 1 0x73 0xff 0x01 0x02 0x03
我们得到:
- --MESSAGE---
FF
1
2
3
--END MESSAGE--
因此,如果机器发出请求,则嗅探器显示“请求”。 如果有要设置的内容,我们可以看到它,因为第一个字节是要设置的内存地址,其余字节是要设置的数据。
现在,机器如何立即发送数据以进行设置和请求?
- --MESSAGE---
E5
87
D4
D5
B2
76
--END MESSAGE--
Request
我正在尝试解锁该芯片以重置其值和/或更改它。我没有足够的经验,这是问题所在,但我学得很快。我也无法在互联网上找到有关此案的更多信息。
有什么帮助或想法吗?也许有些事情我做错了,对此我一无所知?