100I2C通讯啦


SCL:时钟线
SDA:数据线

I2C简述及其硬件概括:

I2C总线上必须加上拉电阻,防止数据错误,且因为有上拉电阻,空闲状态是高电平

I2C是通过主机对从机寻址来传输命令和数据,以此来作为数据接发的通讯,所以对于从机来说必须硬件支持I2C地址接口,不过主机不用,除非主机也同时作为从机

I2C需要硬件支持
从机:也就是如果作为从机的话,从机必须有I2C硬件接口,也就是能有硬件接口做为地址被主机识别,只要满足硬件,CPU都能作为从机。支持从机的CPU本身也能做主机,看具体要求
主机:主机不用支持硬件I2C地址接口,它不用被动被寻地址连接来接发数据,总是主动接发的,也就是自己能过地址和从机建立连接就能以此接发数据。不支持从机的主机是不能做从机的

*************************************************************

I2C的时序概况:只是概况,并非一定,看具体
一个问题:主机没有地址为什么能读到从机的数据,或者说从机接受到读信号时给主机发送信号为什么主机能收到?
1.因为从机接受信息需要满足地址数据信息匹配,才开始开启接受后面信息,而主机不用,主机会持续接受到信息,也就是说从机实际是接受到信息,但是其信息内容因为和地址信息不匹配,所以不开启接受,无视接受到的信息,而主机不会则会不断接受到从机的信息。(主机在开启接受功能的情况下)
2.所以如果有一个时间最好只和一个从机通讯防止数据错乱,且如果有多个主机,则要自己设定给主机鉴别的信息,让主机可以识别该数据应该是那个主机应该来处理,其余无视
3.综上所述,I2C的数据信息是一种广播的形式,对于从机只是根据信息的内容是否匹配硬件地址设置来决定是否接受,而对于主机则没有这个要求全局接受,所以设计时要注意

i2c的数据格式:
一个起始信号,8bit的数据( 根据不同分为发送和读取应答 ),1个应答信号( 也分为读取和发送 ),一个终止信号
可以传输多段数据,用ACK隔开
一般先传地址数据找到器件,且地址数据里还包括了读写命令,然后再根据命令进行读写数据
(一般是7位地址和1位读写信号)
而有些器件有内存地址,像EEROM,则在器件地址后还需再发读写操作的内存地址,再进行读写数据

发送时序
起始信号:SCL高,也就是空闲时,SDA下降沿说明通信开始
终止信号:SCL高,也就是空闲时,SDA上升沿说明通信结束
数据读取:SCL高电平时读取SDA的数据信号,低电平时SDA允许发生电平变化,也就是变化下个为的数据信号。
注意:信号读取时,SDA的电平变化不能在SCL高电平的时候,因为高电平SDA发生变化要不是开始信号要不是终止信号,会让信号出错
也就是说,开始终止信号是SCL为高且不变时,SDA发生变化,而数据读取是SDA在SCL低时已变化好后,SCL变高并把SDA的数据信号读取

应答信号时序:响应发送信号,说明收到发送信号
由接受机发送,当主机是写时为从机发送,当主机是读时则有主机发送
ACK:应答成功,收到低电平
NACK:非应答成功,收到高电平





时序总览:
I2C的时序。
注意:在I2C总线的应用中,通常在总线上加1~10K的上拉电阻,保证总线在空闲时为高电平。
----->I2C总线在空闲时,总线的电平状态为高电平。

(1)开始通信:起始信号Start:当SCL为高电平时,SDA产生一个下降沿,
(2)结束通信:停止信号stop:当SCL为高电平时,SDA产生一个上升沿,
(3)发送1Byte数据:SCL为低电平时,SDA可变化,即发送数据
(4)接收1Byte数据:SCL为高电平时,可以读取SDA的值。
(5)读取应答信号:<1>读取到应答信号ACK;<2>读取到非应答信号NACK。
(6)发送应答信号:<1>发送应答信号ACK;<2>发送非应答信号NACK。
(7)当交互完1B的数据后,从机通过使用1bit的电平来通知交互的状态。
其中ACK用低电平0表示。NACK用高电平1表示。-----即为应答信号.

数据在时钟线SCL为低电平时,被发送;在时钟线SCL为高电平时,被读取。

**********************************************************


EEPROM
(1)常用的EEPROM为AT24Cx
(2)EEPROM的作用是,在系统中保存少量的数据。相比Flash(Flash的擦写次数在10W次左右),
EEPROM的擦写次数就高多了,基本接近无限。通常在工程系统中,会经常访问保存数据的器件,
所有必须保证保存数据的器件有足够多的擦写次数。
(3)EEPROM自己提供了硬件配置地址线。可以通过硬件的方式决定设备的设备地址。
(4)EEPROM支持标准的I2C通信。
(5)1Kb和2Kb的器件中分为8Byte每页;1Kb,8Kb和16Kb的器件为16Byte每页。


EEPROM 几k是指有多少K的位bit,其字节数需要除8

EEROM的内存地址一般是8位
AT24C04系列的EEROM中的高存储系列器件的内存空间,因为地址超过8位,所以在器件地址上提供了内存地址的借位,占用可编辑的硬件地址设置位,存储越高借位越多,8K的甚至没有自己可连接的硬件设置地址,只能连接一个该类器件
A0,A1,A2是可编辑硬件地址
高存储系列器件的将借用这些位使之不可编辑
A0,A1,P0,只剩A0,A1可编辑,P0称为内存地址的借位(这个借位所对应的是内存地址空间的最高位)


AT24C04系列的EEROM的内存,和页边界
其是按页划分,能有多个页存储数据,页内的单位地址存储一个字节的数据,且存储数据时在本页内会自动进行往后的地址偏移存储字节数据,但不会偏移到别的页上,页满会自动跳转到页开头地址,可能会覆盖之前的存储,所以要注意页的边界。到页边界注意翻页

AT系类EEROM的读写概括
写:发送器件地址和写命令——内存地址——写数据
读:发送器件地址和写命令(为了后面写入要读的内存地址位置)——内存地址—— 发送器件地址和读命令——读数据

******************************************

I2C思路及其配置,注意移植性,IO口可以宏定

此处使用IO口模拟时序,并非库提供的函数操作
通过I2C总线协议操作EEPROM(架构)
(1)假设外设地址:0xA0
(2)I2C起始信号函数
(3)I2C停止信号函数
(4)I2C发送ACK信号函数
(5)I2C接收ACK信号函数
(6)I2C发送数据函数
(7)I2C接收数据函数
(8)EEPROM写数据函数
(9)EEPROM读数据函数



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值