TI论坛
直播中

刘高

11年用户 1042经验值
擅长:嵌入式技术
私信 关注
[问答]

DAC8571的I2C通信,SDA无法拉高的原因?


  • DAC8571的I2C通信问题始终无法解决(写入时序是这样的,开始、写入0x98、写入0x10、写入数据高位、写入数据低位、停止),就是说我发完DA芯片地址指令(1001 1000,即0x98)之后,接着应该在第九位将SDA拉高,等着DA芯片的应答,但是问题出现了,发现SDA无法拉高,后来经检查发现是由于DA芯片在第八个脉冲下降沿一到就立即就将SDA拉低了,导致单片机无法在第八个脉冲结束时将SDA拉起,当过了第九个脉冲之后,单片机就可以将SDA拉高了,这是什么原因呢?即使如此,如果我忽略这些,过了第九位之后,我接着发DA的控制指令(0x10),数据的高八位,低八位,转出的电压值也是不正确的,数字信号如图,



回帖(7)

张红

2024-12-23 09:23:53
手册的13 14页开始,对这个每隔8个bit就会出现的ACK信号做了较为详细的描述。第一个ACK就是你说的强制拉低的信号,可以作为单片机判断是否与芯片联系上的信号。如果不想用这个功能,我个人认为直接忽略它即可,但要注意这个需要占用一个bit的时钟。
举报

杨燕

2024-12-23 09:24:01
 你是用的是I/O口模拟的I2C吗?把程序上传看一下
1 举报

袁沁茹

2024-12-23 09:24:13
 你的 init_DAC(void) 中起始条件将SDA和SCL均拉低,这个好像不太对,当总线稳定后主机将SDA拉低但同时保持SCL仍然是高电平表明发送数据开始
举报

陈娟

2024-12-23 09:24:25
芯片手册第16页是这么写的:
I2C protocol starts when the bus is idle, that is, when SDA and SCL lines are stable high. The master then pulls
the SDA line low while SCL is still high indicating that serial data transfer has started. This is called a start
condition, and can only be asserted by the master.
然后在初始化子函数里延迟一段时间后再将SCL拉低备用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分