IIC协议和应用程序访问

IIC是简单实用的串行通信协议,只有两根线线,SDA 数据信号和 SCL时钟信号。单片机和外设通信使用的比较多,其实PC中也有使用串行通信协议,比如SMBUS.(还有LPC SPI 这些)

一  硬体:

IIC总线上只有一个主设备,多个从设备。主设备发起start信号带有设备地址,对应设备接受命名完成对应操作。

地址:地址有7bit ,前4bit是芯片厂商编号,后3位是芯片的硬体编织(A0A1A2这三个pin的状态)。

总线上有上拉电阻,所以闲置状态为高电平。


数据采样:时钟上升沿采样数据线,所以时钟脉冲期间要保持数据不变。时钟低电平时才可以改变数据。

SCL高电平,SDA数据稳定


一 :协议


1 信号

   start 信号:SCL保持高电平,SDA由高到底 。用来标记传输开始

   stop信号:SCL保持高电平,  SDA由底到高。用来标记传输结束

   ACK应答信号:第9个时钟脉冲前 ,SCL低电平 , SDA底电平。(总线闲置是高电平状态)

Master每发送完8bit数据后等待Slave的ACK。即在第9个clock,若从IC发ACK,SDA会被拉低。

若没有ACK,SDA会保持高电平,MASTER需要从新start重发或者stop


2 写时序

   start + device address+R/W   (设备地址)

   ACK (从设备返回的应答)

   word address (要操作的寄存器地址)

   DATA (要写入的数据)

写寄存器的标准流程为:
1. Master发起START
2. Master发送I2Caddr(7bit)和w操作0(1bit),等待ACK
3.Slave发送ACK
4. Master发送reg addr(8bit),等待ACK
5.Slave发送ACK
6.Master发送data(8bit),即要写入寄存器中的数据,等待ACK
7.Slave发送ACK
8. 第6步和第7步可以重复多次,即顺序写多个寄存器
9.Master发起STOP

I2C学习笔记 - dp - dp: 生活的脚步,进步的点滴...




3 读时序

读要比写复杂一些,因为要先把要读的地址写入从设备,再读从设备。

读寄存器的标准流程为:
1. Master发送I2Caddr(7bit)和w操作1(1bit),等待ACK
2.Slave发送ACK
3. Master发送reg addr(8bit),等待ACK
4.Slave发送ACK
5. Master发起START
6. Master发送I2Caddr(7bit)和r操作1(1bit),等待ACK
7.Slave发送ACK
8. Slave发送data(8bit),即寄存器里的值
9.Master发送ACK
10. 第8步和第9步可以重复多次,即顺序读多个寄存器

IIC读数据的时序图

I2C学习笔记 - dp - dp: 生活的脚步,进步的点滴...


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

程序实现:

单片机对SDA和SCL的端口操作很简单,这里说一下PC应用程序怎么实现对IIC的操作。

第一个问题是权限,对底层操作需要RING0权限,这部分通过winio来实现,需要注意驱动级64位和32位是独立的,不兼容。

第二个问题是端口号,







  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值