调试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)

图1

 2.2 IIC的数据传输条件

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

图2

2.3 IIC的写入

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


图3

 

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

图4

 

2.4 IIC的读取(如图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应答,类似的道理,不做重复性的描述。

 

 

图6

 3,技术细节问题

3.1(模拟IIC)驱动调试

3.1.1GPIO口设置

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

 

 


  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值