nRF52832外设I2C的使用说明(附MAX44009光感传感器驱动代码)

背景

I2C是比较常用的通信接口,nRF52832的I2C它自己封装了一下变成:TWI(Two Write Interface),在它的SDK中有例程供我们学习,本文是基于twi_sensor和ble_app_uart例程完成的MAX44009光感传感器的数据读取,在移植twi驱动时遇到了很多问题,搜索网上一些资料感觉他们写的太简单,重要的的步骤比如:添加什么文件、需要配置什么文件等等,都没有说(可能是自己没有理解其中的深意吧!)所以自己决心写一个针对nRF52832的I2C的新手使用文档,希望可以帮助广大和我一样处于初学者的程序员们。

I2C原理

I2C的原理网上有一大堆资料,这里我说下自己对I2C的认识:
·1、I2C数据传输有2根线
SDA(数据线)和SCL(时钟线)。
·2、空闲状态
I2C的SDA和SCL在空闲时处于高电平。
·3、起始停止信号
起始条件是数据线在时钟高电平时由高电平向低电平跳变,停止条件是数据线在时钟高电平时由低电平向高电平跳变。
图1 起始和停止条件示意图
·4、字节传输格式
I2C 总线以字节为单位收发数据。传输到SDA线上的每个字节必须为8位。每次传输的字节数量不受限制。首先传输的是数据的最高位(MSB 第7位),最后传输的是最低位(LSB,第0位)。另外每个字节后必须跟一个响应位(ACK)。I2C传输数据如图2所示。
图2 I2C 总线的数据传输
图2  I2C 总线的数据传输
·5、ACK信号
每个字节后会跟一个bit,这就是ACK信号(高电平是NACK、低电平是ACK),注意在结束信号前的ACK信号是高电平。
·6、从机地址
I2C总线不需要额外的地址译码器和片选信号。多个具有I2C总线接口的器件都可以连接到同一条I2C总线上,它们之间通过器件地址来区分。I2C 总线的寻址过程通常是在起始条件后的第一个字节决定了主机选择哪一个从机,即7位寻址地址(另一种是10位寻址地址,有所不同,本传感器采用7位寻址地址)。第一个字节的位定义如图3所示,第一个字节的头7 位组成了从机地址,最低位(LSB)是第8位。它决定了报文的方向,第一个字节的最低位(LSB)是“0”:表示主机会写信息到被选中的从机;“1”表示主机会向从机读信息。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值