一、理论上了解I2C时序

I2C写数据时序如图:

 通过解析器解析I2C通信如上图(SCL和SDA反了)。

1—起始信号        2、3—应答信号ACK       5—停止信号

起始信号:SCL线是高电平时,SDA线从高电平向低电平切换。

停止信号SCL线是高电平时,SDA线从低电平向高电平切换。

I2C通信的过程:

起始—>写NFC芯片的地址(NFC芯片确认地址给MCU响应)—>MUC发送想要写入的寄存器地址(NFC芯片收到给响应)—>给地址写入数据(写入完成给响应)—>结束

注意:写NFC芯片的地址,一般NFC芯片为七位,比如:1010111,第八位是读写操作位。

1代表读;0代表写。

例如:0xA0是想对应芯片地址写数据。

遇到的问题:

写NFC地址的时候,没有收到对应响应。

查找数据手册后发现,有的芯片需要把CSN引脚拉低,拉低后解决问题。

二、实战

有一款NFC芯片FM11NT081D,它是通过I2C写入或读取里面数据的。

1、细看数据手册

粗略浏览数据手册目录,找到重点细看。

如:I2C工作流程、主机向从机写入数据流程及读取数据流程,还有写入数据用户区等。

 2、测试读写数据

2、1写数据

看数据手册分析:

芯片地址是1010111,七位地址

流程应该是:

start—>写NFC芯片的地址(最后一位是0,写数据)—>MUC发送想要写入的寄存器地址1—>MUC发送想要写入的寄存器地址2(注意高字节在前,低字节在后)  —>写入数据—>stop

对应写入代码测试效果。

 从下图看到数据写入成功。

遇到的问题:

我在写完两个寄存器地址后,告诉芯片现在开始写数据(这一步多余的,因为人家数据手册上告诉你:写入两个寄存器地址就可以写数据了!),加入了这个代码,时序上有回应,但是芯片读数据是没有写入信息。

 2、2读数据

 读数据就比较有意思了。

数据手册这样写:流程应该是:

start—>写NFC芯片的地址(最后一位是1,读数据)—>MUC发送想要写入的寄存器地址1 —>读数据—>stop

但是按照这个流程测试,读不到数据。

查看数据手册,字节数超过256,经询问要写入寄存器地址两个,在读取。

 

然后,修改了一下读数据流程:

start—>写NFC芯片的地址(最后一位是0,写数据)—>MUC发送想要写入的寄存器地址1—>MUC发送想要写入的寄存器地址2(注意高字节在前,低字节在后)  —>告诉芯片开始读数据 —>读数据—>stop

以上流程可以读到数据。虽然不太懂,MCU终于可以读到数据了(开心~)。

 

物联沃分享整理
物联沃-IOTWORD物联网 » I2C通信

发表评论