低8位读的全是0
高8位完全没问题
配置寄存器,BUS电压,差分电压,电流这些寄存器,全是低8位读不到,高8位倒是正常
应该按照时序来了啊
读第一个主机应答的话,低8位一直出来的是 0x00
读第一个主机不应答的话,低8位一直出来的是0xff
user5907381:
低8位读的全是0高8位完全没问题
配置寄存器,BUS电压,差分电压,电流这些寄存器,全是低8位读不到,高8位倒是正常
应该按照时序来了啊
读第一个主机应答的话,低8位一直出来的是 0x00
读第一个主机不应答的话,高8位一直出来的是0xff
究竟可能哪里出问题了呢?
user5907381:
纠正:都是低8位读不出动态数据
Kailyn Chen:
回复 user5907381:
应该还是时序问题啊,写的时候,高八位之后要有应答信号,然后再写低8位呢。
您能否把测试的时序图发上来看下呢?
user5907381:
回复 Kailyn Chen:
ID,Time[s],0:I²C: Address/Data
0,0.340342,Start
1,0.340348,Address write: 40
2,0.340381,Write
3,0.340385,ACK
4,0.340395,Data write: 00
5,0.340432,ACK
6,0.340442,Data write: 07
7,0.340479,ACK
8,0.34049,Data write: FF
9,0.340527,ACK
10,0.340534,Stop
11,0.34054,Start
12,0.340546,Address write: 40
13,0.340579,Write
14,0.340583,ACK
15,0.340593,Data write: 00
16,0.34063,ACK
17,0.340638,Start repeat
18,0.340644,Address read: 40
19,0.340677,Read
20,0.340681,ACK
21,0.34069,Data read: 07
22,0.340724,ACK
23,0.340732,Data read: 00
24,0.340766,NACK
25,0.340773,Stop
26,0.341787,Start
27,0.341793,Address write: 40
28,0.341827,Write
29,0.34183,ACK
30,0.34184,Data write: 05
31,0.341878,ACK
32,0.341888,Data write: 10
33,0.341925,ACK
34,0.341935,Data write: 00
35,0.341972,ACK
36,0.34198,Stop这是我逻辑分析仪的结果,我像配置寄存器(地址0)写0X07FF,然后接着把它读出来,高8位能读出07,低8位却是0XFF
读其他寄存器(分流电压、BUS电压、功率、电流、校准)也是这样的情况,已经是严重怀疑是不是我读驱动错了。。。因为在淘宝买过两个模块都是这样,应该不是硬件问题吧
user5907381:
回复 user5907381:
更正一下:主机在高8位后应答的话,低8位是0X00
如果主机收高8位不应答,收的低8位是0XFF
Kailyn Chen:
回复 user5907381:
引脚A0和A2都接的是GND是吗?我看您这里slave address为0X40, 也就是说7bit 从机地址为1000000, 这样的话,从机地址0X40<<1, 即为0X80 才对,所以将地址改为0X80 再看看读取的data是否准确?
user5907381:
回复 Kailyn Chen:
对的,引脚A0和A2都是接的GND 写的是0x80, 他这个分析仪显示的是7位地址+最低位是读写方向 所以是0x01000000
Kailyn Chen:
回复 user5907381:
7bit address + 读写位是没问题的,所以start 之后为1000000 0,即为0X80.
user5907381:
回复 Kailyn Chen:
已经解决了,感谢Kailyn Chen
确实是时序的问题,因为我第一个高字节后的应答后,没有释放SDA(拉高),导致总线占用了,无论读啥都是0,在读字节开始先释放SDA即可