美文网首页
nrf52832(nrf52810)之硬件I2C(TWI)驱动B

nrf52832(nrf52810)之硬件I2C(TWI)驱动B

作者: Mo_辉仔 | 来源:发表于2019-05-08 17:36 被阅读0次

    1.目的:

    写一个关于nrf52832的用硬件I2C驱动一个传感器的流程文档

    2.分析:

    现在用IIC和BMI160六轴传感器通信来读取三轴加速度值和三轴陀螺仪值。TWI(Two Wire Interface)

            2.1  I2C通信需要两条线:SDA,SCL。I2C通信设备有两种角色:master和slave,一般用户开发程序都是开发master端,然后去读写作为slave的外设,比如:eeprom,flash,sensor,display device。

    2.2  在通信过程中,有两组特殊控制信号:

    start :scl为高电平时,sda由高电平变为低电平。

    stop: scl为高电平时,sda由低电平变为高电平。

             (注意在通信过程中,SCL始终由master控制,这句话在做模拟I2C的时候就显得意义非凡了)

           2.3  master做写数据操作时,先是SCL和SDA都处于空闲状态(两者都是高电平),然后SDA由高变低(start信号);变低          后SCL拉低,这个时候SDA就可以变成想要的电平,高电平代表bit为1,低电平代表bit为0;电平稳定后拉高时钟(拉高的目          的是为了让slave读取数据,SCL为高时,SDA要保持不变,slave读取SDA的电平);数据传输完了后要结束:先拉高SCL          ,然后拉高SDA,然后拉低SDA,一个完整的stop信号完成了。

    读数据操作时,start和stop这些时序一样,但是主机要去解析slave传来的数据(电平信号), 拉低SCL,然后释放SDA(即拉        高SDA),一段延时之后拉高SCL再去读取SDA电平信号(既然是读取电平,这里必要设置为输入引脚啦),如果是高电平则       记下是一个H_bit,否则是L_bit,读取到8位数据后如果还要继续读取则回复ACK,否则回复NCK。

    ACK信号是SCL拉低后给SDA一个低电平,然后拉高SCL;

    ANK信号是SCL拉低和给SDA一个高电平,然后拉高SCL;

    3.首先硬件IIC的配置

    3.1  配置需要用的IIC的通道(nrf52832有3个通道。nrf52810只有1个通道)

    3.2  配置IIC的引脚,传输速率,中断优先级等参数,然后初始化配置并且使能

    3.3  硬件IIC读写的函数

    3.4  配置从机传感器BMI160IIC

      添加上面配置所需要的参数和函数(BMI160有两个器件ID,需要看硬件的接法:SDO接地 ,ID地址 = 0x68;  SDO接VCC, 则ID地址 = 0x69)

    3.5  初始化BMI160

    4.最后在main函数添加上bmi160初始化函数,运行代码就可以看到 log 初始化传感器成功

    最后附上一张用逻辑分析仪测得的波形图

    相关文章

      网友评论

          本文标题:nrf52832(nrf52810)之硬件I2C(TWI)驱动B

          本文链接:https://www.haomeiwen.com/subject/ctuvoqtx.html