完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
IIC介绍:
IIC版本: 说到总线,其种类很多,但其目的基本一致,就是一个用于传递信息的公共干线。如芯片内部地址总线、数据总线其对象可能为CPU核与各外设(RAM/ROM/外设控制器电路等);芯片级总线I2C,SPI等,设备级总线如RS422/RS485/HART/CAN/Ethernet/Fieldbus… 速度模式 自 Version 4 之后 I2C 支持下面几种模式: 双向总线
超快速模式UFm 提供5 Mhz的I2C超快速模式UfM是可用的快速I2C模式。此模式与其他I2C模式完全不同:
超快速模式总线主要专注于LED设备,例如恩智浦(NXP)随附的LED控制器PCU9656。 I2C优势: I2C 标准能带来些啥好处呢?
从概念上,I2C 总线有两根线 SDA/SCL 就可以连一堆芯片,实现很多的应用。连接拓扑极简! 比如这样一个系统:
标准速度/快速模式: 高速模式拓扑: 混速模式拓扑: 工作原理: 如果使用 IO 口模拟 I2C 总线,或者使用 FPGA 实现 I2C 接口,深刻理解 I2C 时序波形无疑是重点中的重点!即使使用内置的 I2C 控制器外设实现一个 I2C 总线编程,在调试底层时或者踩坑过程中,深入理解时序波形原理,也是非常必要的! I2C 的时序图如下:
地址及 R/W
读写位 描述 [tr][/tr]
通用广播地址用于同时寻址连接到 I2C 总线的所有设备。但是,如果设备不需要处理广播数据,则可以通过不发出 ACK 来忽略该地址。如果某设备需要来自通用广播地址的数据,它将发送 ACK 给该地址并充当从接收器。 主机实际上不知道有一个或多个设备响应时确认了广播数据(不确定有多少个 ACK)。每个能够处理此数据的从机接收器都会确认第二个字节和随后的字节。无法处理这些字节的从机将不应答从而忽略。同样,如果一个或多个从机应答,则主机不会看到未确认的消息。通用广播地址的含义总是在第二个字节中指定,如下图: 1.当 B 为 0 时,第 2 字节定义如下:
这里来一个实际芯片的例子,以 Microchip 的 MCP3423/MCP3424 为例进行描述一下,MCP3423/MCP3424 是一颗多通道 ADC 芯片,其芯片引脚如下: 当接收到通用广播访问且第 2 字节为 06h 命令后,芯片做两件事情:
2.当 B 为“ 1”时,则该 2 字节序列为“硬件通用呼叫”。该报文由 I2C 主设备(例如键盘扫描器)发送,可以对其进行编程以发送所需的从地址。由于 I2C 主设备事先不知道该消息必须传输到哪个从设备,故利用通用广播地址及通用呼叫命令并将自身的地址放在高 7 位,从而标识总线上发送通用硬件呼叫的设备 ID。该地址由连接到总线的智能设备识别(比如该智能设备是一个单片机系统),然后该智能设备从硬件主机接收信息。如果硬件主机也可以充当从机,则从机地址与主机地址相同。 所以标准中定义这个功能,可以做些自适应应用,只需要制定出相应协议就可以完成比较灵活的多主通信应用协议。 软复位 如上面描述,当通用广播地址后面跟 06h 字节,就可以使从设备软复位。但这个功能并非所有芯片都支持,具体使用的时候需要仔细阅读芯片手册是否支持该功能。 须采取预防措施以确保设备在施加电源电压后不会拉低 SDA 或 SCL 线,因为这些低电平会阻塞总线。 起始 START 字节 单片机/DSP 可以用两种方法连接到 I2C 总线:
这就是起始字节需要解决的需求,前面介绍的就是起始字节设计的背景。那么起始字节究竟是怎样的呢?
在需要访问总线的主机发送了 START 事件之后,发送 START 字节(0000 0001)。另一个单片机/DSP 可以以低采样率对 SDA 线进行采样,直到检测到 START 字节中的七个零之一为止。在 SDA 线上检测到此 LOW 电平后,微控制器可以切换到更高的采样率,以找到重复的 START 事件,然后将其用于同步。 总线复位 在异常情况下,如果时钟 SDA 被拉为 LOW 了,则有哪些办法可以对总线复位呢?
//可能需要先关闭I2C控制器,如果是使用I2C控制器外设实现的 //I2C_SCL根据不同硬件进行移植,delay #define I2C_SCL P10 void soft_rst_i2c(void) { I2C_SCL = 1; for(int i=0;i<9;i++) { I2C_SCL = 0; delay(xx); I2C_SCL = 1; delay(xx); } } 前面两种方法是更健壮的方案,如果硬件不支持,可以考虑后一种方法,但后一种方法的前提是拉死 SCL 的设备需要支持这种功能,如果两端都是自定义开发的则比较灵活了。 总线锁死,是 I2C 总线系统常踩的坑,有哪些原因会导致锁死呢?程序不健壮,I2C 的波形不满足 I2C 规格书要求,或者在外加干扰情况下导致波形***扰。有经验的同学可能会遇到设备平时工作的好好的,但是做 EMC 测试,常常设备会莫名死机,如果你的设备有 I2C 总线,请记得检查 I2C 是否被 EMC 干扰干死了! 设备 ID 设备 ID 字段是一个可选的 3 字节只读(24 位)字,提供以下信息:
这个对于设计软件有什么可以利用的信息呢?比如一个系统可兼容不同厂家的基于 I2C 协议的传感器,利用这个字段就可以做设备信息管理。至于怎么读取,不同芯片或有不同。 接口电路简介 前面拓扑图中采用 open-drain 开漏结构。I2C 有的还用集电极开路输出结构,究其原因是内部是三极管的集电极开路。如下 Ultra Fast-mode 在 Rev 4 中还出现了 Ultra Fast-mode,该模式使用 push–pull 推挽定义 I2C 内部硬件接口电路(我把它叫推拉),这个又长什么样呢? 这种推挽接口是用在 Ultra Fast-mode(UFm)模式,为啥不继续采用集电极开路门/漏极开路门呢?因为这两种硬件已然无法满足如此高速的通讯波形要求了,推挽输出可以实现更为快速波形前沿特性以驱动总线电容负载。 对于 Ultra Fast-mode 模式其他如时序波形,报文定义基本一致,这里不做赘述了。需要提醒的是设备 ID 在该模式下不支持! 容性负载 为什么要特别讨论一下总线的容性负载特征呢?想象中的理想通信波形: 由于容性负载以及充放电常数特性,实际中却可能是这个鸟样: 如果实际总线中电阻选取过大,或者容性负载过大(设备节点过大或者布线不合理),也即RC常数过大, 所以就其本质而言,就是由于驱动接口电路的RC参数影响了波形的时序参数: 实际应用中,一方面电阻需要选取足够大以降低不必要的电流消耗,另一方面电阻又需要选择足够小以满足对应传输速度的波形时序要求。故需要在这一对矛盾体中寻求一个折中平衡!实际项目中先用示波器测测I2C波形非常必要,代码对了总线可未必如愿工作。做底层开发,尽量先硬后软~~ I2C 总线标准从电气特性界定了容性负载特征:
编程策略
编程时,比较好的方式就是处理相应的中断事件。利用内置 I2C 控制器是优选方案。
总结一下 I2C 总线是一个比较复杂的芯片间总线系统,你或许会用。但是如果不注意标准的很多细节,你可能无法用好!尤其总线上挂很多设备时,系统极可能不健壮!本文主要参考 I2C version 6标准,I2C 总线看似简单却极为复杂,本文总结了规格书中一些要点,也并不全面。在复杂应用场景中,还需要多多踩坑、填坑并加以总结。前文谈到了对于威廉希尔官方网站 要点尽量总结、概括以及提炼,这里想提醒的是一些威廉希尔官方网站 要点的标准往往是最为严谨、也最为全面的总结。具体使用时,可多多研读。 IIC典型应用电路 该图显示了包含I2C所有相关因素的两个设备(主设备或从设备)之间的I2C连接的简化等效电路图。 [tr]VCCI2C电源电压,通常为1.2 V至5.5 V[/tr]
在总线速度为100KHz时,Rp = 10kΩ和Cp = 300 pF(I2C标准将Cp限制为最大值400 pF)。 在整个传输线上,线长越长等效Cp就越大,通常情况下不建议调节Cp,为了提高线路的稳定性可以适当增加终端电阻Rp。 端接电阻Rp与导线电容Cp一起影响SDA和SCL上信号的时间行为。 Cc引起的问题 SDA与SCL之间的串扰 下图显示了典型的I2C传输。仔细观察信号可发现信号中的小尖峰。这些是由交叉通道电容Cc引起的结果。通常,只要产生的尖峰不太大,串扰就不会成为问题。通过使用尽可能短的互连,可以将Cc本身最小化。增加串联电阻Rs和端接Rp有助于降低交叉通道电容Cc的影响。 |
||
|
||
只有小组成员才能发言,加入小组>>
3269 浏览 9 评论
2947 浏览 16 评论
3446 浏览 1 评论
8967 浏览 16 评论
4041 浏览 18 评论
1084浏览 3评论
562浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
556浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2294浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1850浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 10:21 , Processed in 1.101887 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号