对比读写,看看能分解的最小功能模块有几个?
至少要写好7个驱动函数:1.启动信号2.等待从机应答信号3.终止信号4.主机发送ACK信号5·主机发送NO_ACK信号6.发送一个字节7.读取一个字节
看好时序图:
空闲时,SDA和SCL都是高电平。
起始信号和停止信号:
SCL=1时,如果是传输数据,SDA电平应保持不变,这样才可以将数据发送出去。如果SDA电平发生了变化,则是启停信号。SCL=0时,SDA上的电平允许变化,变化好了,等SCL=1,SDA电平一直保持到SCL=0,这样就可以将数据传送出去。始信号+地址+寄存器地址+数据+应答............+应答(非应答)+停止信号
好好研究这7个信号:
前面5个看下面的图:
从机应答ACK是SDA=0 ,从机应答NOACK是SDA=1 ,当然都是在SCL=0时写入0或者1,SCL=1时,SDA不能变化…. SCL=0时候不能接受从机的变化。
上面的图5要补充一下:
从机应答是0(SDA=0)表示正确,是1(SDA=1)表示错误
接下来卡发送一个字节:
SCL低电平时,SDA准备好高低电平,到SCL高电平的时间就送出去,SCL稳定高电平的时候,SDA不能动。写高为在先,低位在后,和SPI的MSB一样。
最后是读取一个字节:
SCL低电平时,SDA准备好高低电平,到SCL高电平的时间就读出去,SCL稳定高电平的时候,SDA不能动。写高为在先,低位在后,和SPI的MSB一样。
看图:
接着研究24C02的各个动作的保持时间:
看24C02手册:
我们截图过来:
看看电气参数:
重点看:2线串行 2K(256*8)容量
可靠性很高,虽然容量小……….
使用先看寻址:
再看引脚: