如果要通过寄存器控制硬件电路,至少需要定义两个字节数据
1.一个字节是我们要读写哪个寄存器,也就是指定寄存器地址。
2.这个地址下,存储器存的内容(写入内容就是控制电路,读取内容就是获取电路的状态)
单片机读取自己的寄存器,可以通过内部的数据总线来完成,直接用指针操作
模块中的寄存器在单片机的外面,因此就需要通信协议,连接尽可能少的线,实现单片机读写外部模块寄
存器的功能。
根据上面的几个方面的问题,总以为以下三点:
所有2C设备的SCL连在一起,SDA连在一起
设备的SCL和SDA均要配置成开漏输出模式(低电平有效)
SCL和SDA各添加一个上拉电阻,阻值一般为4.7K2左右
外部通过外界两个上拉电阻,来将低电平拉到高电平
这是一个弱上拉:举个例子:
SCL和SDA是一根杆子,为了防止向上推杆子,有人向下拉杆子,造成冲突。
我们就规定所有的人不可以向上推杆子,只能选择向下拉和松手。
然后我们外置一根弹簧向上拉,要是想输出低电平就往下拽。那么弹簧就会拉下来
而想输出高电平,松手,弹簧就会回弹到高电平。
因此:不管多少人想拉杆子,杆子都不会出现同时强拉和强推的情况。
避免了引脚的频繁切换。开漏加弱上拉的模式,同时兼具了输入和输出的功能。
向输出,就去拉杆子,想输入放手。因为开漏模式下,输出高电平就相当于断开引脚。
所以在输入之前直接输出高电平。不需要再切换成输入模式。
并且存在线与的现象,就是只要有一个或者多个设备输出低电平,总线就处于低电平。
只有所有的设备都输出高电平,总线才处于高电平。,2c可以利用这个电路特征执行多主机模式
下的时钟同步和总线仲裁。