(本文部分来源于网上资源)

1. I2C 总线概述

1.1 主要特征

nRF52832 片内集成了 TWI(Two-wire Serial Interface)两线串行总线,TWI 完全兼容 I2C 总线,简单一点,可以直接认为 TWI 是 I2C 总线。
典型的 I2C 应用原理如下图所示,I2C 总线通讯仅需两根信号线,可以连接多个设备, 从设备都有唯一的地址,主设备通过从设备的地址和不同的从设备通讯。

图 22-1:典型的 I2C 总线应用

I2C  总线硬件结构简单,仅需一根时钟线(SCL)、一根数据线(SDA)和两个上拉电阻即可实现通讯。

I2C 总线的 SCL 和 SDA 均为开漏结构,开漏结构的电路只能输出“逻辑 0”,无法输出“逻辑 1”,因此 SCL 和 SDA 需要连接上拉电阻。

上拉电阻的阻值影响传输速率,阻值越大,由于 RC 影响,会带来上升时间的增大,传输的速率慢,阻值小,传输的速率快,但是会增加电流的消耗,一般情况下,我们会选择 4.7K 左右的阻值,在从机数量少,信号线短的情况下,可以适当增加阻值,如使用 10K 的阻值。

I2C 总线中的从设备必须有自己的地址,并且该地址在其所处的 I2C 总线中唯一,主设备通过此唯一的地址即可和该从设备进行数据传输。

I2C 总线支持多主机,但是同一时刻只允许有一个主机。I2C 总线中存在多个主机时, 为了避免冲突,I2C 总线通过总线仲裁决定由哪一个主机控制总线。

I2C 总线只能传输 8 位的数据,数据速率在标准模式下可达 100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达 3.4Mbit/s,nRF52832 的 I2C 总线不支持高速模式。

同时连接到同一个 I2C 总线上的设备数量受总线最大电容(400pF)的限制。

I2C 总线电流消耗很低,抗干扰强,适合应用于低功耗的场合。

1.2 I2C 地址

I2C 总线中的设备必须要有唯一的地址,这意味着如果在总线中接入两个相同的设备, 该设备必须有配置地址的功能,这也是我们经常用的 I2C 接口的设备会有几个引脚用来配置地址的原因。

对于 I2C 地址,我们经常看到有的 I2C 接口设备在规格书中描述的是 7 位地址,而有的I2C 接口设备在规格书中描述的是 8 位地址,它们有什么区别?(I2C 也有 10 位地址,但用的较少,这里不做介绍,本章中的内容不涉及到 10 位地址)。

7 位地址和 8 位地址如下图所示,它们结构上是一样的,都是由 7 个地址位加一个用来表示读写的位组成,只是描述上有所区别。

规格书中描述I2C 地址是 7 位地址的设备:给出的是 7 个地址位加R/W 位,最低位(R/W 位)为 0 时表示为写地址,最低位为 1 时为读地址。如果把 0 和 1 分别带入 R/W 位, 得到的地址就和 8 位地址一样了。

规格书中描述 I2C 地址是 8 位地址的设备:直接给出写地址和读地址,也就是最低位(R/W 位)为 0 时的地址和最低位为 1 时的地址。

22-2:I2C 地址

由此可见,所谓的 7 位地址和 8 位地址实际上都是 7 位地址加上最低位的读写位,本质上是一样的,只是各个 I2C 接口设备的描述方式不一样。

I2C 保留了如下表所示的两组 I2C 地址,这些地址用于特殊用途。

从机地址

R/ W 位

描述

表 22-1:保留地址

0000 000

0

广播呼叫地址。

0000 000

1

起始字节。

0000 001

X

CBUS 地址。

0000 010

X

保留给不同的总线格式 。

0000 011

X

保留到将来使用。

0000 1XX

X

Hs 模式主机码。

1111 1XX

X

保留到将来使用。

1111 0XX

X

10 位从机寻址。

1.3 I2C 数据传输

(1)起始和停止条件(START and STOP conditions

所有的 I2C 事务都是以 START 开始、STOP 结束,起始和停止条件总是由主机产生, 如下图所示,当 SCL 为高电平时,SDA 从高电平向低电平转换表示起始条件,当 SCL 是高电平时,SDA 由低电平向高电平转换表示停止条件。如果总线中存在多个主机,先将 SDA 拉低的主机获得总线控制权。

图 22-3:起始和停止条件

(2)字节格式(Byte format)
I2C 总线发送到 SDA 上的数据必须为 8 位,即一次传输一个字节,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位,首先传输的是数据的最高位 MSB, 如果从机要完成一些其他功能后,例如一个内部中断服务程序才能接收或发送下一个完整的数据字节,那么从机可以将时钟线 SCL 保持为低电平强制主机进入等待状态,当从机准备好接收下一个字节数据并释放时钟线 SCL 后数据传输继续。

1.4 ACK NACK

每个字节后会跟随一个 ACK 信号。接收者通过 ACK 位告知发送者已经成功接收一字节数据并准备好接收下一字节数据。所有的时钟脉冲包括 ACK 信号的时钟脉冲都是由主机产生的。

ACK 信号:发送者发送完 8 位数据后,在 ACK 时钟脉冲期间释放 SDA 线,接收者可以将 SDA 拉低并在时钟信号为高时保持低电平,这样就产生了 ACK 信号,从而使得主机知道从机已成功接收数据并且准备好了接收下一数据。

NACK 信号:当 SDA 在第 9 个时钟脉冲的时候保持高电平,定义为 NACK 信号。这时, 主机要么产生STOP 条件来放弃这次传输,要么重复START 条件来启动一个新的传输。下面的 5 种情况会导致产生 NACK 信号:

(1)发送方寻址的接收方在总线上不存在,因此总线上没有设备应答。

(2)接收方正在处理一些实时的功能,尚未准备好与主机通信,因此接收方不能执行收发。

(3)在传输期间,接收方收到不能识别的数据或者命令。

(4)在传输期间,接收方无法接收更多的数据字节。

(5)主-接收器要通知从-发送器传输的结束。

1.5 从机地址和 R/W 位
I2C 数据传输如下图所示,在起始条件(S)后,发送从机地址,从机地址是 7 位,从机地址后紧跟着的第 8 位是读写位(R/W),读写位为 0 表示写,读写位为 1 表示读。数据传输一般由主机产生的停止位 P 终止,但是,如果主机仍希望在总线上通讯,它可以产生重复起始条件 S 和寻址另一个从机而不是首先产生一个停止条件,在这种传输中可能有不同的读写格式结合。

图 22-5:I2C 总线传输时序

可能的数据传输格式有:

(1)主机发送器发送到从机接收器,传输的方向不会改变,接收器应答每一个字节,如下图所示
(2)在第一个字节后,主机立即读从机,在第一次应答后,主机发送器变成主机接收器,从机接收器变成从机发送器。第一次应答仍由从机生成,主机生成后续应答。之前发送了一个非应答(A)的主机产生 STOP 条件。

图 22-7:主机发送第一个字节后立即读取从机

(3)复合格式,如下图所示。传输改变方向的时侯,起始条件和从机地址都会被重复,但R/W 位取反。如果主接收器发送重复 START 条件,它会在重复 START 条件之前发送一个非应答(A)。

图 22-8:复合格式

2. nRF52832 TWI 特点

本章描述的是 TWIM(带 EasyDMA 的 TWI 主机),本章中的 TWI 均指的TWIM,即 TWI 主机。

nRF52832 片内集成的 TWI(两线串行总线)兼容 I2C 总线,带有 EasyDMA,可与连接到同一总线的多个从机设备通讯,主要特点如下:

(1)兼容 I2C。

(2)速率:100 kbps、250 kbps 或 400 kbps。

(3)支持时钟延伸。

(4)带 EasyDMA。

(5)TWI 的 SCL 和 SDA 信号可以通过配置寄存器连接到任何一个GPIO,这样可以灵活地实现器件引脚排列,并有效利用电路板空间和信号路由。

nRF52832 的 TWI 的原理框图如下图所示,TWI 主机通过触发STARTTX 或STARTRX 任务启动TWI 传输,通过触发 STOP 任务停止 TWI 传输。TWI 主机在挂起时无法停止,因此必须在 TWI 主机恢复后触发 STOP 任务停止 TWI。启动 TWI 主机后,在TWI 主机停止之前,即在 LASTRX,LASTTX 或 STOPPED 事件之后,不应再次触发 STARTTX 任务或STARTRX 任务。如果从机产生 NACK 输入,那么 TWI 主机将产生ERROR 事件。

图 22-9:TWI 的原理框图

2.1 EasyDMA

TWI 主机通过 EasyDMA 实现数据传输,因此 TWI 的接收和发送缓存必须位于数据RAM 区域,如果 TXD.PTR 和 RXD.PTR 未指向数据 RAM 区域,则 EasyDMA 传输可能导致 HardFault 或 RAM 损坏。

.PTR 和.MAXCNT 寄存器是双缓冲的,因此在收到RXSTARTED/TXSTARTED 事件后, 可以立即更新并准备下一个 RX/TX 传输。STOPPED 事件表示 EasyDMA 已完成访问 RAM 中的缓冲区。

2.2 低功耗

当系统处于低功耗且不需要 TWI 外设时,为了尽可能降低功耗,应先停止 TWI,然后禁用TWI 外设来实现最低功耗。

如果 TWI 已经停止,则不需要触发 STOP 任务停止 TWI,但是如 TWI 正在执行发送, 则应等待直到收到STOPPED 事件作为响应,然后再通过ENABLE 寄存器禁用外设。

2.3 引脚配置

TWI 的 SCL 和 SDA 信号可以自由映射,通过设置 PSEL.SCL 和 PSEL.SDA 寄存器可以将它们映射到任意的物理引脚。

PSEL.SCL 和 PSEL.SDA 寄存器及其配置仅在 TWI 使能时使用,并且仅在器件处于 ON 模式时保留。TWI 禁用后,引脚将作为常规 GPIO 使用,即可以使用 GPIO 的 OUT 位字段和PIN_CNF [n]寄存器中的配置。PSEL.SCL 和 PSEL.SDA 必须在禁用 TWI 后才可以配置。

为确保 SPIM 中的正确行为,在使用 SPIM 前必须要正确配置 SPIM 的引脚,但是需要注意的是不能同时将多个 SPIM 外设的信号映射到同一个引脚,如不能将 SPIM0 和 SPIM1 的 MISO 同时映射到P0.05,否则,可能会导致不可预测的行为。

当系统处于 OFF 模式时以及 TWI 禁用时,为确保 TWI 主机使用的引脚上的信号电平正确,这些引脚应按照下表所示配置。

TWI 信号

SPIM 引脚

方向

输出值

驱动能力

SCL

由PSEL.SCK 寄存器设置

输入。

不适用

S0D1

SDA

由PSEL.SDA 寄存器设置

输入。

不适用

S0D1

表 22-2:TWI 使能前GPIO 配置

TWI 寄存器

nRF52832 片内集成了 2 个 TWIM 外设,如下表所示。

外设名称

基址

TWIM0

0x40003000

TWIM1

0x40004000

表 22-3:TWIM 基址

========******=========******========******=========******==========

白浪介绍:

(1)关于射频、微波、天线、无线通信、智能硬件、软件编程、渗透安全、人工智能、区块链,Java、Android、C/C++、python等综合能力的培养提升。

(2)各种学习资料、学习软件分享。

1.扫码关注公众号(Geekxiaobai)

2. 在后台发送“Python高级编程”“Python Graphics”或者“2003”,即可免费获得电子书籍。仅供学习之用。

3. 扫码关注后,查看往期内容,会有更多资料惊喜等着你来拿哦

想要更多相关学习资料,可以在文章后面留言哦,后期将会根据留言需求免费分享学习资料哦。

========******=========******========******=========******==========

I2C详解学习 - nRF52832蓝牙芯片 TWI-I2C学习详解笔记相关推荐

  1. NRF52832学习笔记(19)——TWI(I2C)接口使用

    一.硬件连接 功能口 引脚 SCL 5 SDA 4 二.移植文件 注意:以下出现缺失common.h文件错误,去除即可.uint8改为uint8_t或unsigned char或自己宏定义 链接:ht ...

  2. I2C详解(3) I2C总线的规范以及用户手册(2) I2C其他的总线协议以及总线速度

    I2C详解(3) I2C总线的规范以及用户手册(2) I2C 其他的总线协议以及总线速度 I2C详解(1) 一文快速了解I2C的工作原理 I2C详解(2) I2C总线的规范以及用户手册(1) I2C ...

  3. Nordic nRF5 SDK 学习笔记之四, TWI (I2C) 总线

    硬件: nRF52832 SDK: Ver 15.2.0 目标: TWI (I2C) 总线应用 (TWI MASTER 模式) 样例: <InstallFolder>\examples\p ...

  4. I2C详解(4) I2C总线的规范以及用户手册(3) I2C电气规格和时序

    I2C详解(4) I2C总线的规范以及用户手册(3) I2C电气规格和时序 I2C详解(1) 一文快速了解I2C的工作原理 I2C详解(2) I2C总线的规范以及用户手册(1) I2C 总线协议 I2 ...

  5. I2C上升沿时间过长过缓解决办法详解

    关于I2C,对于硬件工程师来说,属于低速信号,一般也不会有什么问题,最常见的问题也就是在测试信号质量时发现I2C的上升沿过缓,不符合I2C的标准,那么一般如何解决呢? 先看下图信号要求(来自I2C标准 ...

  6. nRF52832之硬件I2C

    这几天一直在折腾nRF52832的硬件I2C,到了今天终于出现了成果,在此也印证了那句话:"耕耘就有收获" 52832的硬件I2C虽然官方提供了demo,但是自己对I2C通信理解的 ...

  7. NORDIC52832 TWI(I2C) 特点 (2)驱动CHT8305C 温湿度传感器

    1. nRF52832 TWI特点 本章描述的是 TWIM (带 EasyDMA 的 TWI 主机) ),本章中的 TWI 均指的是 TWIM 即 TWI 主机. nRF 52832 片内集成的 TW ...

  8. NORDIC52832 TWI(I2C) 读 写 (1)

    1.I2C总线概述 1.1主要特征 nRF52832 片内集成了 TWI Two wire Serial Interface 两线串行总线 TWI 完全兼容 I2C 总线,简单一点,可以直接认为 TW ...

  9. JavaScript学习总结(四)——逻辑OR运算符详解

    转载自   JavaScript学习总结(四)--逻辑OR运算符详解 在JavaScript中,逻辑OR运算符用||表示 var bTrue = true;var bFalse = false;var ...

最新文章

  1. UIButton防止按钮和手势的暴力点击
  2. Android 探究 LayoutInflater setFactory
  3. python渐变颜色表_python – 具有固定颜色渐变的np.histogram2D
  4. java多态强制类型转换_java多态和强制类型转换
  5. jQuery 样式操作||操作 css 方法/设置类样式方法
  6. 手机被锁在耳机模式了
  7. 平板电脑有什么用_除了盖泡面,平板电脑没什么用了
  8. javascript-数据类型的转换
  9. 浙江工商大学计算机专业有博士点吗,[浙江工商大学]统计学(博士点)
  10. iphone已停用怎么解锁_iPhone多次输错密码已停用,连接iTunes,怎么办?
  11. Linux(Ubuntu)常用命令(五)—— vi/vim常用操作
  12. Massive MIMO简介
  13. Java,设计,功能权限和数据权限,用户、角色、权限和用户组
  14. 成都拓嘉启远:拼多多下单后地址错误能改吗
  15. python所有for循环语句都可以用while改写_所有for循环语句都可以用while循环语句改写。...
  16. 2021中大厂php+go面试题(2)
  17. 旅游类的APP原型模板分享——Priceline
  18. 移动应用如何利用社交平台获取流量
  19. 如何成功搭建一个游戏平台?
  20. GraphX 在图数据库 Nebula Graph 的图计算实践

热门文章

  1. 不能设置默认打印机的解决办法
  2. 计算机音乐数字乐谱童话,童话钢琴简谱-数字双手-光良
  3. 高效电脑工具Wox+everything
  4. 1139 - 【入门】孪生素数
  5. 面试是人生走向成功的第一步,你是怎样面对面试的呢?
  6. 金融科技大数据产品推荐:Hyperchain--国产自主可控的企业级联盟区块链平台
  7. 给年轻数据科学家:从新手小白到专家大师的进阶之路
  8. 大数据笔记10—java基础篇6(集合1-Collection)
  9. “速课小龙”项目冲刺
  10. Netty —— Netty 模型