I2C core实现的,也就是硬件实现的。如果需要IO模拟,那么就需要
先设置SCL为高-》延时-》设置 SCL为低-》延时 这样就实现了一个时钟周期,也就可以读到1bit的内容。
先解释下下面那个函数的流程
SDA_DDR_IN() 设置SDA的IO端口为输入状态
循环读取
设置SCL为低(时钟) 延时-》低电平
设置SCL为高 (时钟)延时-》高电平
读取SDA的IO状态,并保存到byte中
//上面i=8,循环读区8bit即一个字节后退出
设置时钟电平为低
设置SDA为输出
上面流程类似,ACK bit使得接收者通知发送者已经成功接收数据并准备接收下一个数据。而NACK信号表示发送没有结束,会发起restart信号,这样一次可以读取2个字节或者4个字节的信号,在一次读取多个字节的场景有应用。
具体参考下链接
i2c信号的ACK与NACK
匿名回答于2023-10-03 22:43:53