I2C通讯
原理
SCL,SDA挂载上拉电阻,保持空闲状态,有最大设备数限制,有传输速率分别

软件层面
空闲状态:两个都处于高电平
应答信号:主机从机都可以发送,告诉发送者我收到数据了
停止信号:使通讯状态保持空闲
有效性:时钟线处于高电平期间,数据才有效
信号分析
起始信号:时钟线处于高电平期间,数据线SDA从高电平往低电平跳变
停止信号:时钟线处于高电平期间,数据线从低电平往高电平跳变
应答信号:在发送8字节数据后,时钟线SCL处于第九个高电平期间,SDA检测到高电平就是NACK(默认上拉电阻下就是高定平),SDA检测到低电平就是ACK(从机若应答,发送低电平,拉低SDA电平)
应答完再停止
代码
起始信号
停止信号
检测应答信号
发送应答信号
发送非应答
发送一字节数据
数据接收
总结:
会发现每次操作完都把SCL拉低
AT24C02实操
AT24C02是一款2K BIT(256Byte)的eeprom,有32页,每页8Byte,有WP写保护引脚,当该引脚置高电平,只可读不可写
地址方面:前四位固定1010固定,中间三位由三个引脚A2 A1 A0决定,最后一位地址由数据传输方向决定,当读的时候最后一位为0,写的时候最后一位为1
对本精英开发板来说 写地址为0XA0,读地址为0XA1
前7位称设备地址,真正编程的时候操作的八位地址称作通讯地址
**写操作:**AT24C02支持字节写模式和页写模式。
字节写模式就是一个地址一个数据进行写。
页写模式就是连续写入数据。只需要写一个地址,连续写入数据时地址会自增,但存在页的限制,超出一页时,超出数据覆盖原先写入的数据。但读会自动翻页。
**读操作:**AT24C02支持当前地址读模式,随机地址读模式和顺序读模式
当前读模式是基于上一次读/写操作的最后位置继续读出数据。
随机地址读模式是指定地址读出数据,一个字节一个字节的读
顺序读模式是连续读出数据,自动翻页
IO口配置SCL推挽输出 SDA 开漏输出
输出时:开漏输出的特点是能输出低电平,无法输出高电平,但可以被外部上拉至高电平,主机(MCU)输出0,可以拉低信号,来实现低电平发送,主机输出1(实际不起作用),由外部上拉电阻上拉,实现高电平发送。
输入时:当SDA作输入时,设置输出1状态,此时因为MCU无法输出1,相当于释放了SDA脚,此时外部器件可以主动拉低SDA脚/释放SDA脚(同样由上拉电阻提供“输出1的功能”),实现SDA脚的高低电平变化。由于开漏输出模式下,MCU还是可以读取IDR状态寄存器,来获取引脚高低电平,因此MCU读取IDR,即可获得SDA脚的高低电平状态,从而实现输入检测。
Last updated