调试IIC通信,关于MAX9288,96705


1,背景

IIC通信,MCU(模拟IIC)作为主机,其余设备作为从机,如:MAX9288,96705。

 

2,夯实基础

2.1 IIC的启动条件和停止条件

启动条件:SDA from high to low while SCL is high

停止条件:SDA from low to high while SCL ishigh. (如图1)

调试IIC通信,关于MAX9288,96705_第1张图片

图1

 2.2 IIC的数据传输条件

The data on SDAmust remain stable while SCL ishigh. (如图2)

调试IIC通信,关于MAX9288,96705_第2张图片

图2

2.3 IIC的写入

2.3.1 单个字节的写入:(如图3)

调试IIC通信,关于MAX9288,96705_第3张图片

图3

 

2.3.1 多个字节的写入:(如图4)

调试IIC通信,关于MAX9288,96705_第4张图片

图4

 

2.4 IIC的读取(如图5)

调试IIC通信,关于MAX9288,96705_第5张图片

图5

2.5 IIC的应答

ACK应答,分为ACK应答和NACK应答。

ACK应答: ACK应答的位置在紧接着数据后的第一个字节或者是一帧数据的第九个字节。(如图6)

规则如下:主机写入数据时候,在第9个SCL为高的周期內,并且SCL需要保持高,从机SDA把高拉为低,传输在SDA总线上。主机去查询SDA的高低电平:

当查询SDA为低时,即:主机获得从机的ACK应答,该IIC线路,通信成功;

当查询SDA一直保存高时,即主机没有获得从机的ACK应答,该IIC线路,通信不成功;(查询的周期时间,不超过5个周期,eg:1ms)

NACK应答:类比ACK应答,类似的道理,不做重复性的描述。

 

 

调试IIC通信,关于MAX9288,96705_第6张图片

图6

 3,技术细节问题

3.1(模拟IIC)驱动调试

3.1.1GPIO口设置

(模拟IIC)涉及到的GPIO有两个,分别是SDA,SCL。设置为推挽输出模式,外部上拉3.3V。(如图7)

调试IIC通信,关于MAX9288,96705_第7张图片

图7

比如:当需要”SCL线”输出高电平时,需要SCL口输入一个低电平,让上拉3.3V导通,使得”SCL线”上的电平被3.3V拉高。

 

3.1.2等待时间的设置

(1)由于每个字节(Byte)的写入,都需要应答,称为ACK。在这个过程中,有很多需要等待的SCL为高的地方。

         比如:每个bit数据,写完后,需要等待SCL为高时,才可以进行下一步动作。有人会多写几个延时delay(),代替等待while()动作。但是,官方建议的是保留while(),等待保留。除非是硬件IIC,无需MCU等待。


(2)ACK的等待时间。

主机查询SDA为低电平时,需要SCL为高电平。因此,在查询SDA之前,要查询SCL是否为高。


有部分从机的IC,在处理主机发过来的第一帧数据,由于内部IC没有处理完或者一直在处理信号,会把总线上的SCL一直拉低,时间会持续1ms左右。然后在处理第二帧及以后的数据,又恢复正常,即:不会把SCL一直持续拉低。这样的IC信号有:MAX9288,部分的PIC单片机。

 

3.2调试近端IIC和远端IIC

对于主机而言,是多从机的IIC通信,近端IIC通信的对象是MAX9288,远端IIC通信的对象是MAX96705。

 

 


你可能感兴趣的:(IIC,IIC调试,MAX9288)