i2c协议解析

i2c总线上有两根线,一根是数据线SDA,一根是时钟线SCL

在空闲的时候,他们都是高电平

I2C传输数据快速且简便,速率最高可以达到3.4M/s

i2C速率分为S(标准, 100kb/s)、F(快速, 400kb/s)和H(高速, 3.4Mb/s)模式。

基本结构如下图所示:

 

 

1、I2c一个时钟周期里面传输一个位,从高位到低位,一般8位为一个数据

起始的时候:SDA由高变低、SCL为高电平

停止的时候:SDA由低变高、SCL为高电平

起始和结束信号都是由主设备产生的

 

/* START: High -> Low on SDA while SCL is High */
static void i2c_gpio_send_start(struct gpio_desc *scl, struct gpio_desc *sda,
				int delay)
{
	udelay(delay);
	i2c_gpio_sda_set(sda, 1);
	udelay(delay);
	i2c_gpio_scl_set(scl, 1);
	udelay(delay);
	i2c_gpio_sda_set(sda, 0);
	udelay(delay);
}

 

中间设置了一定时间的延迟

 

/* STOP: Low -> High on SDA while SCL is High */
static void i2c_gpio_send_stop(struct gpio_desc *scl, struct gpio_desc *sda,
			       int delay)
{
	i2c_gpio_scl_set(scl, 0);
	udelay(delay);
	i2c_gpio_sda_set(sda, 0);
	udelay(delay);
	i2c_gpio_scl_set(scl, 1);
	udelay(delay);
	i2c_gpio_sda_set(sda, 1);
	udelay(delay);
}

 

scl是先低再高,他也不是一直保持低电平

 

2、bit是位 byte是字节

传输结束从设备拉低SDA,返回主设备一个应答位,当ACK信号为"0"时,说明接收成功;为"1"时,说明接收失败

 

 

 

3、SCL开始的0~6表示的是从设备的地址、7方向位(读1或者是写0)8表示应答位

0~7表示有效数据位

 

下面是关于读和写

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值