近期做项目,用到SM32F10x系列的芯片,经常使用到IIC总线来做为主从机之间的写命令和读数据,所以也自己去学习了IIC总线。自己也做些小的笔记。
一、IIC总线要实现线与功能,所以SDA和SCL口线必须设置为开漏输出模式,我们使用的MCU硬件接口IIC时,口线会被自动设置成为开漏模式,但有时我们会使用IO口来模拟IIC总线,那么怎么设置口线呢?
①MCU口线支持开漏模式,则直接将SDA和SCL设置为开漏输出。
②MCU不支持开漏模式:
最合理的做法是:当设置口线电平为高电平时,我们将其设置为输入状态,然后利用口线上的上拉电阻将口线拉高,这样即使两边电平不一致时,也不会造成IO口的损坏。
二、IIC总线SDA线是在SCL线为高电平时才有效,在时钟SCL为高电平期间,SDA如果发生电平变化,就会终止或重启IIC总线,所以,在数据传输的过程中,要在SCL为低电平的时候去更改SDA的电平。
三、数据线和信号线构成的通信线路。
四、总线空闲时间:SDA和SCL都保持高电平的时间(一个结束条件和起始条件之间的总线空闲时间)。
五、起始信号:SCL信号保持高电平期间,数据线的电平由高到低跳变。(程序中设置SDA和SCL为高也是有讲究的,SDA应该先拉高,这样可以避免某些状态下产生停止信号)
六、停止信号:SCL信号保持高电平期间,数据线的电平由低到高跳变。
七、应答信号:(ACK)被寻址的设备,接收到一个字节后都必须产生一个应答信号。信号在SCL为高电平期间,接收设备把SDA拉为低电平就可以产生一个应答信号。
。。。。。。未完待续。今后学习过程中在补充!