一、I2C总线
1.I2C 总线
是由 PHILIPS 公司开发的两线式串行通信总线,一条串行数据线 SDA 和一条串行时钟线SCL,用于连接微控制器及其外围设备。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
2.I2C总线协议
① SDA和SCL都保持高电平表示“空闲”状态;
② 当SCL为高电平,SDA由高电平变为低电平时,产生“启动”条件;
③ 当SCL为高电平,SDA由低电平变为高电平时,产生“停止”条件;
④ 在通信过程中,SCL为低电平时允许SDA改变电平传送数据,SCL为高电平时读取数据;
3.I2C通信
(1)硬件连接
① SDA和SCL两条总线都被上拉电阻拉到 VCC,所有 I2C 设备都挂载在总线上,各设备的地位对等,都可作为主机或从机;
② 每个设备都可以把总线接到地拉低,却不许把总线电平直连 VCC而置高;
③ 把总线电平拉低称为占用总线,总线电平为高等待被拉低则称为总线被释放;
(2)I2C协议帧格式
① I2C总线数据传输为字节格式,发送到SDA上的每个字节必须为8位,先传输最高位(MSB),每个字节后都要跟一应答信号(ACK,从机发出);
② “启动”信号后的第一个字节,高七位表示从机地址,第八位决定信号的传输方向,如果是‘0’表示主机向从机写数据,如果是‘1’表示主机由从机读数据;
③ 主机发出第一帧地址和读写位后,地址符合的从机拉低总线,产生 ACK 应答信号。主机开始收或发(视 R/W)下一帧,直到产生停止位。这期间,其他从机不接收数据,仅判断停止位是否出现,等待下一次比对地址通信的机会。
(3)补充规定
① 从机往主机发送信息,主机突发情况需要和其他从机通信:
主机可以直接重新给起始信号,称为 Repeated Start。Repeated Start 后,主机发出新的地址,重新选择从机通信。
② 多个设备同时争夺总线控制权(仲裁)
与小地址通信优先:谁打算与地址小的从机通信,谁占总线。一个大地址和一个小地址同时“输出”到数据总线上,数据总线表现出来的只能是小地址。
二、I2C应用之DAC实验
1. 基本介绍
MSP430F5529通过I2C通信方式给DAC芯片DAC7571写入数字量,该芯片输出该数字量对应的模拟量。
2. 实验原理
(1)DAC
数模转换模块:是将数字量转换为模拟电量(电流或电压),使输出的模拟电量与输入的数字量成正比。D/A转换器基本由四个部分构成:基准电压源、权电阻网络、模拟开关、运算放大器。数字量以串行或并行方式输入,存储于数字寄存器中,数字寄存器输出的各位数码分别控制对应位的模拟电子开关,使数码为 1 的位在位权网络上产生与其权值成正比的电压值,再由求和电路将各种权值相加,即得到数字量对应的模拟量。
(2)DAC7571
1)输入:
① 供电电压Vdd:2.7~5.5V;
② 通信方式:I2C,且规定只能接收数据;
③ 逻辑电平:
2)输出:
① 建立时间(Settling Time):10 µs to ±0.003%FS;
② 输出电压: 轨对轨输出,0~Vdd;
③ 精度:12位数模转换器;
3)其他性能:
① 单通道,低功耗:在Vdd=5V时,输出功耗小于0.7mW;
② “Power On Reset”:电源复位电路,保证DAC输出功率为0直到有效数据写入,可用于在电源启动过程了解DAC的输出状态;
③ “Power Down Control Logic”:通过第二个字节的控制字(改变PD0,PD1)修改工作模式。
4)数据传输格式
当电源关闭模式被激活时,所有线性电路都被关闭。 当断电时,DAC寄存器的内容不受影响。 退出断电所需的时间通常是 2.5µ(VDD=5V)和5µs(VDD=3V)。优点在于断电模式下,设备的输出阻抗是已知的。
5)数据传输模式
Standard Mode (100 kbit/s), Fast Mode (400 kbit/s) and High-Speed Mode (3.4 Mbit/s).
三、I2C应用之温度压力传感器实验
1. 基本介绍
使用一个已经集成好的传感器模块,对传感器感知的温度、压力等进行读取显示。本实验难度在于对I2C的理解和代码的编写。
2.实验原理
补充:
① 数据传输流程:主机向传感器芯片通过I2C向从机发送写信号,写入从从机读取数据的寄存器地址,主机向传感器芯片发送读信号,主机从从机读数据;
② 数据读写的时候,只能按16位进行,传输时,先传低8位,再传高8位,传送8位过程中先传最高位(MSB);
③ 芯片提供标准和CRC检测两种模式,但CRC略显复杂,没有试验;
3. 实验内容
(1)试验现象
压力传感器不施加压力
压力传感器用手施加压力
(2)试验小结:
① I2C用GPIO模拟时钟的时候注意要上拉电阻,阻值和时钟频率有关,一般采用外部硬件上拉;并且注意时钟频率不要过高,具体看芯片和协议;
② 测试方法:用示波器单次触发捕捉波形,同时信号前后用软件延时长一些把不同次的信号隔开便于观察;