单片机iic总线问题

2025-04-16 13:11:54
推荐回答(1个)
回答1:

I2C总线理解上的难点就是在于
ACK和NACK的使用上,估计你就没看明白I2C协议。简要的给你说下:ACK的时候,SCL=1,表示时钟拉高,增加Delay是为了等待SDA的数据回传(这时master的SDA是输入态,slave的SDA是输出态,SDA==0
即表示Slave响应正确)。ACK主要出现在Command、Address、Data数据传输时。
而NACK主要是在读数据后,结束位前出现,这时Master的SDA为输出,Slave的SDA为输入,SDA需要输出‘1’,告知Slave即将读操作结束。
反观你的代码,ACK中强加Delay不是不行,但很难做的通用兼容。建议考虑判断Sda状态,同时需要有错误退出机制。
最后,你还是再看下I2C
Specification
吧,另外,I2C总线是OC门,注意这个特点,应用很灵活。