一起学nRF51xx 13 - twi & iic

前言

在IIC总线是PHILIPS公司推出的一种串行总线。IIC总线有2根信号线SCK(时钟线)和SDA(数据线)。NRF51822中所谓的TWI总线跟IIC总线兼容,这里统称为IIC总线。IIC总线规定了不同类型的从机拥有不同的IICADRESS,主机访问从机的时候需要提供从机的IICADRESS。这使得IIC总线上可以同时挂很多个传感器,执行器件而不会冲突。

上图中R的取值范围是4.7-10K ,NRF51822的IIC控制器是作为主机使用, NRF51822 IIC总线控制器的结构示意图如下。

左边为TASK,右边是EVENT。

TASK:

1)STARTRX:NRF51822开始接收从机发过来的数据。

2)STARTTX:NRF51822开始发送数据到从机。

3)SUSPEND:暂停通讯。

4)RESUME:恢复SUSPEND暂停的通讯。

5)STOP:停止通讯。

 

EVENT:

1)RXDRDY:接收已经完成。

2)TXDSENT:发送已经完成。

3)BB(byteboundary):字节的分界线。每当NRF51822发送完或者接收到一个字节的数据,会产生这个EVNET。

4)SUSPENDED:通讯已经被暂停。

5)ERROR:通讯中产生了错误。

6)STOPPED:通讯已经被终止。

 

NRF51822写数据到从机的时序

开始条件---器件地址+写标志---从机ACK---第一个字节---从机ACK---第N字节----从机ACK-----停止条件。

 

NRF51822读取从机寄存器数据的时序

开始条件---器件地址+写标志---从机ACK---从机发送第一个字节数据到IIC控制器---主机发送应答信号---从机发送第N个字节到IIC控制器----停止条件。

 

 

 

 

 

 

 

寄存器介绍

 

本例程演示的是NRF51822通过IIC总线与开发板上的MPU6050通讯,读出MPU6050的WHOAMI寄存器的特征码(0x68),并通过串口打印输出结果。

 

示例详解

基于硬件平台:nrf51822ek_tm开发板。

 

本示例所用的最小系统板原理图:

 

    1. 工程创建:
      1. 打开KEIL,新建一个空工程:Project->NewuVisionProject

工程名为nrfxx-twi确认后按下图选择芯片为nrf51822_xxAA->ok

在弹出的对话框中勾选CMSIS中的CORE;Device中的Startup(后面有nrf51Series字样的);在nrf_device中勾选nrf_gpio, nrf_uart, nrf_delay,nrf_twi,nrf_err并在nrf_Libraries中勾选app_error,nrf_assert模块。

 

 

 

OK之后工程自动生成如下代码:

新建一个空白文档,保存为main.c,并加入工程中:

配置工程,选择使用MicroLIB库,可以减小程序体积:

加入NRF51定义,并选择化等级3,可以减小程序体积,但仿真运行时可能会出现与代码顺序不一致现象:

 

调试工具选择J-LINK,并将接口设置为SW口勾选下载程序后自动复位及运行:

 

 

    1. 工程代码
      1. OK之后在man.c中加入如下代码:

 

      把程序编译,可以看到串口助手中打印了以下输出内容:

关于nrf51xx更详细介绍可以参看《nRF51822_RM_v3.0.1.pdf》或https://infocenter.nordicsemi.com/index.jsp。

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

文中源码资料下载,在公众号里给十三发消息:

下载|一起学nRF51xx 13

 

关注十三公众号

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值